Cassandra 数据模型 - 列族



我在这里检查了一些问题,如理解Cassandra数据模型和列族概念和数据模型,以及一些关于Cassandra的文章,但我仍然不清楚它的数据模型是什么。

Cassandra 遵循列族数据模型,类似于键值数据模型。在列系列中,您在行和列中有数据,那么二维结构,最重要的是您在列系列中分组?我想这是按列系列组织的,以便能够跨多个节点对数据库进行分区?

行和列如何分组到列系列中?为什么我们有列系列?

例如,假设我们有消息数据库,作为行:

id: 123, message: {author: 'A', recipient: 'X', text: 'asd'}
id: 124, message: {author: 'B', recipient: 'X', text: 'asdf'}
id: 125, message: {author: 'C', recipient: 'Y', text: 'a'}

我们如何以及为什么要围绕列系列数据模型组织它?

注意:如有必要,请更正或扩展示例。

有点错误的问题。与其围绕数据建模,不如围绕查询数据的方式进行建模。你想读什么?您可以围绕此创建数据模型,因为存储对如何访问数据非常严格。很可能 id 不是键,如果您希望作者或收件人在读取时使用它作为分区键,并使用唯一 id(使用 uuid 而不是自动 inc(作为聚类索引。即:

CREATE TABLE message_by_recipient (
  author text,
  recipient text,
  id timeuuid,
  data text,
  PRIMARY KEY (recipient, id)
) WITH CLUSTERING ORDER BY (id DESC)

然后查看"鲍勃"的五封最新电子邮件

select * from message_by_recipient where recipient = 'bob' limit 5

将 TimeUUID 用于 ID 将保证唯一性,没有自动递增瓶颈,并提供按时间排序。您可以对新邮件重复写入,写入多个表,以便每次读取都是一次查找。如果data变大,可能需要将其替换为 uuid(类型 4(,并将其存储在由它键入的 blob 存储或分布式文件系统(即 s3(中。这将减少对 C* 的影响,并降低非规范化的成本。

相关内容

  • 没有找到相关文章

最新更新