正如标题所暗示的那样,使用第二个数据库来写大量数据是Mongo的一个好选择吗?例如,对于投票(对堆栈溢出问题等对象进行投票)和页面查看信息,第二个数据库是否包含引用第一个数据库中对象的文档是否有意义?
或者将所有内容放在一个数据库中会更有意义吗?
我知道对于不需要立即向用户显示的写入(如编写和更新页面浏览量),许多应用程序会将数据写入内存层(如memcache),然后按间隔批量更新数据库。我现在想避免创建这样的系统。
答案 0 :(得分:3)
如果使用“第二个数据库”意味着第二个mongod进程减少写锁争用,那么是的,您的解决方案将有所帮助。请注意,分片基本上提供了额外的写入(和读取)吞吐量,但更灵活且与应用程序无关。
如果您的意思是在单个mongod进程上创建第二个数据库,那么根本无济于事。 Mongo写锁是mongod进程范围。
更新:从MongoDB 2.2开始,写锁定发生在数据库而不是进程级别,如果使用多个逻辑数据库,这将导致写锁争用减少。
答案 1 :(得分:0)
2.0中的Mongod具有所谓的锁定与屈服,这意味着它会查看您更新的内容是否在内存中并且没有页面错误会立即更新,如果不会产生锁定。 根据设计,一个mongod有一个全局锁定,解决它的唯一方法是碎片,因此你将有多个mongod,但这引入了一个新的复杂程度。 如果您设法在内存中设置了所有活动数据,那么您应该没问题,但这完全取决于您的应用程序需求和数据集。 请注意,这不是制作mongo重写的银弹。
我建议您在投入生产之前对应用程序进行基准测试。