最佳实践: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 在云中,更少的云已用电量)。
在 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 在云中,更少的云已用电量)。