Collection设置MongoDB的伸缩



我正在尝试概念化扩展MongoDB数据库的最佳方法。

例如,假设您想在后台使用MongoDB创建一个销售不同州房屋的网站。为了将来的可伸缩性和站点性能,最佳实践是为每个州设置多个集合,还是在USA下列出所有内容,然后在集合中搜索或查找州?

**Collection - Texas**
{"_id":{"$oid":"xxxxxxxxxxxxx"},"name":"Modern loft","state":"Texas"}
{"_id":{"$oid":"xxxxxxxxxxxxx"},"name":"Vacant Plot","state":"Texas"}
x 1000 entries
**Collection - USA**
{"_id":{"$oid":"xxxxxxxxxxxxx"},"name":"Family Home","state":"Texas"}
{"_id":{"$oid":"xxxxxxxxxxxxx"},"name":"Beach House","state":"California"}
x 1000 entries

这完全取决于你如何搜索和呈现数据…

从性能的角度来看,最好将数据库中的数据分成每个州和每个集合来代表城市,但这意味着应用程序中支持模型的额外逻辑和从所有州/城市获取全局细节的逻辑将变得更加复杂。

如果你把所有的东西都放在一个集合中,并且你选择了好的索引,那就没有问题了,在某个时间点,当数据库增长时,你只需要把集合分成更多的碎片,但是处理数据库的逻辑将保持简单,因为你将把所有的东西都放在一个地方。(这是你选择的数据库mongodb可以提供帮助,因为分片机制是内置的,非常容易配置)

所以我似乎分裂数据状态好的妥协,因为没有必要的人从美国俄勒冈州查询所有的数据找到一些房子在某些小村庄在俄勒冈州时只能搜索集合在俄勒冈州,但同时如果碎片收集和你有很好的分片指数,包括状态、查询会只是俄勒冈州数据所在的碎片…对于分片,还有其他技巧,例如,如果你搜索带有游泳池的房子,但你没有在过滤器中包含状态(如果它是分片键),查询将对所有分片进行分散收集以找到那些房子…

我希望这能回答你的问题…

最新更新