【问题标题】:How to use insert asynchronously into Cassandra with Spring Data?如何使用 Spring Data 将异步插入 Cassandra?
【发布时间】:2018-11-12 19:51:37
【问题描述】:

在旧版本的 Spring Data Cassandra 中,批处理实现如下:

String cqlIngest = "insert into person (id, name, age) values (?, ?, ?)";

List<Object> person1 = new ArrayList<Object>();
person1.add("10000");
person1.add("David");
person1.add(40);

List<Object> person2 = new ArrayList<Object>();
person2.add("10001");
person2.add("Roger");
person2.add(65);

List<List<?>> people = new ArrayList<List<?>>();
people.add(person1);
people.add(person2);

cassandraOperations.ingest(cqlIngest, people);

并且在最新版本的文档中; https://docs.spring.io/spring-data/cassandra/docs/current/reference/html/#repositories.query-methods 在获取 CassandraBatchOperations 的 CQLTemplate 上引入了 batchOps。但是这个类似乎是实体意识如下

template.batchOps().insert(new User()).execute();

有没有办法传递 cqlIngest 和人们喜欢的旧版本代码示例?

我正在使用 Spring 2.0.7.RELEASE 和 Cassandra 驱动程序 3.5.0。

【问题讨论】:

  • 在您的示例中,您正在对不同的分区键进行批处理(据我了解代码)。这是不好的做法 - 2 个异步调用应该更快地执行
  • 是的,亚历克斯,没错。以上只是我挑选的一个例子。

标签: java spring spring-data-cassandra


【解决方案1】:

使用 Spring Data for Apache Cassandra 2.0,对 API 进行了重构和清理。

以前,模板 API 是低级和高级功能的混合体,同步和异步执行模型被混合到一个类中。

从 2.0 版开始,现在有以下 API 可用:

以前的 ingest 方法接受 CQL 字符串和 ListList 参数。我们将这种情况简化为 ingest 在没有适当同步的情况下异步执行 CQL。可以通过AsyncCqlTemplate.execute(…)实现类似的功能:

ListenableFuture<Boolean> insert1 = template.execute("insert into person (id, name, age) values (?, ?, ?)", 
                                                     "10000", "David", 40);
ListenableFuture<Boolean> insert2 = template.execute("insert into person (id, name, age) values (?, ?, ?)", 
                                                     "10001", "Roger", 65);

有两个区别:

  1. 您负责对参数进行迭代
  2. 您会收到一个ListenableFuture,它允许您同步成功和异常执行。

【讨论】:

  • 感谢您的回复。我会试试这个。
  • 我觉得上述方法可以简化,因为我们需要迭代 Futures。在这种情况下,我使用相同的插入查询,但每个插入查询的插入值都会发生变化。如何做到最好。
  • 我也让它并行运行,最终看到异常。在答案部分粘贴代码
  • 你能告诉我我在上面部分的实现方式有什么问题吗?
猜你喜欢
  • 2017-08-21
  • 2014-04-18
  • 2021-08-19
  • 2017-06-26
  • 1970-01-01
  • 1970-01-01
  • 2019-12-23
  • 2020-03-08
  • 1970-01-01
相关资源
最近更新 更多