Cassandra表中的分布式行级锁定或实现更高的一致性
我们正在微服务项目中使用Cassandra DB。在生产环境中,此服务部署在PCF中,可扩展到6个实例。我们有一个表(TableA),其中一列(materialSet)为冻结集。在其中一个功能中,并行线程正在执行以下功能(方法已同步)–Cassandra表中的分布式行级锁定或实现更高的一致性,cassandra,datastax,Cassandra,Datastax,我们正在微服务项目中使用Cassandra DB。在生产环境中,此服务部署在PCF中,可扩展到6个实例。我们有一个表(TableA),其中一列(materialSet)为冻结集。在其中一个功能中,并行线程正在执行以下功能(方法已同步)– 阅读表A以获取材料集 向materialSet添加/删除来自请求的材料 将最终材料集写入表A 在较低的服务环境中使用单实例,工作良好。但在生产中,当服务扩展到多个实例时,表中的结果变得不一致。原因是synchronized将在同一JVM中工作,但当服务被扩展时,
有没有办法在Cassandra表中使用分布式行级锁定,或者有没有办法实现更高的一致性?请查看Patrick Callaghan的示例,该示例使用LWT在库存管理场景中强制实现跨线程+跨进程序列化: 具体而言,您可能对使用IF关键字的查询感兴趣:
UPDATE " + tableNameProduct + " SET orderIds=orderIds + {'" + order.getOrderId() + "'},"
+ " capacityleft = " + (lastCapacity-1) + " WHERE productId = '" + order.getProductId() + "' IF capacityleft = " + lastCapacity;