我需要在尽可能短的时间内以可靠的方式保存数千条记录。由于我是datastax驱动程序的新手,因此我不知道在Cassandra上执行BULK写入的最佳方法
所有记录都属于单个对硫磷(此处不考虑复制) 记录数可能从250到25000不等
public void save(List<CassandraResource> listOfCassandraResource)
{
Mapper<CassandraResource> mapper = this.mappingManager.mapper(CassandraResource.class, this.keyspace);
mapper.setDefaultSaveOptions(Option.saveNullFields(false));
for (CassandraResource resource: listOfCassandraResource)
{
ListenableFuture<Void> future = mapper.saveAsync(resource);
}
}
答案 0 :(得分:1)
是的,使用异步查询是标准模式。您只需要注意不要使系统超载-驱动程序会限制每个连接/主机的运行中请求数,默认情况下为1024。您需要将每个连接的进行中请求的最大数量增加到某个合理的值(最大32k)。
这可以在配置Cluster
对象时或在运行时完成:
PoolingOptions poolingOptions = new PoolingOptions();
poolingOptions.setMaxRequestsPerConnection(HostDistance.LOCAL, 32768);
Cluster cluster = Cluster.builder().withContactPoints("...")
.withPoolingOptions(poolingOptions).build();
查看更多driver's documentation以获得更多详细信息。
如果您有更多的数据,则可能需要使用某种信号量,以防止提交过多的请求。您可以看到示例here之一。