繁体   English   中英

MongoDB:单独的集合用于读写,以实现高性能

[英]MongoDB: separate collections for read and write for high performance

我使用mongodb,并希望设计数据库以满足较高的可伸缩性要求。 目前,假设集合A被大量用于读写操作。 写入将暗示一个锁(现在为数据库锁,希望在将来的发行版中为集合锁),从而锁定读取操作。

我的想法是将A复制到A和A-tmp,这两个都有相同的架构。 A保留所有数据,而A-tmp最初为空。 新条目将插入A-tmp。 使用来自A-tmp的cronjob条目定期移至A。在写入后应用程序尝试查找数据时,将查找A,如果随后未找到数据,则查找A-tmp。 因此,当在A中找不到条目时,A-tmp主要用于写入和偶尔读取。A主要用于读取并定期从A-tmp写入。

这是一个合理的解决方案吗? 还是这几乎没有优势? 还是在我转向复制和其他硬件分片时为我处理?

写入将暗示一个锁(现在为数据库锁,希望在将来的发行版中为集合锁),从而锁定读取操作。

它不仅会自动锁定读取,锁定是作家贪婪,但有一些规则可以让读取等退却。

我将事实上粘贴此链接: http : //docs.mongodb.org/manual/faq/concurrency/

使用cronjob,A-tmp中的条目会定期移至A。

听起来很简单。

还是这几乎没有优势?

现在很好地注意到您的标题中提到了“ db”,但您的问题中提到了A和A-tmp都是集合。

我将以收藏为基础。

不,将它们分开不会有太大好处,除非有一个合理的逻辑理由说明原因,即应用程序/方案设计。

还是在我转向复制和其他硬件分片时为我处理?

这样的事情不会为您处理,复制会将您的数据库复制到集合中的其他成员,而分片会将您的数据库分布在多台计算机上。

他们与此完全不同。

在您的方案中,似乎与高可用性复制没有什么不同,因为副本集将为您提供A-tmp所需的行为,这与副本集中辅助节点的行为相同。 您将需要其他硬件,但在操作上使用副本集比管理cron作业要容易得多。

在MongoDB的高可用性场景中,您应该考虑要支持的容错级别,或者在该集合无法选择新的主数据库之前,有多少成员变得不可用。 此处记录了 HA以及其他一些其他问题。

暂无
暂无

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

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