【问题标题】:Best practice: Angularfire database structure for 10,000+ strings最佳实践:10,000 多个字符串的 Angularfire 数据库结构
【发布时间】:2017-08-03 16:52:22
【问题描述】:

在 Firebase 中存储 10,000 多个字符串的最佳做法是什么?

long_lists/
    <user1>/
        string1
        string2
        ...
        string15000
    <user2>/
        string1
        string2
        ...
        string15000

根据The Firebase Blog – Best Practices: Arrays in Firebase,数组是一个很大的禁忌。

现在,看起来使用push() 方法为每个项目(key1:string1,key2:string2,...)生成唯一的键是最有意义的:

firebase.database().ref('long_lists/<uid>').push().key

我理解这个问题看似主观的性质,但我猜实际上只有一两种方法可以以高性能的方式为用户存储长的单级列表。 em>

【问题讨论】:

  • 存储数据几乎不是问题。这是您想要访问数据的方式,其中结构变得更加重要,并且可能成为可伸缩性的限制。请参阅我的回答 stackoverflow.com/questions/39712833/… 了解更多信息
  • @FrankvanPuffelen 好点,弗兰克——你链接到的 SO 问题很有帮助。就我而言,没有我需要访问的“最近”项目。我的应用程序经常检查 10,000 多个字符串的有效性,并可能删除它们。你觉得 {uniqueKey: string1, uniqueKey2: string2, ..} 结构适合这个吗? (也请参阅我对 Michal 回答的评论)

标签: firebase firebase-realtime-database angularfire


【解决方案1】:

TL;DR 这取决于...

我个人将我的数据构建为一个复杂的对象:

firebaseKey: "abcde"
name: "test"
order: 0

并按顺序获取它们。当一个对象被删除时,我保持原样(仍然排序),当添加一个对象时,我增加最后一个对象的顺序(保持它仍然排序)。显然,当事情需要移动时,我会重新调整所有索引。

话虽如此,您确实指出您的用例是每个用户超过 10k 个字符串。那么,如果它们不经常被修改甚至可能是不可变的,我会做一个由唯一字符分隔的长字符串,并在客户端做繁重的工作。

firebaseKey: "abcde"
value: "string1#string2#string3#string4"

这样您就可以节省自己在 Firebase 存储上的空间,并让客户完成工作,这甚至可以为您带来更多的金钱节省(云中的空间更少,使用的云能源更少)。

【讨论】:

  • 起初我对最后一个sn-p做了双重考虑。然后我意识到我最近在一大块不透明的 JSON 上做了同样的事情。这不是一种常见的做法,但在某些用例中,存储“大字符串”是正确的解决方案。 :-)
  • 感谢@Michal 的回答! “大斑点”技术也是我正在考虑的。我对此只有一个担心——因为我的应用程序经常访问列表,一直在解析和字符串化巨大的 (300kb+) 字符串让我感到紧张。但是现在弗兰克看到了你的帖子并给了它O.K.我倾向于“大斑点”技术。
  • @Tread 真的很大...也许考虑分页?每个用户的所有字符串都是唯一的吗?你能有一个查找表吗?这在架构方面听起来有点奇怪......
  • 访问列表!= 修改列表。访问和解析很好。频繁的写入操作会非常昂贵。
  • 刚刚进行了一些测试...我的旧 iPhone 6 可以解析 JSON。在 0.02 秒内解析一个包含 20,000 个字符串(每个字符串大约 30 个字符)的列表哈哈!我可以 JSON.stringify 一个 20,000 项 Array 并在大约 1.5 秒内更新 Firebase(这比向 Firebase 发送 20,000 个具有唯一 ID 的节点快 1 秒以上)。除非我的数字真的不正确,连接所有字符串的单个节点(在我的例子中是 JSON 字符串化)似乎足够快。猜猜计算机非常擅长解析数据;]再次感谢@Michal
猜你喜欢
  • 2023-04-08
  • 2016-09-21
  • 1970-01-01
  • 2011-09-13
  • 2010-10-23
  • 1970-01-01
  • 2014-10-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多