问题描述
执行写操作时,数据库是否通过实体的键以某种顺序写实体?
例如,如果我编写了以下按键(故意使name
(1、7、3)不按顺序排列):
["A","1"]
["A","7"]
["A","3"]
是否对没有过滤器或排序的A
类型查询将返回结果为:
["A","3"]
["A","7"]
如果我的密钥包含时间戳(以毫秒为单位),则可能更重要:
["UserSession","e4facf67-969d-46f5-b922-390f61beac0a","UserRecord","1597872201000"]
["UserSession","1597872207000"]
["UserSession","1597872203000"]
会查询
("UserRecord").hasAncestor(["UserSession","e4facf67-969d-46f5-b922-390f61beac0a"])
返回按其名称排序的对象(又称时间戳,以毫秒为单位)?
- 1597872201000
- 1597872203000
- 1597872207000
解决方法
是的,Data Store模式下的Cloud Firestore确实按关键顺序存储实体。您可以从best practices文档中看到以下内容:
如果您将自己的手动数字ID或自定义名称分配给创建的实体,请不要使用单调递增的值
如果应用程序产生大量流量,则这种顺序编号可能会导致影响数据存储模式延迟的热点。