我正在尝试概念化扩展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发布于 2021-01-23 19:45:10
这完全取决于你如何搜索和呈现数据……
从性能的角度来看,最好是按州和集合划分数据库中的数据来表示城市,但这意味着应用程序中支持模型的额外逻辑和从所有州/城市获取一些全局详细信息的逻辑将变得稍微复杂一些。
如果您在单个集合中拥有所有内容,并且选择了良好的索引,则不会出现任何问题,在数据库增长的某个时间点,您只需要将集合拆分到更多的分片中,但处理数据库的逻辑将保持简单,因为您将所有内容都放在单一位置。(这就是你选择的数据库-mongodb可以提供帮助,因为分片机制是内置的,并且非常容易配置)
因此,在我看来,将数据拆分成州是一种很好的折衷办法,因为俄勒冈州的人不需要查询所有的美国数据来在俄勒冈州的某个小村庄中找到很少的房子,而他们只能搜索俄勒冈州的集合,但同时如果您对集合进行分片,并且您有良好的分片索引(包括该州),查询将只转到俄勒冈州数据所在的分片...,使用分片还有其他技巧,例如,如果您搜索带有游泳池的房屋,但是您没有在过滤器中包含状态(如果它是分片键),查询将对所有分片执行scatter-gather,以找到这些but……
我希望这能回答你的问题。
https://stackoverflow.com/questions/65858431
复制相似问题