【问题标题】:Is it a good idea to use datastax mapper to save thousands of records using saveAsync使用 datastax 映射器使用 saveAsync 保存数千条记录是个好主意吗
【发布时间】:2019-06-04 03:37:36
【问题描述】:

我需要在尽可能短的时间内以可靠的方式保存数千条记录。由于我是 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);
    }
}

【问题讨论】:

    标签: java cassandra datastax datastax-java-driver mapper


    【解决方案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的例子之一。

    【讨论】:

      猜你喜欢
      • 2011-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-12
      • 2015-11-29
      • 1970-01-01
      • 2017-04-09
      • 2013-03-09
      相关资源
      最近更新 更多