2015-03-31 108 views
-1

应用程序A打开mongodb并读取一个文档。该文档现在存在于应用程序A的内存中。应用程序B可能运行在不同的盒子上(但在这种情况下,作为在同一盒子上的不同过程中运行的模拟)将数据插入到文档中。应用程序A何时看到应用程序B的更改?访问同一个MongoDB实例的多个应用程序

Mongo配置为使用安全写入和日志。只有一个碎片。

Mongo更新会立即写入日志,但对数据文件的更新可能需要60秒(syncdelay = 60)。当两个不同的应用程序共享相同的实例时,这应该如何工作?

回答

1

当A再次查询文档时。

你应该看看你正在使用的WriteConcern

+0

没有帮助。应用程序B的更改尚未刷新到数据文件,因此当应用程序A查询文档时这些更改尚未完成。我通过在我的/etc/mongod.conf文件中设置一个新行来解决此问题 syncdelay = 20 这会将刷新间隔从每60秒减少到每隔20秒。在我的具体情况下,这是足够的。但这是一个特例解决方案。什么是通用解决方案? – 2015-04-01 13:39:54

+0

在问我的问题之前,先看WriteConcern。我们正在使用日记。但是,所有这些都确保日志更新,而不是其他mongodb用户读取的数据文件更新。只有每60秒刷新一次永久存储(默认情况下)。我们不是复制品集合;只有一个主要的。 – 2015-04-01 18:37:16

+0

令我难以忍受的行为是Journal在OS/X下似乎使用了一个不同的commitIntervalMs,然后它在Centos 7下执行。CentOS总是看到完整的60秒延迟,而OS/X似乎看到降低的值。在CentOS下通过OS/X的测试失败。在Centos上,远程调试器停止显示内存对象在mongodb更新后具有正确值,而RoboMongo显示物理数据文件尚未更新。 – 2015-04-01 18:47:00

相关问题