Mongodb - 锁定集合和插入记录

时间:2013-10-28 16:40:45

标签: mongodb

我正在尝试使用多个VM实现集中逻辑。 我有一个应用程序在5个VM上运行。只有1个VM负责执行一项任务。 为了让我将VM的主机名写入数据库。但是要将该名称更新为数据库,我必须使用java客户端API实现锁定,因为同时可以有2-3个VM出现。 如何实现?

更新: 我可以使用findandModify。但我的代码看起来像这样

{
  if(collection.getCount({"taskName" :"Task1"}) == 0){
    //insert record  ------ **I can use findAndModify here**
 }
}

但是如果两个VM同时出现,那么两个VM都会在阻塞时进入,因为文档不可用。
我知道findAndModify是原子的。因此在1 VM发出findAndModify命令之后,我们将有1条带有主机名的记录。但是下一个VM也会执行相同的操作,并使用其主机名再次更新记录。

如果我不清楚我的问题,请告诉我。

1 个答案:

答案 0 :(得分:0)

mongodb中每个文档的更新都是原子的。因此,您不必在客户端实现锁定机制。正如评论所述,请检查here您的用例。

<强>更新

在查询部分,您可以检查文档是否包含$exists的“主机名”。如果具有Task1的文档具有主机名,则表示已经有一个VM负责该任务。我不知道你的整个用例,但是让我们说,VM1完成了它可以更新文件的任务,删除字段“hostname”。或者您可以将主机名用作''的默认值,并检查主机名是否为'',taskName是否为'Task1'。