我的问题 - 有没有办法同时读写MongoDB?或者让MongoDB读者贪心?
我有一个使用MongoDB作为数据库的Web应用程序。在我的应用程序中,我有一个我正在收听的串行事件。在这个串行事件中,我创建了一个新的线程来处理事件。在该线程中,解析来自serial的字符串,然后创建一个对象,然后将其写入mongo数据库(创建一个新文档并将其添加到特定集合中)。
但是,在发生此串行事件时,我还尝试从数据库中读取并更新图形以显示此集合中的新传入数据。问题是因为MongoDB是作家贪婪的(见http://docs.mongodb.org/manual/faq/concurrency/),似乎永远不允许发生读取。
我的连续剧事件大约每秒发生2/3次。我的阅读也是每秒发生2次左右。数据需要保持写入数据库,以便所有客户端都可以访问它,而不仅仅是接收Serial事件的客户端。
所以我的问题是,有没有办法允许我通读? 我可以将MongoDB上的锁定更改为读者贪心吗?或者有没有一种方法可以在不影响速度的情况下同时读写?是解决这个问题的方法(我不太了解分片,所以不确定这是否会解决我的问题)?
如果您想要发布任何代码,请告诉我们!任何评论或解决方法将不胜感激!
答案 0 :(得分:0)
你是说你的读物根本没有通过吗?究竟发生了什么?是的,每个数据库的mongodb写锁定可能会导致问题,但通常会比您讨论的事务级别高得多。
您的读者需要多快查看新写入的对象?如果你可以处理一些延迟,你可以阅读副本集辅助。不是没有它自己的问题(特别是处理复制延迟),它可以帮助只读查询。
我还会考虑查看mongostat和mongotop的输出,以了解数据库被锁定的时间以及正在使用的集合。