我如何处理MongoDB中的贪婪写锁定?

时间:2014-04-07 17:31:24

标签: java mongodb locking read-write readwritelock

我的问题 - 有没有办法同时读写MongoDB?或者让MongoDB读者贪心?

我有一个使用MongoDB作为数据库的Web应用程序。在我的应用程序中,我有一个我正在收听的串行事件。在这个串行事件中,我创建了一个新的线程来处理事件。在该线程中,解析来自serial的字符串,然后创建一个对象,然后将其写入mongo数据库(创建一个新文档并将其添加到特定集合中)。

但是,在发生此串行事件时,我还尝试从数据库中读取并更新图形以显示此集合中的新传入数据。问题是因为MongoDB是作家贪婪的(见http://docs.mongodb.org/manual/faq/concurrency/),似乎永远不允许发生读取。

我的连续剧事件大约每秒发生2/3次。我的阅读也是每秒发生2次左右。数据需要保持写入数据库,以便所有客户端都可以访问它,而不仅仅是接收Serial事件的客户端。

所以我的问题是,有没有办法允许我通读我可以将MongoDB上的锁定更改为读者贪心吗?或者有没有一种方法可以在不影响速度的情况下同时读写?是解决这个问题的方法(我不太了解分片,所以不确定这是否会解决我的问题)?

如果您想要发布任何代码,请告诉我们!任何评论或解决方法将不胜感激!

1 个答案:

答案 0 :(得分:0)

你是说你的读物根本没有通过吗?究竟发生了什么?是的,每个数据库的mongodb写锁定可能会导致问题,但通常会比您讨论的事务级别高得多。

您的读者需要多快查看新写入的对象?如果你可以处理一些延迟,你可以阅读副本集辅助。不是没有它自己的问题(特别是处理复制延迟),它可以帮助只读查询。

我还会考虑查看mongostat和mongotop的输出,以了解数据库被锁定的时间以及正在使用的集合。