Apache Cassandra 上的高级数据建模

Apache Cassandra 上的高级数据建模

经验文章nimo972025-02-09 12:31:2810A+A-


作者:Artem Chebotko和Aleks Volochnev


欢迎来到 Apache Cassandra? 系列的第 2 部分。在第 1 部分中,我们向您介绍了 Cassandra 的功能 - 一个强大的分布式 NoSQL 数据库,受到全球数千家企业的信赖。在这篇文章中,我们将向您展示如何在 Cassandra 上构建高级数据模型,以便您继续构建成功的应用程序。

Apache Cassandra ?是一个分布式 NoSQL 数据库,以其大数据规模和容灾能力而闻名。Cassandra 具有弹性线性可扩展性、高性能以及处理数百万次查询的能力,同时保留 PB 级数据等强大功能,被绝大多数财富 100 强公司使用。

但请记住:这种强大的能力是开发人员和 Cassandra 之间的共同责任。仅仅启动一个集群是不够的。开发适当的数据模型以利用 Cassandra 提供的所有功能至关重要。否则,这些强大的功能将功亏一篑。

在这篇文章中,我们超越了查询、分区和表,为高负载应用程序设计了一个高效的数据模型。我们将讨论以下内容:

  • Cassandra 如何组织数据
  • 数据建模方法
  • 物联网、投资组合和订单管理的三个数据建模用例
  • 通过实践场景在 Cassandra 上实例化数据模型

Cassandra 如何组织数据

图 1. Cassandra 将数据存储在表中。

了解 Cassandra 如何组织数据对于构建正确的数据模型至关重要,这样您就可以交付成功且高效的应用程序。Cassandra 数据结构的主要组成部分包括:

  • Keyspace:表的容器,类似于 PostgreSQL 模式
  • 表:在分区中存储数据的一组列、主键和行
  • 分区:一组行以及相同的分区令牌(Cassandra 中的基本访问单元)
  • 行:表中的单个结构化数据项

让我们更详细地了解每个组件。

键空间

图 2. 一个键空间。

键空间是 Cassandra 上的一个数据容器,其中包含表、物化视图、用户定义的类型、函数和聚合。通常,Cassandra 集群的每个应用程序都有一个键空间。

键空间决定了数据如何在多个节点上复制,整个集群的副本总数称为复制因子。在图 2 中,“3”和“5”分别是“DC-West”和“DC-East”的复制因子。数据复制是 Cassandra 的固有特性,可确保可靠性和容错性。

创建或修改键空间时,需要指定复制策略来确定放置副本的节点。有两种:

  1. 简单策略:此策略仅适用于单个数据中心和一个机架,仅用于开发和测试环境。它不应该在生产中使用。如果您打算拥有多个数据中心,请使用下一种策略。
  2. 网络拓扑策略:此策略适用于生产或登台环境。顾名思义,它具有网络拓扑意识,这意味着它了解您的服务器、服务器机架和数据中心。这种策略是大多数部署的首选,因为它更容易在需要时扩展到多个数据中心。

图 3. 一张桌子。

一旦你创建了一个键空间,你就可以创建一个表。在每个键空间中,都有多个表来存储数据。每个表由行和列组成。

要创建表,您必须定义一个主键,它是分区键和集群列(如果有)的组合。在上面的图 3 中,此示例中的“年份”是分区键。分区的数量与不同的分区键一样多。

分区键指定哪个节点将保存特定的表行,集群列确保数据唯一性并建立排序顺序。请注意,一旦您为表设置了主键,就无法更改它。

主键和分区

Cassandra 中的所有数据都是用分区组织的。如果不了解分区,就几乎没有机会构建有效的数据模型。

有两种分区:

  • 单行:在单行分区中,单列上只有一个分区键,没有集群键。每个分区只能存储一行,因为分区键唯一标识该行是主键。
  • 多行:在多行分区中,既有分区键又有集群键。这意味着您可以在一个分区中有许多不同的行。Cassandra 使用静态列来描述整个分区,而不是单个行。

根据用户的数量,您可以拥有任意数量的分区。一个常见的误解是,大量分区会使您的数据模型效率低下,但即使是数十亿个分区也不会影响 Cassandra 的性能。但是,分区内的行有一些限制。您通常不希望单个分区中有超过十万行。

为表设置分区键后,分区器会将分区键中的值转换为令牌(也称为散列),并为每个节点分配一个称为令牌范围的数据范围。然后,Cassandra 通过令牌值自动在集群中分配每一行数据。

观看此视频,通过示例了解有关 Cassandra 数据结构的更多信息。

Cassandra 查询语言

所有这些都是使用Cassandra 查询语言 (CQL)完成的,它是与数据库通信的主要语言。CQL 有两个部分:

  1. 数据定义:这包括创建键空间、表、索引、自定义二级索引和物化视图的语言。
  2. 数据操作:这包括运行标准操作的语言,例如选择、插入、更新和删除。

图 4. 示例 CQL 查询。

图 4 表示 Cassandra 上的典型示例 CQL 查询。一切正常,因为查询匹配集群键 (C) 和分区键 (K)。

图 5. 无效的 CQL 查询。

但在图 5 中,您可以看到无效的 CQL 查询。前两个不起作用,因为它们只指定了一半的分区键“地点”,而 Cassandra 无法计算令牌。要使查询有效,您需要“地点”和“年份”。

虽然第四个查询中同时有“venue”和“year”,但它也不起作用,因为“title”是一个数据列,而不是主键的一部分。第五个查询有类似的问题。“国家”是一个静态字段,您仍然需要使用分区键和集群键来计算分区。

总而言之,在 Cassandra 上处理数据时需要牢记一些重要的含义:

  • 主键定义数据唯一性
  • 分区键定义数据分布
  • 分区键影响分区大小
  • 聚类键定义行顺序

处理查询时,请考虑以下事项:

  • 主键定义如何从表中检索数据
  • 分区键允许相等谓词
  • 聚类键允许不等式谓词和排序
  • 每个查询只有一个表,没有连接

这些影响确保 Cassandra 可以处理 PB 级的数据并在几毫秒内回答您的查询,同时仍可通过多个数据中心在全球范围内使用。

Cassandra 数据建模方法

Cassandra 上的数据建模是一个定义和分析支持业务流程所需数据的数据需求和访问模式的过程。它不仅仅是模式设计。是关于:

  • 收集和分析数据需求
  • 识别参与实体和关系
  • 识别数据访问模式
  • 以特定方式组织和结构化数据
  • 设计和指定数据库模式
  • 模式优化和数据索引技术

所有这些都是必不可少的,并且会影响数据质量(完整性、一致性、准确性)以及数据访问(可查询性、效率、可扩展性)。有关更详细的说明,请参阅我们的YouTube 教程:数据建模方法。

接下来,Cassandra 数据建模方法有四个目标:

图 6. Cassandra 数据建模目标和工具。

  • 概念数据模型:理解数据。
  • 应用程序工作流模型:识别访问模式。
  • 逻辑数据模型:应用查询优先方法并基于查询设计表。
  • 物理数据模型:优化和实施。

这些模型中的每一个都有支持它们的特定工具,如图 6 所示。模型之间的转换通常是数据建模中最困难的部分,我们将在本文中简要介绍。如果您想深入了解,我们建议您参加DataStax Academy 上的 Cassandra 课程之一。

数据建模用例

让我们通过几个 Cassandra 数据建模示例来看看数据建模过程。在这里,我们将特别关注物联网传感器数据建模,但如果您对其他用例感兴趣,请查看我们的投资组合数据建模和订单管理数据建模教程。

物联网传感器数据建模

图 7. 物联网传感器数据模型的实体关系图。

第一个示例是传感器网络或物联网数据,类似于您在智能家居系统中看到的数据。让我们看看如何在 Cassandra 上对其进行建模。

  1. 概念数据模型:传感器数据的概念数据模型以传感器网络、传感器和温度测量为特征。每个网络都有唯一的名称、描述、区域和传感器数量。??传感器网络可以有多个传感器,但每个传感器只能属于一个网络。同样,每个传感器可以进行多次温度测量,但每次温度测量仅由一个传感器进行。
  2. 应用程序工作流:应用程序工作流的设计目标是了解数据驱动应用程序的数据访问模式。数据库支持四种数据访问模式:
  • Q1:显示所有传感器网络
  • Q2:显示网络的热图
  • Q3:显示网络中的所有传感器。
  • Q4:显示传感器的原始温度值

3.逻辑数据模型:逻辑数据模型源自概念数据模型,它基于数据访问模式将数据组织成 Cassandra 特定的数据结构。在此示例中,有四个表,即networks、temperatures_by_network、sensors_by_network 和temperatures_by_sensor,分别专门用于支持数据访问模式Q1、Q2、Q3 和Q4。

4.物理数据模型: 您可以通过分析和优化性能直接从逻辑数据模型创建物理数据模型。物理数据模型定义数据类型并确定我们是否需要二级索引或物化视图。最常见的分析类型是识别潜在的大分区。一些常见的优化技术包括拆分和合并分区、数据索引、数据聚合和并发数据访问优化。

在这个例子中,模型通过创建一个新的分区键“bucket”来优化数据检索。它还通过引入新的分区键“week”(一种称为打包的技术)来限制表分区大小的增长。

在此处观看我们的YouTube 视频和视觉展示,以获得深入的解释。然后,在 DataStax 上运行场景以在 Cassandra 上实例化此数据模型。

接下来的两个示例值得更多时间,因此请观看此视频或在此处阅读所有相关信息:

  • 投资组合数据建模
  • 订单管理数据建模

结论

在这篇文章中,我们简要概述了 Cassandra 上的数据结构以及创建对构建成功的全球应用程序至关重要的高级数据模型的过程。不要忘记查看第 1 部分,介绍 Cassandra,以及第 3部分和第 4 部分,我们讨论了对数据库和存储附加索引进行基准测试。最后,第 5 部分和第 6 部分解释了如何将 SQL 应用程序迁移到 NoSQL。

有关 Cassandra 的更多研讨会,请查看GitHub 上的 DataStax 学院以及我们定期举办现场研讨会的DataStax Devs YouTube 频道。如果您对 Cassandra 有任何具体问题,请加入DataStax 社区并从专家那里获得答案。

关注DataStax 技术博客,了解更多开发者故事。在 Twitter 上查看我们的YouTube 频道获取教程和DataStax 开发人员,了解有关我们开发人员社区的最新消息。

资源

  1. YouTube 教程:Apache Cassandra 中的高级数据建模
  2. GitHub 上的 DataStax 学院
  3. DataStax 学院的 Cassandra 课程
  4. Cassandra 和 DataStax Astra DB 中的数据建模
  5. 通过示例进行数据建模
  6. 使用 Chebotko 方法为 Apache Cassandra 设计健全和可扩展的数据模型
  7. Apache Cassandra 的大数据建模方法
  8. 使用 NoSQLBench 进行基准测试的初学者指南
点击这里复制本文地址 以上内容由nimo97整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

尼墨宝库 © All Rights Reserved.  蜀ICP备2024111239号-7