首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Nodejs + Tokumx ( Mongodb ) + Nodejs的Mongodb驱动程序进行ACID事务

如何使用Nodejs + Tokumx ( Mongodb ) + Nodejs的Mongodb驱动程序进行ACID事务
EN

Stack Overflow用户
提问于 2014-05-23 13:21:51
回答 1查看 1.5K关注 0票数 4

您知道nodejs执行ACID事务的TokuMX驱动程序吗?

我想使用Databaseengine TOKUMX,wich是一种MongoDB的分叉,使用与mongo一样的API,但也有一些内置的改进,即它使用真正的ACID事务。MongoDB的原生形式不允许酸。但TOKUMX有。

所以,我确实用Nodejs编写了我的应用程序。为了获得与TokuMX数据库通信所需的驱动程序,我使用了TokuMX好消息是,我可以使用该驱动程序将所有命令发送到数据库。例如:

在nodeJS代码中:

代码语言:javascript
复制
mycollectionblabla.runCommand('beginTransaction', function(err, res) { ....
mycollectionblabla.insert .... 
mycollectionsblabla.runCommand('commitTransaction', function(err4, res4){...

问题是,当我以10次的速度快速调用程序代码时,它不会执行ACID事务。它就开始了

代码语言:javascript
复制
runCommand('beginTransaction'... 

在paralell里,当然还有

代码语言:javascript
复制
runCommand('commitTransaction', ...

失败了!因为它说:事务已经存在,而且它还说不存在任何事务来实现.!!!

你看到困扰我的问题了吗?我怎样才能解决这个问题来进行ACID交易?

您知道nodejs执行ACID事务的TokuMX驱动程序吗?

EN

回答 1

Stack Overflow用户

发布于 2014-05-23 17:29:27

node.js的工作方式和TokuMX多语句事务的工作方式存在一个根本问题。

在TokuMX中,多语句事务(使用beginTransaction)与运行命令的客户端连接相关联。在此之后,在同一连接上执行的任何操作(直到下一个rollbackTransactioncommitTransaction命令)都算作事务的一部分。

如果启动事务,而其他线程使用连接,则其操作将成为事务的一部分。另外,如果启动一个线程,然后切换到另一个连接,那么在切换之后的这些操作将无法正确地与事务相关联。

我们之所以选择这种模式,是因为它对大多数司机来说是有意义的。对于大多数使用连接池的显式线程模型的语言中的驱动程序,有一种驱动机制来为给定的执行线程(如PyMongo中的请求RequestStart中的MongoDB C#驱动程序 )保留连接。在这些驱动程序中,任何想要使用TokuMX事务的线程都必须在这样一个保留连接的上下文中这样做。

在node.js中,使用当前驱动程序(当前的AFAIK),逻辑代码组无法将自己单独与单个事务关联。这在一定程度上是因为node.js执行模型本身没有一个好的概念,即将一组逻辑代码(通过多个回调)捆绑在一起,作为一个连接可以关联的“线程”。简单地说,没有办法告诉节点“执行beginTransaction命令,确保没有其他人使用此连接,并且当您调用我的回调时,请确保我获得了对连接的引用,以便我可以将它用于更多的事情”。

现在,如果不包括多语句事务,仍然可以使用TokuMX驱动程序从node.js获得一组事务性语义。所有查询仍然使用MVCC快照,所有批处理插入、多文档更新和删除都是串行隔离的,甚至跨多个文档都是原子的。请记住,这些在切分设置中是轻松的;此时,事务性语义不会跨越碎片边界。

据报道,有一个项目BlueRival/节点-tokumx-本机是由正在处理这个问题的人完成的。根据他们的github问题之一的说法,他们应该很快就会开始处理这个问题,但是我并没有和他们直接联系,所以我不能跟他们谈日程安排或计划。

现在,我建议您尝试使用另一个驱动程序,或者尝试以这样一种方式编写应用程序,即TokuMX的单语句事务性语义就足够了。

免责声明:我是TokuMX工程师。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23830385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档