创建可扩展且具有最佳读取性能的MongDB集合的最佳方法是什么?以下是假设
我们心中的选择。
任何建议将不胜感激。 感谢。
答案 0 :(得分:3)
不幸的是,由于limits您可以拥有的命名空间数量(24,000),每个用户的一个集合将无法工作。
我认为有一些好的方向可以去。你肯定会想要使用统一分发的分片密钥 - 用户名会很好。您对其可扩展性有何顾虑?
您可能需要查看TTL(生存时间)集合,以及Read preference以便从辅助服务器中读取您的应用程序。这可以通过分配工作负载来加快查询时间。
答案 1 :(得分:1)
在MongoDB世界中,没有一种最佳的架构设计。在MongoDB中,模式设计取决于应用程序如何访问数据。
以下是为MongoDB设计好的架构时需要回答的关键问题:
在MongoDB中,您有多种选择:您可以嵌入数据,可以创建链接关系,可以复制和非规范化数据,也可以使用混合方法。
@Shelman已经提到了“阅读偏好”,这是值得关注的,利用辅助词。
在扩展方面,Sharding似乎适合您。分片上的MongoDB Manual非常广泛,涵盖了体系结构,基础知识,部署,管理和内部(如果您非常热衷)。我强烈建议你阅读它。但是,正如@Shelman所说,你需要明智地选择你的分片键。 StackOverflow和MongoDB Google User Group上广泛涵盖了此主题。
避免连续分片键的一个原因是它会在插入上创建热点:在任何给定时间,单个分片将占用所有插入负载。您可能想要选择复合分片键。谷歌集团对此有一些很好的讨论:
如果您选择{username:1,timestamp:1}之类的内容,则用户的数据将在需要时分解为多个块并分布在服务器上。
这是关于选择分片键的文档的exact link。
=============================
以下是关于MongoDB架构设计的一些很好的一般参考。
MongoDB演示文稿:
这是一本关于MongoDB架构设计的书,我认为你会发现它很有用:
以下是一些示例架构设计:
=============================
以下是在MongoDB架构设计中使用'bucketed'方法的一些示例:
=============================
最近MongoNYC最近发表的一些分片报道: