Cassandra中的数据模型及适当的删除策略
我在卡桑德拉有下表:Cassandra中的数据模型及适当的删除策略,cassandra,Cassandra,我在卡桑德拉有下表: CREATE TABLE article ( id text, price int, validFrom timestamp, PRIMARY KEY (id, validFrom) ) WITH CLUSTERING ORDER BY (validFrom DESC); 文章和历史价格信息(validFrom是新价格的时间戳)。商品价格经常变动。我想询问一下你的情况 特定物品的历史价格 一件商品的最后价格 根据我的理解,我可以通过以下查询解决这两个问题:
CREATE TABLE article (
id text,
price int,
validFrom timestamp,
PRIMARY KEY (id, validFrom)
) WITH CLUSTERING ORDER BY (validFrom DESC);
文章和历史价格信息(validFrom是新价格的时间戳)。商品价格经常变动。我想询问一下你的情况
选择id,从id=X有效的物品中选择价格,从
此查询使用项目id作为限制,查询使用分区键。由于聚类顺序是基于validFrom时间戳的反向顺序,cassandra可以高效地执行此查询。
我说得对吗
删除旧数据的最佳方法是什么(内部管理)。让我们假设,我想删除所有validFrom>20150101和<20151231
的文章。因为我没有主键,所以即使我在validFrom上使用索引,这也是低效的,对吗?如何实现这一点?您可以使用外部工具:
- 使用火花点火(即使在本地模式下)。代码可以如下所示(注意,我使用
validfrom
作为名称,而不是validfrom
,因为它在您的模式中没有转义):
导入com.datastax.spark.connector_
val数据=sc.cassandraTable(“测试”、“物品”)
.其中(“有效期自>='2020-07-28T11:50:00Z'和有效期自<'2020-07-28T12:50:00Z')
.选择(“id”、“validfrom”)
data.deleteFromCassandra(“测试”、“文章”,keyColumns=SomeColumns(“id”、“validfrom”))
- 用于查找匹配的条目并将其输出到文件中(
output.csv
,在我的示例中),然后执行删除操作:
bin/dsbulk卸载-url output.csv\
-查询“从test.article中选择id,validfrom,其中token(id)>:start和token(id)='2020-07-28811:50:00Z',validfrom<'2020-07-28812:50:00Z'允许过滤”
bin/dsbulk load-查询“从test.article中删除,其中id=:id和validfrom=:validfrom”\
-url输出.csv
为了补充Alex Ott的回答,您的评论不正确:
此查询使用项目id作为限制,查询使用分区键。由于聚类顺序基于价格,cassandra可以高效地执行此查询
行不是按价格
排序的。它们按有效期从
开始按时间倒序排列。干杯 谢谢,你说得对。该表按validFrom时间戳排序。我在帖子中更改了描述