我使用indexedDB(通过npm的idb包装)来存储表示音频通道数据的2D Float32数组。但是,当其中一个数组的长度接近16658432时,它在一段时间内会正常工作,而标题中的异常则会导致idb崩溃。堆栈跟踪非常无用,因为我使用的是React和Next.js,但是从我的判断来看,它似乎在idb的缓存部分崩溃了。注意:我可以存储多个大数组没有问题,但是一旦它们中的任何一个超过这个“限制”,一切都会中断。
这是我必须处理的一个限制,还是可以用某种方式解决?我可能会将2D数组分割成两个数组,并将它们作为单独的条目存储,但这不是一个理想的解决方案,一旦它们增长,就会导致同样的问题。
只是idb事务的一个简单包装:
export const asyncPut = async (
dbName: string,
tableName: string,
key: string,
value: any // [Float32Array, Float32Array]
): Promise<void> => {
try {
const db = await asyncOpenDb(dbName, tableName);
const transaction = db.transaction(tableName, "readwrite");
await transaction.objectStore(tableName).put(value, key);
} catch (error) {
// I catch the error here
console.error("**IDB Error:", error);
}
};发布于 2019-08-20 18:01:58
我刚刚在Chrome上测试了这个,他们可能已经改进了你测试后的错误。
当我试图插入这个数组时遇到的错误:
ar = new Array(16658432).fill(1)是它超过了单个对象的最大大小:
target: IDBRequest
error: DOMException
code: 0
message: "The serialized keys and/or value are too large (size=515354750 bytes, max=133169152 bytes)."
name: "UnknownError"
__proto__: DOMException在以下方面测试:
https://stackoverflow.com/questions/56697359
复制相似问题