美文网首页
Spring Data Cassandra批量写数据记录

Spring Data Cassandra批量写数据记录

作者: Anson_1f2a | 来源:发表于2021-06-07 16:15 被阅读0次

    项目业务需要导入大批量数据到Cassandra,项目使用到Spring data cassandra,里面的有好几种可以实现保存数据的方法,因此做了一下对比实验。使用了如下几个类,分别保存400条数据:

    1. ReactiveCassandraRepository的saveAll:50ms
    2. CassandraRepository的saveAll:7000ms
    3. ReactiveSession:50ms
    4. Session:160ms
    5. ReactiveCassandraTemplate的batchOps:50ms
    6. CassandraTemplate的batchOps:160ms

    网上的性能对比中,Cassandra每秒处理的量大概是1000条是可信的。

    结论

    1. 可以看出Reactive的方法速度非常快,因为不会阻塞线程。
    2. 由于使用Session方法比较繁琐,需要自己拼接CQL,所以不优先考虑。
    3. CassandraRepository速度那么慢是因为其saveAll方法是循环调用save方法,因此每个结果都需要等待节点响应,因此不考虑使用该方法进行批量保存。
    4. 由于我们对Reactive的原理并不够深入,很多因素不可控,会遇到问题很难解决,因此也不考虑。
    5. 使用CassandraTemplate虽然在批量处理中会有数量限制,实验中的400条数据,我们是分4次,每次100条进行保存。该方法基本保持比较稳定,因此采用。

    注意

    决定使用CassandraTemplate后,并加入到项目中,测试过程中使用100万条数据分10个文件,每批100条数据导入系统,还是出现以下异常。

    image.png
    可以看得出,批量处理的数据还是有点多了。为增加Cassandra批量处理能力,可以修改配置文件cassandra.yaml,默认是50,调大后就没有报错了。
    # Fail any multiple-partition batch exceeding this value. 50kb (10x warn threshold) by default.
    batch_size_fail_threshold_in_kb: 150
    

    相关文章

      网友评论

          本文标题:Spring Data Cassandra批量写数据记录

          本文链接:https://www.haomeiwen.com/subject/ajpqeltx.html