[英]Cassandra table data modeling
我刚开始了解 Cassandra,我有一个非常具体的问题。 在看了一些视频和教程后,我理解有 1 个主键,其中包括分区键和集群键。
所以我的问题是:如果我有一些看起来像这样的数据:
Unit: (unit_id, unit_name, unit_description)
我想节省看起来像这样的单位工作时间:
Working hours: (unit_id, day, start_time, end_time)
您建议数据建模应该是什么样子? 除此之外,如果我必须让所有在周日工作的单元或所有在 10:00 开始的单元,你会建议做什么?
你实际上是从你想要如何存储数据开始的。 对于那些来自传统关系背景的人来说,这是一个常见的错误。
在 Cassandra 数据建模中,我们总是从应用程序查询开始。 对于每个应用查询,我们会为其设计一个 CQL 表。
如果您的应用查询是“get units where day is X”,我们将设计一个如下所示的表:
CREATE TABLE units_by_day (
day text,
unit_id text,
...
PRIMARY KEY (day, unit_id)
)
对于每一天,有一行或多行单元(由unit_id
聚集)。 要检索周日工作的单位:
SELECT unit_id FROM units_by_day WHERE day = 'Sunday'
如果您的应用查询是“获取在第 X 天工作并在 Y 开始的单位”:
CREATE TABLE units_by_day_starttime (
day text,
start_time time,
unit_id text,
...
PRIMARY KEY (day, start_time, unit_id)
)
CQL 查询看起来像:
SELECT unit_id FROM units_by_day_starttime
WHERE day = ?
AND start_time = ?
请注意,您还可以对start_time
进行范围查询,例如:
SELECT unit_id FROM units_by_day_starttime
WHERE day = ?
AND start_time >= ?
AND start_time < ?
干杯!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.