google-cloud-firestore - firestore 子集合中的单调 ID
问题描述
我正在创建一个数据库集合,该集合将包含一个包含旧版本的根级别内容的子集合。集合结构看起来与这个问题的结构非常相似:
Firestore-root
|
--- content (collection)
|
--- contentId (google generated) (document)
| // latest fields here
----|
--- history (subcollection)
|
--- oldContentId
// old field/values here
--- oldContentId2
// old field/values here
因此,如果我想获取旧版本的内容,我可以调用:
const oldContent = await fs.collection("content").doc(contentId).collection("history").doc(oldContentId).get();
我想对history
子集合中的文档 id 使用类似单调的 id。我知道避免使用此类 ID 以避免热点的建议。我不清楚的是,对于子集合中的文档的 ID,此建议是否保持不变。我的猜测是确实如此,但只是想清楚一点。
因此,例如说我为子集合使用谷歌生成的 id 并获得:
# ggdId == google generated Id
content/ggdId-1/history/ggdId-1
content/ggdId-1/history/ggdId-2
...
content/ggdId-1/history/ggdId-N
content/ggdId-2/history/ggdId-1
content/ggdId-2/history/ggdId-2
...
content/ggdId-2/history/ggdId-N
谷歌云会比我在子集合中使用类似单调的 id 更好地分割这些数据:
content/ggdId-1/history/1
content/ggdId-1/history/2
...
content/ggdId-1/history/N
content/ggdId-2/history/1
content/ggdId-2/history/2
...
content/ggdId-2/history/N
最后,建议是硬性规则,还是取决于集合/子集合的使用方式是否存在细微差别?所以说我不期望对history
子集合有这么多的高读/写,这是否意味着人们可以使用类似单调的 id。
解决方案
我不清楚的是,对于子集合中的文档的 ID,此建议是否保持不变。
避免单调 ID 的建议适用于所有集合,无论它们是如何嵌套的。它只是无法按照 Firestore 的要求进行扩展。确实没有解决方法。
如果您确定吞吐量不会太高以至于会导致问题,那么请执行您想要的操作。但最好使用随机生成的 ID,并仅根据文档的字段进行排序。
一般来说,对于必须大规模扩展的云服务,订购是困难的。
推荐阅读
- vue.js - Vee 验证:isBetween 带有参数的自定义规则不起作用
- python - 如何以这种方式对值进行排序?
- ruby-on-rails - 升级在 redmine 4 中添加控制器操作的安全方法
- c# - 从列表运行任务
- javascript - 确定某个坐标上的所有 SVG 元素(鼠标单击)
- html - 如何获得带有居中徽标的标题
- autodesk-viewer - 如何在标记核心扩展中创建新的标记工具?
- c# - ASP.NET MVC:Unit Test EditorFor 生成一个空的 MvcHtmlString
- ruby-on-rails - 无法从我的控制器中的 Ajax 获取请求中读取参数
- c# - 比较通用的两个对象