多个nodejs进程对并发文档更改的解决方案?

时间:2016-08-18 17:32:17

标签: node.js cassandra multiprocessing crud

有一段时间我处理这个问题,但我找不到好的解决方案。想象一下,有一个CRUD节点应用程序与cassandra集群进行通信:)

例如,应用程序具有以下路线:

curl -X POST 127.0.0.1:8080/characters -d '{"id":1, "name": "boba fett"}' 
curl -X PUT 127.0.0.1:8080/characters/1 -d '{"name": "Boba Fett"}' #<-- the problem 
curl -X GET 127.0.0.1:8080/characters/1 
curl -X DELETE 127.0.0.1:8080/characters/1

现在您应该能够使用相同的逻辑运行多个nodejs进程,但是为了防止两个进程在数据库中更改同一文档的可能性。

我的想法是:

  • 只有其中一个进程可以修改文档

  • 每个进程获取一系列ID(例如,进程a使用偶数id修改文档,并且进程b修改文档 奇怪的身份)

还有其他想法吗?

2 个答案:

答案 0 :(得分:1)

如果您确定这些是您的应用的要求,那么您可以考虑使用Cassandra的轻量级事务,它允许您使用条件控制INSERTUPDATE的行为。

此链接应该为您提供快速介绍:Lightweight transactions

答案 1 :(得分:0)

你的问题是经典的竞争条件。为解决此问题,Cassandra为每个变异操作提供时间戳。 Cassandra使用时间戳来解析哪个是最近的数据修改。

您可以在CQL查询中指定变异操作的时间戳。

A nice article about CQL timestamps and race condition