繁体   English   中英

Cassandra 表数据建模

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM