我在MongoDB上遇到并发读写问题,并且想知道数据库系统中是否嵌入了简单的解决方案。
我有一个收集应用统计信息的对象,并在MongoDB中作为单个文档在自己的集合中表示:
{
"animals": {
"cats": 0,
"dogs": 0
}
问题在于,只要用户将猫添加到他们的个人资料中,我就会获得该文档,增加cats
次数并编写文档。但是,如果用户在cat之后添加dog
,则读取的文档将为0-0并且将写入0-1而不是1-1。
这是一个典型的并发读/写,但我想知道是否有办法防止这种情况而不添加我自己的锁定系统。谢谢!
另外:猫和狗是一个简单的例子,我正在主持一个聊天统计数据库(发送,接收,错误......)。
不相关:Issue with single document concurrent read and write operations in mongodb / node.js
答案 0 :(得分:1)
在这种特殊情况下,您可以使用增量运算符$inc
(https://docs.mongodb.com/manual/reference/operator/update/inc/)而不是读取后写入。
$inc
是一个原子操作,因此不应该说明你读过的问题,然后写
答案 1 :(得分:-1)
我认为这与" watchify"有关。它是并发读写的工具。
如果您安装它,它将监视更改并应用于前端。