最佳实践:10,000 多个字符串的 Angularfire 数据库结构

Best practice: Angularfire database structure for 10,000+ strings

在 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

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

TL;DR 这取决于...

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

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

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

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

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

这样您就可以节省 space 在 firebase 存储上的使用,并让客户完成工作,这甚至可以为您节省资金(更少 space 在云中,更少的云已用电量)。