错误:由于 AWS DynamoDb 表太大,数据库或磁盘已满(代码 13 SQLITE_FULL)?

Error: database or disk is full (code 13 SQLITE_FULL) because of too big AWS DynamoDb Table?

提问人:HansJuergen 提问时间:8/7/2023 更新时间:8/7/2023 访问量:104

问:

我在使用 react native 应用程序时遇到了此错误:

WARN  Possible Unhandled Promise Rejection (id: 0):
Array [
  [Error: database or disk is full (code 13 SQLITE_FULL)],
]

我遇到了一篇相关的文章,其中有人面临类似的问题:https://github.com/aws-amplify/amplify-js/issues/8640。经过一番调查,我怀疑这种拒绝与 AsyncStorage 有关,因为 Android 设备中的数据库限制为 6MB。我的iOS设备正在运行该应用程序,没有任何错误。

问题似乎与我的 DynamoDB 中的表有关,我正在使用 AWS Amplify DataStore 访问该表。此特定表的大小约为 15MB:

table

现在我不明白为什么会这样。数据存储在我的 DynamoDb 中,我只查询单个表条目或执行简单的保存(DataStore.query 或 DataStore.save) 示例:

     const getTypeForId = async (typeId) => {
    try {
      const type = await DataStore.query(CarType, (carType) =>
        carType.carTypeId.eq(typeId)
      );
      setSelectedCarType(type[0]);
    } catch {
      console.log("No Type for Id");
    }
  };

那么,我的虚拟 Android 设备上的 ASyncStorage 是如何完全填满的呢?

amazon-web-services react-native amazon-dynamoDB 数据存储 asyncstorage

评论


答:

0赞 Leeroy Hannigan 8/7/2023 #1

这不是 DynamoDB 产生的异常,它来自设备本身的某些内容,通过利用某种本地存储。例如,如果您使用的是 DynamoDB Local 或其他形式的本地存储。

以下是有关异常的官方SQLITE文档:https://www.sqlite.org/rescode.html#full

评论

0赞 HansJuergen 8/8/2023
从 15MB DynamoDB 表中删除大部分内容(仅保留 5 个条目)后,将不再发生错误。这一发现强烈表明,该错误确实与表的大小有关。我也不使用 DynamoDB Local 或其他形式的本地存储。
0赞 Leeroy Hannigan 8/8/2023
我向你保证,DynamoDB 不会告诉你你有太多的数据,你存储的数据量没有上限。此外,DynamoDB 不使用 SQLite,而 SQLite 是异常的来源。
0赞 Leeroy Hannigan 8/8/2023
读取数据后,您可能正在使用临时目录,因此减少读取和临时存储的数据量可以避免错误。
0赞 HansJuergen 8/8/2023
是的,我确定 DynamoDB 不是问题所在。但是我按照 Datastore.query 的规定查询具有特定 ID 的条目。所以不应该有大量的数据临时存储,因为我只访问 1 个元素......
0赞 Leeroy Hannigan 8/8/2023
我建议在 Android Studio 中调试您的存储,只是为了了解它被填充了什么。