繁体   English   中英

Mongodb大数组或查询

[英]Mongodb large array or query

我的问题与mongo处理大型数组的能力有关。

我想在主题更新到主题的所有订阅者时发送推送通知。 假设一个主题可以有100万订阅者。

在主题文档中保留一个庞大的数组,该数组包含所有已预订的用户ID,效率高吗? 还是保守的方法更好?是为每个用户保留一系列订阅的主题,然后查询用户集合以查找特定主题的订阅者?

编辑:

无论如何,我都会在用户集中保存一组订阅的主题(用于视图和编辑)

如果阵列很大,并且文档的累积大小超过16 MB,则将其拆分为另一个集合。 您可以将主题包含在集合中,并将其所有订阅者放入引用主题集合的单独集合中。

主要假设:与主题相关和与人相关的元数据存储在不同的集合中,此处讨论的集合仅用于跟踪主题订户。

将订户存储为与主题标识符(作为文档关键字,即索引字段)相关联的列表/数组有助于实现高效的结构。 有了感兴趣的主题后,您可以按主题标识符查找订户列表。 在这里,正如@Saleem正确指出的那样,您需要警惕大量的订户列表,这会导致文档超过16MB的文档大小限制。 但是,除了通过制作一个不同的集合来处理(如@Saleem所建议的那样)而使设计变得复杂之外,您还可以简单地将订户列表(使用模数16MB的操作分成所需的多个部分)并为同一集合中的主题。 鉴于主题标识符是一个索引字段,查找时间将不会受到影响,因为16MB可以容纳大量的用户标识符,并且如果需要的话,所需的拆分数应该非常低。

您建议的另一种结构,即订户标识符是文档密钥及其在文档中所有已订阅主题的文档密钥,对于大型数据集而言,效率并不高。 这种结构将涉及查找所有订阅当前主题的订户。 如果订阅的主题存储为列表/数组(似乎是可能的选择),则该查询将包含$in子句,该子句比索引字段查找要慢,即使对于用户群很大的小型主题列表也是如此。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM