有一段时间我处理这个问题,但我找不到好的解决方案。想象一下,有一个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修改文档 奇怪的身份)
还有其他想法吗?
答案 0 :(得分:1)
如果您确定这些是您的应用的要求,那么您可以考虑使用Cassandra的轻量级事务,它允许您使用条件控制INSERT
和UPDATE
的行为。
此链接应该为您提供快速介绍:Lightweight transactions。
答案 1 :(得分:0)
你的问题是经典的竞争条件。为解决此问题,Cassandra为每个变异操作提供时间戳。 Cassandra使用时间戳来解析哪个是最近的数据修改。
您可以在CQL查询中指定变异操作的时间戳。