MongoDB关键部分

时间:2014-03-11 11:09:12

标签: mongodb

我需要在我的mongodb上执行一些操作(读取和写入),而不会让另一个进程中断。它适用于在线游戏,当用户向另一个用户发送资源时,会执行以下步骤:

  1. 检查他的资源价值
  2. 如果不够中止
  3. 插入资源交易
  4. 减少他的资源价值
  5. 增加其他资源值
  6. 我担心在检查它是否足够或插入资源事务时,已经插入了一些其他事务并且值变为无效。如何确保按此顺序执行此部分?

3 个答案:

答案 0 :(得分:3)

我可以看到两种方式:

这些似乎是我看到的两个最合理的方式。

答案 1 :(得分:1)

在谈论mongo时,交易是一个几乎被禁止的词。但是,您可以使用带有$inc的原子uptade,使用资源值作为条件来执行步骤1,2和4,然后执行步骤3和5.如果后续步骤失败,您将无法支持回滚步骤。 / p>

答案 2 :(得分:1)

我是Tokutek的工程师

TokuMX是一个MongoDB替换服务器,它使用相同的协议和驱动程序,并支持非分片设置上的本机多语句事务。您可以使用可序列化的事务来完成所需的操作,该事务将对您触摸的文档进行文档级锁定。这可以像

那样完成
> db.beginTransaction("serializable");
> if (resourcesInsufficient()) { db.rollbackTransaction(); }
> // insert and update
> db.commitTransaction()

同样,分片不支持此功能,但可能对您的应用程序有用。讨论了更多细节,功能和限制here