我需要在尽可能短的时间内以可靠的方式保存数千条记录。由于我是datastax驱动程序的新手,所以我不知道对cassandra执行批量写入的最佳方法
所有的记录都属于一个对硫磷(这里不考虑复制),记录数可能从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);
}
}
1条答案
按热度按时间jv2fixgn1#
是的,使用异步查询是标准模式。您只需注意不要使系统过载—驱动程序对每个连接/主机的飞行中请求数有限制,默认值为1024。您需要将每个连接的最大飞行中请求数增加到合理的值(最大32k)。
这可以在您配置
Cluster
对象,或在运行时:有关详细信息,请参阅更多驱动程序文档。
如果您有更多的数据,那么您可能需要使用某种信号量等来防止提交过多的请求。你可以在这里看到一个例子。