Cassandra与Scylla批处理语句默认限制差异及Err-2200问题咨询
Cassandra与Scylla批处理默认限制对比
我使用Python的cassandra-driver通过BatchStatement对Cassandra和Scylla执行数据插入/更新操作。当批量处理约500行数据时,只有Cassandra抛出如下错误(Scylla运行正常):
Error from server: code=2200 [Invalid query] message="Batch too large"
相关Python代码
from cassandra import ConsistencyLevel from cassandra.cluster import Cluster from cassandra.cluster import ExecutionProfile from cassandra.cluster import EXEC_PROFILE_DEFAULT from cassandra.query import BatchStatement ... cluster = Cluster(contact_points=["localhost"], port=9042, execution_profiles={EXEC_PROFILE_DEFAULT: profile}, control_connection_timeout=60, idle_heartbeat_interval=60, connect_timeout=60) session = cluster.connect(keyspace="catalog") ... insert_statement = session.prepare(f"INSERT INTO rn6.t01 ({columns}) VALUES ({items})") batch = BatchStatement(consistency_level=ConsistencyLevel.ONE) data_frm = pandas.DataFrame(generator.integers(999999, size=(run_setup.bulk_row, run_setup.bulk_col)), columns=[f"fn{i}" for i in range(run_setup.bulk_col)]) # prepare data for row in data_frm.values: batch.add(insert_statement, row) session.execute(batch)
两者默认批处理限制
- Cassandra:默认有两个核心限制:批处理数据大小上限为64KB,单批包含的语句数量上限为100条。你的500行数据同时超出了语句数量限制和可能的大小限制,因此触发了报错。
- Scylla:默认批处理数据大小上限为1MB,单批语句数量上限为1000条。这两个阈值都远高于Cassandra的默认值,所以500行数据可以正常执行。
注:这些限制均可通过修改数据库配置参数调整,比如Cassandra的batch_size_fail_threshold_in_kb、batch_size_warn_threshold_in_kb,Scylla的同名参数batch_size_fail_threshold_in_kb等。
内容的提问来源于stack exchange,提问作者JIST
相关产品推荐
相关产品推荐

