我正在考虑使用Firestore的应用程序的最佳数据模型。我不知道哪个选项更具性能/可扩展性? 这一个:
[Collection] Estimates ->
[Document] Estimate1 = items: [{name: 'Design', price: 200}, {name: 'Development', price: 200}]
或者这个:
[Collection] Estimates ->
[Document] Estimate1 ->
[Collection] Items ->
[Document] Item 1 = {name: 'Design', price: 200}
[Document] Item 2 = {name: 'Development', price: 200}
另一方面,除了性能问题之外,在选择数据模型之前,我还有另一个考虑因素。那就是我需要将'估计'节点的所有内容复制到'发票'节点,我不知道我是否可以在两种数据模型中都这样做。
答案 0 :(得分:8)
本文档将向您展示FireStore文档模型的一些限制。
https://firebase.google.com/docs/firestore/quotas
回答你的问题:
这取决于!这取决于您估计的物品数量。文档可以容纳1 MB的数据,因此它在可伸缩性方面受到限制。
[Collection] Estimates ->
[Document] Estimate1 ->
[Collection] Items ->
[Document] Item 1 = {name: 'Design', price: 200}
[Document] Item 2 = {name: 'Development', price: 200}
如果您使用上述选项,它肯定会更具可扩展性 - 您可以在集合中拥有与任何人想要的一样多的文档。
这两个选项都有效,您可以将数据复制到发票中。
然而,使用一个文档可能会更便宜,因为firestore会根据每次写入和读取而向您收取费用。因此,例如,如果您在一次写入中同时写入所有数据到一个文档,那么比将所有数据写入多个不同文档要便宜,即使您使用WriteBatch将它们全部写入同一文档也是如此时间。
根据模型并猜测你正在构建什么,我冒昧地猜测每个估计中不会有超过100个项目,所以我会选择一个文档进行估算。