Cassandra 数据模型

发布时间 2023-04-03 20:15:55作者: のNice

Cassandra 数据模型

Cassandra 的数据模型与我们通常在关系型数据库中看到的有很大不同。本文概述了 Cassandra 如何存储其数据。

Cluster

Cassandra 数据库分布在多台一起运行的机器上。最外面的容器称为集群。对于故障处理,每个节点都包含一个副本,如果发生故障,副本将负责。 Cassandra 将节点以环形形式排列在集群中,并为它们分配数据。

Keyspace

Keyspace 是 Cassandra 中最外层的数据容器,类似于关系数据库中的数据库。Keyspace 的基本属性如下:

  • Replication factor:集群中将接收相同数据副本的机器数量。
  • Replica placement strategy:在环中放置副本的策略。
  • Column families:Keyspace 是包含一个或多个 column family 的容器。column family 是包含行(row)集合的容器。Column families 代表数据的结构。每个 Keyspace 至少有一个(通常有很多)column family。

Snipaste_2023-04-03_16-51-39.jpg

Column Family

column family 类似于关系数据库的表,在关系数据库中,每一行包含的字段个数是相同的。但是在 Cassandra 中,虽然 column family 可以定义 column 的元数据(metadata), 但是每一行的实际的字段数是由客户端程序决定的,所以行与行之间的字段数目可以不一样。

1.jpg

静态 Column Family

对于静态的 column family,字段名是固定的,比较适合对于这些 column 都有预定义的元数据,如下图所示:

2.jpg

动态 Column Family

对于动态的 column family,字段名是应用程序计算出来并且提供的,所以 column family 只能定义这些字段的类型,但是不可以指定这些字段的名字和值,这些名字和值是由应用程序插入某字段才得出的,如下图所示:

3.jpg

行(row)

每一行由一个 row key 标识,相当于关系数据库表中的主键,并且总是被索引的。每一行包含一个或多个 Column。

1.jpg

Column

column 是 Cassandra 的基本数据结构,具有三个值,列名称、值和时间戳。下面是列的结构。

4.jpg