8

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

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

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

现在,似乎有两个选项可以存储此列表:

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

这两种方法都有优点——React Native 中首选的是什么?

4

3 回答 3

8

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

如果您决定采用多键路线,请查看multiSetmultiGet,它们允许您在单个函数调用中检索多个键。getAllKeys将为您省去“跟踪您创建的所有密钥”的麻烦,解决 Fredrick Motte 提到的两个问题。

要在一次调用中更新多个键,请查看multiMerge,它是一种非常强大的方法,类似于mergeItem但一次多个键。

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

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

于 2016-04-08T13:20:17.240 回答
3

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

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

于 2016-04-07T09:12:10.927 回答
3

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

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

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

而且,如果您要处理成千上万个元素,我认为您应该选择像 sqlite 或领域这样的适当数据库(但目前在领域中调试是一个问题)。

有兴趣知道 asyncStorage 的真正限制,我在某处读到,它是几兆字节,除非您在本机配置中要求增加它

于 2017-07-11T09:12:47.670 回答