Tag: 事务

Pg-promise:交易问题

我用pg-promise与发生器交易得到了一些奇怪的东西。 这就是我要的 : 获取或注册一个用户(getOrRegisterUser) 做批次的东西(4插入发生器) 最后,使用getOrRegisterCurrentParkingIfProvided生成器的最后一个插入(发生器registerCall) 这是我的代码: db.tx(function (t) { return t.task.call(params, getOrRegisterUser).then(function (user) { params.masterId = user.id; // NOTICE : MY USER ID DATABASE return t.batch([ t.task.call(params, registerNewPhones), t.task.call(params, registerNewPlate), t.task.call(params, registerNewSubscriptions), t.task.call(params, getOrRegisterCurrentParkingIfProvided) ]).then(function (result) { params.ParkingId = (result[3] !== undefined) ? result[3].id : null; return t.task.call(params, registerCall); }) }); }).then(function () { […]

我如何在SailsJs中使用PostgreSQL事务?

我的问题是,我有一个复杂的查询链,如果这个交易的人失败,它会回滚。 我已经阅读了Sails中的事务,并且默认情况下,Sails不支持事务,因为每个事务与Postgresbuild立新的连接,所以一个查询有一个新的连接。 那么,我如何使用Sails交易?

有没有办法在pg-promise中触发一个不会影响外部事务的内部事务?

在pg-promise我有一种情况需要触发一个内部事务,如果需要的话可以回滚,这不会导致调用事务在错误时被回滚: var db = pgp()(connection); db.task( function (tk){ tk.method(/* Logic used to decide if I need to continue */) .then( function(data){ if (!data) return; tk.tx( function*(tx){ // Somewhere in here I need to fire another transaction that I don't care if it fails // but I need things to roll back inside of it should […]

设置firebase事务的优先级(节点JavaScript)

有没有办法在firebase中的事务中设置优先级? 我创build了一个使用节点进行投票的系统,我使用这样的函数来防止用户同时投票时发生冲突: update.resource.total.transaction(function(c) { return c + 1; }); update是一组Firebase参考url total对象vote孩子的属性,只是一个计数器。 如果我也可以在这里设置优先级,以便按照stream行度返回对象,那将是非常好的。 我怎样才能做到这一点?

node.js:创build一个覆盖对多个存储库的调用的事务

我习惯于使用C#编写代码,有时我创build的事务对不同的存储库有多个调用,如果调用失败,则回滚覆盖每个存储库。 代码是这样的: using (var scope = new TransactionScope()) { itemRepository.deleteItems(items); bookRepository.deleteBooks(books); scope.Complete(); } 这确保了如果在bookRepository上发生错误,删除的项目将在回滚中。 现在,我正在尝试使用node.js来做同样的事情。 我find了可以创build事务的mssql软件包,但是只在仓库里面,像这样: var transaction = new sql.Transaction(/* [connection] */); transaction.begin(function(err) { // … error checks var request = new sql.Request(transaction); request.query('insert into mytable (mycolumn) values (12345)', function(err, recordset) { // … error checks transaction.commit(function(err, recordset) { // … error checks console.log("Transaction […]

是否有可能使用node.js和noSQL数据库做事务处理?

我不是在谈论真钱交易 我正在开发的这个项目是一个玩家互相交换东西的游戏。 这基本上是一个交易过程,玩家A给了玩家B 10粒去交换30头牛,你明白了。 但是因为它是互动的,并且有很多玩家同时在聊天室般的环境中进行交易,所以我想知道是否有可能用node.js做这样的事情,但是我看到了问题。 我来自数据库背景,处理事务以及rollback和commit的性质对于维护数据库的健康状态是必要的。 但是,如果我们谈论的是node.js和mongoDB (或者其他任何的noSQL DB),那肯定是一个完全不同的思路,但我不明白它是如何处理交易的,因为只有两方应该参与而不诉诸某种forms的locking,但肯定不是什么node 。 我还没有find任何东西,但是这并不令我感到意外,因为node.js是如此新颖。 更新我知道一个交易的机制 – 特别是银行风格的交易,但这不是一回事。 我可能没有说清楚,但问题是,玩家B正在向买家群体出售东西。 这意味着虽然玩家A在客户端发起购买指令,但是也可能在同一时间玩家CD或E也点击购买相同的牛。 现在在正常的交易中,预计至less第一个获得logging级别表的人至less阻止其他方在那个时间点进行操作。 然而,使用节点的性质,特别是其速度,并发处理和显示实时更新数据库的使用意味着我可以很容易想象,最慢的人(我们正在说毫秒)获胜。 例如,玩家A在玩家C的同时启动购买。玩家交易完成,并且向玩家B付钱,并且在数据库上将玩家A分配给玩家A. 一毫秒后牛被分配给玩家C. 我希望能更好地解释这个问题。

如何与sails.js / waterline进行交易?

我试图把我的查询进入事务,我在运行时失败。 我得到的错误是: Object #<bound> has no method 'transaction' 我试图按照这个 “文档”。 总之,我的模型看起来像这样: updateOrCreate: function (profile_id, positive,negative) { var deferred = Q.defer(); Reputation.transaction().findOne().where({profile: profile_id}).then(function (rep) { if (rep) { // Reputation logic rep.save(function (err) {deferred.resolve();}); } else { // Reputation does not exist. Create. Reputation.create({profile: profile_id, positive: positive,negative:negative}).exec(function (e, rep) { deferred.resolve();}); } }).fail(function (err) {deferred.reject()}); return […]

node-postgres与callback或asynchronous/等待交易?

我正在运行节点7.6.0,它支持asynchronous/等待。 节点postgres客户端池支持asynchronous/等待,并有一个很好的例子。 但是,node-postgres( 这里 )中的事务示例使用callback而不是async / await。 尽pipe这个例子,我想我会尝试在asynchronous/等待快速testing交易: let client = null; try { client = await this.pool.connect(); } catch (error) { console.log('A client pool error occurred:', error); return error; } try { await client.query('BEGIN'); await client.query('UPDATE foo SET bar = 1'); await client.query('UPDATE bar SET foo = 2'); await client.query('COMMIT'); } catch (error) { […]

node.js + postgres数据库事务pipe理

我们有一个现有的SQL数据库,并且正在使用这个postgres驱动程序模块编写一个使用直接SQL访问它的node.js服务器: https://github.com/brianc/node-postgres 到目前为止,我找不到与postgres一起使用的事务pipe理节点模块。 有人知道吗? 最好有一些现实世界的使用? 其次,在更高层次上,我们正在评估node.js是否可以实际上将Javareplace为可能处理卷的服务器的真实解决scheme。 交易pipe理是我们必须解决的问题之一。 所以一些洞察也是有用的。 目前,我只是在节点服务器请求的开始处发出一个sql BEGIN,最后是一个ROLLBACK或COMMIT。 但是,我(或许显然)不熟悉与SQL事务pipe理有关的现实世界问题。 如果有人能简单地解释事务pipe理框架解决的问题,我会觉得它很有用。 编辑:我正在使用postgres驱动程序的内置连接池机制,并在http请求内的所有查询发出在从池中获得的同一连接。 首先发布BEGIN,然后无论具体的http请求是什么,然后是COMMIT或ROLLBACK。 谢谢。

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

我目前正在编写一个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议。 谢谢!