【问题标题】:Storing a list with React Native AsyncStorage: many keys or one?使用 React Native AsyncStorage 存储列表:多个键还是一个?
【发布时间】:2016-04-07 08:53:07
【问题描述】:

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

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

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

现在,存储这个列表似乎有两种选择:

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

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

【问题讨论】:

  • 考虑使用像Realm这样的数据库。对于比键/值更复杂的数据,它比 AsyncStorage 具有许多优势。

标签: react-native asyncstorage


【解决方案1】:

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

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

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

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

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

【讨论】:

  • AsyncStorage 是否能够存储大量 Masterdata ?如果我对 JSON 对象进行字符串化并将其作为值存储在 Asyncstorage 中,AsyncStorage 中的键值的限制是什么
【解决方案2】:

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

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

【讨论】:

  • @Chris Geirman AsyncStorage 是否能够存储大量 Masterdata ?如果我对 JSON 对象进行字符串化并将其作为值存储在 Asyncstorage 中,AsyncStorage 中的键值的限制是什么
  • @MayurBaldha 有限制,我在 2015 年 4 月对此进行了一些研究。从那以后情况可能发生了变化,但我为你整理了我的笔记,这就是当时的情况...... Android Chrome 40、2MB Android 4.3、5MB iOS 限制为 10MB
  • @ChrisGeirman :一次在一个键值对中。考虑到您所说的这些限制,允许使用键存储为值的最大长度(字符数)是多少?
【解决方案3】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    • 2017-09-01
    相关资源
    最近更新 更多