我首先想到用spark kafka cassandra(在kubernetes上)重写庞大的spark kafka hbase应用程序。
我有以下数据模型一个支持所有时间插入,另一个支持upserts
方法1:
创建表test.inv\u位置(
位置\u id int,
项目bigint,
时间\u id时间戳,
销售楼层数量,
休息室数量,
在后台,
中转数量int,
主键((location\u id),item,time\u id)),聚类顺序为(item asc,time\u id desc);
这个表一直插入,因为timeid是集群列的一部分。我想通过fetch 1读取最新的(timeid是desc),并通过在key cols上设置ttl或隔夜删除它们来删除旧记录。
关注点:ttl或删除旧记录会创建墓碑。
方法2:
创建表test.inv\u位置(
位置\u id int,
项目bigint,时间\u id timestamp,
销售楼层数量,
休息室数量,
在后台,
中转数量int,
主键((location\u id),item)),按(item asc)进行聚类;
如果一条新记录出现在同一个位置和项目上,该表会将其加高。它易于阅读,无需担心清除旧记录
问题:我有另一个Cassandra的应用程序,在不同的时间更新不同的列,我们仍然有阅读问题。也就是说,upserts也会创建墓碑,但与方法1相比,情况会更糟吗?或者其他更好的建模方法?
1条答案
按热度按时间bzzcjhmw1#
第一种方法似乎不错。ttl和delete都创建了墓碑。对于基于ttl的删除,可以参考压缩策略。twcs更适用于基于ttl的删除,否则您可以使用stcs进行简单的删除。另外,相应地配置gc\u grace\u seconds以顺利清除逻辑删除,因为重逻辑删除会导致读取延迟。