MongoDB:用于读取和写入的独立集合,以实现高性能

时间:2014-01-09 09:33:49

标签: mongodb database-design

我使用mongodb并希望设计数据库以满足高可扩展性要求。目前,假设集合A大量用于读写。写入意味着锁定(现在数据库锁定,希望在将来的版本中锁定集合),锁定读取操作。

我的想法是将A复制到A和A-tmp中,两者都具有相同的模式。 A保持所有数据,而A-tmp最初为空。新条目将插入到A-tmp中。使用来自A-tmp的cronjob条目会定期移动到A.当应用程序尝试在写入后查找数据时将查看A,如果找不到数据,则随后查看A-tmp。因此,A-tmp主要用于写入,偶尔在A中找不到条目时读取.A主要用于读取并从A-tmp周期性地写入。

这是一个合理的解决方案吗?或者这几乎没有优势?或者,当我使用其他硬件进行复制和分片时,这是否为我处理?

2 个答案:

答案 0 :(得分:2)

  

写入意味着锁定(现在数据库锁定,希望将来版本中的锁定锁定),锁定读取操作。

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

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

  

使用来自A-tmp的cronjob条目会定期移动到A.

听起来很简单。

  

或者这几乎没有优势?

现在最好注意你的标题提到“db”,但是你的问题提到A和A-tmp都是集合。

我将继续收藏。

不,分离它们没有多大好处,除非有一个严重的逻辑原因,为什么,即应用程序/架构设计。

  

或者当我使用其他硬件进行复制和分片时,这对我来说是否处理过?

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

它们与此完全不同。

答案 1 :(得分:2)

在您的方案中,它似乎与high-availability replication不同,因为副本集将为您提供A-tmp所需的行为,这与副本集中的辅助节点的行为相同。您将需要额外的硬件,但使用副本集操作将比管理cron作业容易得多。

在使用MongoDB的高可用性方案中,您应该考虑在集合无法选择新主节点之前,您希望支持的容错级别或有多少成员可用。此问题和其他一些HA问题是documented here