Firestore中的性能更高的选项是什么,是一个对象数组还是一个子集合?

时间:2017-12-10 08:43:49

标签: firebase google-cloud-firestore

我正在考虑使用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}

另一方面,除了性能问题之外,在选择数据模型之前,我还有另一个考虑因素。那就是我需要将'估计'节点的所有内容复制到'发票'节点,我不知道我是否可以在两种数据模型中都这样做。

1 个答案:

答案 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个项目,所以我会选择一个文档进行估算。