Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
避免墓碑的Cassandra数据建模_Cassandra_Cassandra 3.0 - Fatal编程技术网

避免墓碑的Cassandra数据建模

避免墓碑的Cassandra数据建模,cassandra,cassandra-3.0,Cassandra,Cassandra 3.0,我从使用spark kafka cassandra(在kubernetes上)重写庞大的spark kafka hbase应用程序开始 我有以下数据模型一个支持所有时间插入,另一个支持UPSERT 方法1: 创建表测试库存位置( 位置\u id int, 项目bigint, 时间\u id时间戳, 销售\楼层\数量整数, 密室数量,内部, 在后台布尔值, 运输数量整数, 主要的,重要的 键((位置、项目、时间、id)) 按(项目)顺序进行聚类 asc,时间描述) 这个表一直在插入,因为timei

我从使用spark kafka cassandra(在kubernetes上)重写庞大的spark kafka hbase应用程序开始

我有以下数据模型一个支持所有时间插入,另一个支持UPSERT

方法1:

创建表测试库存位置(
位置\u id int,
项目bigint,
时间\u id时间戳,
销售\楼层\数量整数,
密室数量,内部,
在后台布尔值,
运输数量整数,
主要的,重要的 键((位置、项目、时间、id)) 按(项目)顺序进行聚类 asc,时间描述)

这个表一直在插入,因为timeid是集群列的一部分。我想通过fetch 1读取最新的(timeid是desc),然后通过在key cols上设置TTL或隔夜删除它们来删除旧记录

问题:TTL或删除旧记录会创建墓碑

方法2:

创建表测试库存位置(
位置\u id int,
项目bigint, 时间\u id时间戳,
销售\楼层\数量整数,
密室数量,内部,
在后台布尔值,
运输数量整数,
主键((位置\u id), 根据(项目asc)进行聚类排序

此表如果同一位置和项目出现新记录,则会将其加高。它易于阅读,无需担心清除旧记录


关注点:我在Cassandra上有另一个应用程序,在不同的时间更新不同的col,我们仍然有读取问题。这就是说,上升也会造成墓碑,但与方法1相比,情况有多糟?还是其他更好的方法来正确建模?

第一种方法似乎不错。TTL和delete,都创建墓碑。对于基于TTL的删除,您可以参考压缩策略。TWCS更适合基于TTL的删除,否则您可以使用STCS进行简单的删除。另外,相应地配置gc_grace_秒以顺利清除墓碑,因为沉重的墓碑会导致读取延迟

同意。这就是我的计划。只是想听听别人的意见。谢谢