使用React Native AsyncStorage存储列表:许多键还是一个?

时间:2016-04-07 08:53:07

标签: react-native asyncstorage

我想用AsyncStorage存储项目列表。该列表将随着时间的推移而更新。

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

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

现在,似乎存在两个存储此列表的选项:

  1. 将每个联系人存储在自己的密钥下
  2. 将整个列表存储在一个键下
  3. 这两种方法都有优势 - React Native最喜欢什么?

3 个答案:

答案 0 :(得分:7)

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

如果您决定使用多个键路线,请查看multiSetmultiGet,这样您就可以在单个函数调用中检索多个键。 getAllKeys将为您节省“保持跟踪所创建的所有键”的麻烦,解决了Fredrick Motte提到的两个问题。

要在一次通话中更新多个按键,请查看multiMerge,这是一种非常强大的方法,类似于mergeItem,但同时有多个按键。

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

大卫建议让Relm看一眼也可能对你有一些价值,再次......取决于你的需要。

答案 1 :(得分:3)

为了便于使用,我将整个列表存储起来;从那时起,您不必单独跟踪为每个联系人创建的所有密钥;加载/保存它们会更容易(只需一个函数调用而不是遍历所有联系人)。

但这主要是个人偏好;对于这两种方法中的任何一种都没有实际限制。

答案 2 :(得分:2)

我想补充克里斯和弗雷德里克的两个好答案: 这取决于列表的大小和文档的大小。

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

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

如果你正在处理数千或数万个元素,我认为你应该找一个像sqlite或realm这样的合适数据库(但目前调试是一个问题)。

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