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