Articles of 事务

具有单个数据库的多个节点实例

我目前正在编写一个Node应用程序,我正在考虑缩放。 据我所知,水平缩放是扩展应用程序以处理更多并发请求的更简单的方法之一。 我的工作副本目前在后端使用MongoDb。 我的问题是这样的:我有一个类似于链接列表的数据结构,需要严格维护订单。 我的(假想的)关注点是,当通过多个节点实例对数据库存在竞争条件时,链表的分辨率可能不正确。 举个例子:假设服务器有这个列表a-> b。 实例1进入对象c,实例2进入对象d。 可能存在竞争条件,其中两个实例读取a-> b并决定将其自己​​的对象追加到列表中。 实例1然后将其插入为a-> b-> c,而当数据库实际上包含a-> b-> c-> d时,实例2认为它是a-> b-> d。 一般来说,这听起来像是乐观locking的工作,然而,据我所知,MongoDB或Redis(我正在考虑的另一个数据库)都不是以SQL方式进行事务。 因此,我想像下面的解决scheme之一: 使用标志在MongoDB中实现我自己的事务。 客户端对lockvariables执行findAndModify,如果成功,则执行操作。 如果不成功,客户端在一定的超时后重试。 使用Redis事务和pubsub实现相同的效果。 我不确定如何做到这一点,但听起来似乎是可能的。 实施某种智能负载均衡。 如果多个客户端在同一个项目上运行,请将它们路由到同一个实例。 由于JS是单线程的,所以问题就解决了。 不幸的是,我没有find一个简单的解决scheme。 我肯定有一个更好,更优雅的方式来实现上述,我很乐意听到任何解决scheme或build议。 谢谢!

交易restAPI

我正在一个项目,我需要实现事务回滚PostgreSQL数据库durin REST操作使用Nodejs。 我已经分别为GET,PUT和POST方法实现了事务。 我需要使用交易一次还是我正确的轨道? 在此先感谢您的帮助。 我想确保我的数据库回滚数据,如果需要的话。 我正在使用pg-promise库来获得结果。 db.tx(t => { return t.batch([ t.query('UPDATE users SET active = $1 WHERE id = $2', [true, 123]), t.query('INSERT INTO audit(event, id) VALUES($1, $2)', ['activate', 123]) ]); }) .then(data => { // success; }) .catch(error => { // error; }); 或者,我应该在下面实施方法吗? module.exports = { // if you can run […]

与承诺Knex交易

我得到了正确的结果,实际上,这两个行动正在被视为一个单一的交易单位; 如果一个失败了,两个失败。 在这个代码示例中:我正在做一个事务 (1)插入(2)更新 我接近它的方式是将我的数据库操作嵌套在.then中。 我的问题是,如果这个代码是正确的意外? 我是新承诺和knex。 knex.transaction(function(t) { knex('foo') .transacting(t) .insert({id:"asdfk", username:"barry", email:"barry@bar.com"}) .then(function() { knex('foo') .where('username','=','bob') .update({email:"bob@foo.com"}) .then(t.commit, t.rollback) }) }) .then(function() { // it worked }, function() { // it failed }); 这工作,但我觉得我仍然做错了什么。 寻找意见。

如何实现mongo事务的回滚?

我在mongodb上使用mongoose。 在来自nodejs express服务器的请求和响应中,通常需要通过mongoose进行mongodb的查询。 在许多情况下,如果首先几个查询成功执行并且在事务下全部失败,则可能发生这种情况。 现在我需要将db状态回滚到db的初始状态。 那么我怎样才能有效地在mongodb回滚? 请提供一些合适的参考。

Node.js + MySQL – 处理事务

我正在使用express和node-mysql驱动程序在node.js上构build应用程序。 当我需要进行一系列数据库插入/更新时,我的应用程序中有几个案例。 我希望他们在一个事务中,如果第二个或第三个失败,以前的插入完全回滚。 目前,我这样做的方式是有一种中间件,在请求到达时执行START TRANSACTION 。 在处理请求的过程中,如果发生任何错误,我会捕获此错误,并执行ROLLBACK 。 如果没有错误发生,我发送响应给浏览器之前做一个COMMIT 。 不过,现在我担心,当多个用户同时访问应用程序时,这不起作用,因为如果另一个请求尝试使用START TRANSACTION开始自己的事务,MySQL会强制执行提交! 我目前只使用一个节点的实例,并为所有请求使用一个MySQL连接。 如果我的担忧是有效的,有人能请教我吗?如何获得交易支持?

与Sails.js交易SQL

所以我现在一直在玩NodeJS / Express,我真的想用一个完整的JavaScript栈来重写一个相对较大的项目,看它是如何工作的。 Sails.js似乎是一个REST API的NodeJS后端的一个非常好的select,支持Web套接字,这正是我正在寻找的,但是我正在寻找解决的另一个问题,那就是NodeJS中的事务性SQL。 我在NodeJS方面看到的大多数数据层/ orms在处理MySQL时似乎并不支持事务。 Sails.js(Waterline)提供的ORM似乎也不支持交易,这很奇怪,因为我已经看到了提到它的地方,尽pipe这些评论是相当古老的。 Knex.js支持事务,所以我想知道是否很容易用这个(或者如果Sails.js假设Waterline在核心框架中)replaceORM是Sails.js。 我还想知道,除了书架之外,是否还有一个build立在Knex.js之上的ORM,因为我不是Backbone模型/收集系统的粉丝?