假设我有一个要存储在Firebase实时数据库中的数据列表,以后再搜索。
存储数据并查询以获得最佳性能的最佳方法是什么?
我的数据是一个名称列表(包含很多名称)。
[“ Bob”,“ Rob”,...]
请注意,我有多个客户端在给定时间内进行搜索。
答案 0 :(得分:1)
如果名称应该唯一并且顺序无关紧要,则需要将它们存储为数学集。在Firebase实时数据库中,您可以将其建模为:
"usernames": {
"Bob": true,
"Rob": true
}
关于此模型的一些注意事项:
true
值没有特定含义。由于Firebase无法存储没有值的密钥,因此仅需要它们。.
和/
)不能在键中使用。如果名称包含此类字符,则必须在键中将其过滤掉(或编码)。例如,名为Jes.sie
的某人必须存储为Jes.sie
(有损)或例如。 Jes%2Esie
(具有URL编码)。"Jes%2Esie": "Jes.sie"
。有关Firebase实时数据库中(文本)搜索的其他一些一般说明:
B
(以orderByKey().startAt("R").endAt("R\uF7FF")
开头的所有内容,但不能搜索以ob
结尾的所有内容。搜索区分大小写。如果要搜索不区分大小写的字符,请考虑将密钥存储为全小写:
"usernames": {
"bob": "Bob",
"rob": "Rob",
"jes%2esie": "Jes.sie"
}
如果您需要更好的文本搜索支持,请考虑集成第三方搜索引擎。常见的建议是Elastic-search(自托管)或Algolia(基于云)。
有关这些主题的更多信息,请参见: