有一段时间我处理这个问题,但我找不到好的解决办法。假设有一个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进程,但可以防止两个进程对数据库中的同一文档进行更改的可能性。
我的想法是:
还有其他想法吗?
发布于 2016-08-19 08:01:02
如果您确定这些是您的应用程序的要求,那么您可以使用Cassandra的轻量级事务来控制INSERT和UPDATE的行为。
这个链接应该给你一个简单的介绍:轻量级事务。
发布于 2016-08-19 10:50:30
你的问题是一个经典的种族条件。为了解决这个问题,Cassandra为每个突变操作提供了一个时间戳。Cassandra使用时间戳来解析,这是最近的数据修改。
您可以为CQL查询中的突变操作指定时间戳。
一篇关于CQL时间戳和竞赛条件的好文章
https://stackoverflow.com/questions/39024260
复制相似问题