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

Storing a list with React Native AsyncStorage: many keys or one?

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

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

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

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

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

这两种方法各有优势 - React Native 更喜欢什么?

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

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

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

如果你决定走多键路线,看看 multiSet and multiGet, which allows you to retrieve several keys in a single function call. And getAllKeys 会帮你省去 "keep[ing] track of all the keys you created" 的麻烦,解决 Fredrick Motte 提到的两个问题。

要在一次调用中更新多个密钥,请查看 multiMerge which is a really powerful method, similar to mergeItem 但一次要更新多个密钥。

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

大卫关于让 Relm 看看的建议可能对您也有一定的价值,同样...取决于您的需要。

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

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

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

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

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