稀疏填充Frozen UDT的写入性能影响及序列化机制咨询
Cassandra大字段frozen UDT稀疏写入性能问题及机制咨询
我们在Cassandra 3.11.6版本中,使用包含约2000个字段的frozen UDT作为表的一列,通过追加写入的方式实现可审计、不可覆盖的数据存储。但当仅填充UDT中1个字段(共2000个)时,出现了明显的写入性能下降问题。
我们采用C++ Cassandra驱动及Prepared Statements进行写入操作,尝试从Cassandra会话收集指标但未得到有效信息。经排查定位,性能瓶颈出现在每次绑定UDT时:驱动的check方法会对UDT的所有2000个字段名称进行字符串比较;由于绑定操作超过10万次,累计产生了约1亿次字符串比较,直接拖慢了写入速度。
数据模型
CREATE TYPE udt_xyx ( field1 bigint, field2 ... ... field2000 ); CREATE TABLE table_xyz( key_1 text, txn_id int, fields frozen<udt_xyx>, PRIMARY KEY ((key_1), txn_id) );
工作流程
- 接收调用方请求,为指定
key_1写入UDT中n个字段(n≤2000); - 为该请求分配唯一的
txn_id(事务ID); - 创建包含2000个字段的UDT对象,仅填充其中n个字段后持久化到表中;
- 同一
key_1的新请求(无论字段是否重复)都会分配新的txn_id,作为新记录写入表中,不更新现有UDT记录。
咨询内容
- 稀疏填充frozen UDT会带来哪些具体的性能影响?
- Cassandra中UDT内部的序列化/反序列化机制是怎样的?
- 请推荐相关的官方参考文档(无需外链,说明文档章节或名称即可)。
内容的提问来源于stack exchange,提问作者Pratik Kolhe
相关产品推荐
相关产品推荐

