【发布时间】:2017-08-13 07:39:08
【问题描述】:
我使用Cassandra java driver。
我每秒收到 15 万个请求,我将这些请求插入到具有不同分区键的 8 个表中。
我的问题是哪种方法更好:
- 批量插入这些表
- 一一插入。
我问这个问题是因为,考虑到我的请求大小 (150k),批处理听起来是更好的选择,但是因为所有表都有不同的分区键,批处理看起来很昂贵。
【问题讨论】:
我使用Cassandra java driver。
我每秒收到 15 万个请求,我将这些请求插入到具有不同分区键的 8 个表中。
我的问题是哪种方法更好:
我问这个问题是因为,考虑到我的请求大小 (150k),批处理听起来是更好的选择,但是因为所有表都有不同的分区键,批处理看起来很昂贵。
【问题讨论】:
请从以下链接查看我的答案:
Cassandra batch query performance on tables having different partition keys
批处理不是为了提高性能。它们用于确保原子性和隔离性。
批处理对于单个分区的写操作是有效的。但是批处理经常被错误地用于优化性能。根据批处理操作,性能实际上可能会变差。
https://docs.datastax.com/en/cql/3.3/cql/cql_using/useBatch.html
如果这些表之间不需要数据一致性,则使用单次插入。 单个请求在节点之间正确分布或传播(取决于负载平衡策略)。如果您担心请求处理和使用批处理,批处理将在协调节点上负担很多额外的工作,我猜这不会是有效的:)
【讨论】:
批次反而会对性能产生巨大影响。 据我所知,最适合您的解决方案是将每个分区键拆分为不同的列表,然后使用批处理语句。您将看到对性能的巨大影响。
【讨论】: