我有一组有序的传入事件,需要将它们插入到Cassandra中。我想要利用异步插入的速度,但是我的传入事件可能有目标表的键的重复项。
如果我理解正确的话,那么异步插入在这种情况下不能保证数据的一致性,因为异步执行意味着异步操作的程序顺序,这意味着不能保证异步操作的顺序,但是我无法在java中实现一个示例,其中异步插入的顺序与顺序不匹配。在任何与使用Cassandra驱动程序(datastax-java-driver)进行异步插入相关的文档中,我也找不到有关这方面的信息。
在这种情况下,为了确保数据一致性,在异步插入之前,我是否需要在自己一侧执行重复数据消除?
如果您需要我正在做的事情的示例代码:
@Autowired
private ReactiveCassandraRepository repository;
...
Flux.from(eventsList)
.flatMap(value -> repository.save(value))
.subscribe()发布于 2021-07-12 10:44:13
这并不是一个真正的问题,你绝对可以使用异步写来最大化吞吐量。
需要注意的重要一点是,“顺序”并不是由异步请求何时命中集群决定的。缺省情况下,Java driver (v3.0+)分配一个客户端时间戳,该时间戳将是请求的写入时间。
当您读取数据时,仅根据时间戳返回最新版本,因此不存在重复。干杯!
https://stackoverflow.com/questions/68262489
复制相似问题