使用React Native AsyncStorage存储列表:多个键或一个键



我想用AsyncStorage存储项目列表。该列表将随时间更新。

以下是列表可能处于的状态示例:

[
  { 
    name: "Alice", 
    email: "alice@example.com"
  }, 
  {
    name: "Bob", 
    email: "bob@example.com", 
    address: "30 Madison Ave., NY"
  }
]

现在,似乎有两个选项来存储这个列表:

  1. 将每个联系人存储在自己的密钥下
  2. 将整个列表存储在一个键下

这两种方法都有优势——React Native中更喜欢什么?

我认为这取决于您计划如何使用、访问和更新数据。有几种异步存储方法可以帮助简化这两种情况。

如果你决定走多键路线,看看multiSet和multiGet,它允许你在一个函数调用中检索多个键。getAllKeys将为您省去"跟踪您创建的所有密钥"的麻烦,解决Fredrick Motte提到的这两个问题。

要在一个调用中更新多个键,请查看multiMerge,这是一个非常强大的方法,类似于mergeItem,但同时更新多个密钥。

所以,你看,你真的可以走任何一条路。如果您将数据划分为多个键,那么您可能只想花一些时间熟悉我上面提到的方法。

大卫给雷姆看一眼的建议可能对你也有价值。。。根据您的需要。

为了便于使用,我会将列表作为一个整体存储;从那时起,你就不必单独跟踪为每个联系人创建的所有关键点;加载/保存它们会更容易(只需一个函数调用,而不是在所有联系人上循环)。

但这主要是个人偏好;这两种方法中的任何一种都没有真正的约束。

我想补充Chris和Frederick的两个好答案:这取决于列表的大小和文档的大小。

将一个列表作为一个整体更容易管理,但不会扩展(计算会随着全局值的大小而变得更重)。每个项目使用一个键会增加一些复杂性,但会扩展。

就我个人而言,我从一个键中的所有内容开始,现在正在重构,每个键只有一个文档,因为当我处理数百个大文档时,性能明显会下降。

如果您正在处理成千上万的元素,我认为您应该选择合适的数据库,如sqlite或realm(但目前在realm中调试是一个问题)。

我很想知道asyncStorage的真正限制,我在某个地方读到,它只有几兆字节,除非你在本地配置中要求增加它

最新更新