gpt4 book ai didi

javascript - 如何高效地将大文件加载到 IndexedDB 存储中?我的应用程序在超过 100,000 行时崩溃

转载 作者:行者123 更新时间:2023-11-30 14:12:50 25 4
gpt4 key购买 nike

我有一个特定的 Web 应用程序,它依赖于从客户端的本地文件上传大量数据行。目的是将此数据存储在索引数据库中。

数据只有两列我感兴趣,每列包含一串不超过 25 个字符的字符,但是最多可以有 100 万行。

阅读了很多问题和文档后,我创建了一些代码,这些代码似乎可以在创建 indexeddb 时使用低于 20,000 行的较小数据集,但会破坏较大的数据。

我确定这是由于设计不佳,因为我是这种工作方式的新手,或者可能是 Chrome 浏览器中的某种卡住 - 因为我没有收到任何错误消息,我可以触发警报显示已达到最后一个 for 循环,但是 on.complete 永远不会触发并且数据库似乎永远不会

函数 e - 的输入是一个读取文件。

我还在 for 循环中对数据执行操作,但为了简单起见,我已将其删除。

function storeDataEnc (e) {
var lines = e.target.result.split('\n');
var request = self.indexedDB.open('DB', 1);
request.onerror = function(e) {
console.log("there was and error:" +e.target.errorCode);
}
request.onupgradeneeded = function(e){
var db = request.result;
var store = db.createObjectStore("col1", {
keyPath: "col2"} );
};

request.onsuccess = function(e) {

var db = request.result;
var tx = db.transaction("dataTable", "readwrite");

var store = tx.objectStore("dataTable");

db.onerror = function(e){
console.log("ERROR" + e.target.errorCode);
}


for (var i = 0; i < lines.length; ++i) {
var test = lines.length - 1;
if (i == test) {console.log('nearly done')};

function forEachLinenow (match) {
if ( match.charAt( 0 ) != '#' ) {
match = match.trim();
var fields = match.split('\t');
var col1in = fields[0];
var col2in = fields[3];

store.put({ COL1: col1in, COL2: col2in }
}
forEachLinenow(lines[i] + '\n');
}
tx.oncomplete = function() {
db.close();
alert("all data read");
}
}
}

我猜我不明白浏览器在阻止恶意应用程序占用过多资源方面存在一些问题。有没有人使用过这种大小的数据,谁能发现我的过程中的错误。

我的猜测是我可能需要生成多个交易,我确实尝试过,但似乎并没有改变我的问题。

我知道这可能会很慢,但是只要数据成功导入,速度本身并不是最大的问题。

最佳答案

您可能会达到浏览器的数据大小限制。

在 mozilla 文档中它提到了限制 https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Browser_storage_limits_and_eviction_criteria

这里有一些 indexeddb 的更多限制,由 google 记录的流行浏览器。 https://developers.google.com/web/fundamentals/instant-and-offline/web-storage/offline-for-pwa

似乎限制都是基于主机操作系统的可用存储空间。检查您希望导入的数据的大小和您的可用存储空间。

关于javascript - 如何高效地将大文件加载到 IndexedDB 存储中?我的应用程序在超过 100,000 行时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54100925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com