Logo
Section 1 / 17

Apache Cassandra 表

你好,我来为你介绍 Apache Cassandra 表,并通过一个简单的例子说明数据在集群中的分区与分布机制。 假设我们有一个名为 `users` 的表,用于存储用户信息。表结构如下: ```cql CREATE TABLE users ( user_id UUID PRIMARY KEY, name TEXT, email TEXT, city TEXT ); ``` 在这个表中,`user_id` 是主键(PRIMARY KEY),它决定了数据如何被分区和分布到集群中的不同节点上。 ### 数据分区机制 Cassandra 使用 **分区键**(在这里是 `user_id`)来决定数据存储的位置。具体来说: - 每个 `user_id` 会被哈希计算,生成一个分区令牌(partition token)。 - 这个令牌决定了该数据应该存储在哪个节点上。 - 所有具有相同分区键的数据会存储在同一个分区中,即同一个节点或一组副本节点上。 例如: - 用户 A 的 `user_id = a1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8`,其哈希值对应某个节点。 - 用户 B 的 `user_id = b2c3d4e5-f6g7-8901-h2i3-j4k5l6m7n8o9`,其哈希值对应另一个节点。 因此,不同的用户数据会被分散到不同的节点上,实现负载均衡。 ### 数据分布与复制 Cassandra 集群中通常配置了多个副本(replication factor)。比如复制因子为 3,表示每个分区的数据会在三个不同的节点上保存。 当写入一条记录时: - Cassandra 根据 `user_id` 的哈希确定主节点(负责写入的节点)。 - 主节点将数据同步到其他两个副本节点(根据复制策略)。 读取时,客户端可以向任意副本节点请求数据,系统会返回最新版本的数据。 ### 示例操作 ```cql INSERT INTO users (user_id, name, email, city) VALUES (a1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8, 'Alice', 'alice@example.com', 'Beijing'); SELECT * FROM users WHERE user_id = a1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8; ``` 这条查询会直接定位到包含该 `user_id` 的分区,快速返回结果。 ### 总结 - 基于主键的分区键决定了数据在集群中的分布。 - 数据自动分片并均匀分布在各个节点上。 - 通过复制机制保证高可用性和容错能力。 - 查询性能高,尤其适合基于主键的点查场景。 这就是 Apache Cassandra 如何通过简单表设计实现高效、可扩展的数据存储与访问。

导入

Apache Cassandra 表

你好,我来为你介绍 Apache Cassandra 表,并通过一个简单的例子说明数据在集群中的分区与分布机制。 假设我们有一个名为 `users` 的表,用于存储用户信息。表结构如下: ```cql CREATE TABLE users ( user_id UUID PRIMARY KEY, name TEXT, email TEXT, city TEXT ); ``` 在这个表中,`user_id` 是主键(PRIMARY KEY),它决定了数据如何被分区和分布到集群中的不同节点上。 ### 数据分区机制 Cassandra 使用 **分区键**(在这里是 `user_id`)来决定数据存储的位置。具体来说: - 每个 `user_id` 会被哈希计算,生成一个分区令牌(partition token)。 - 这个令牌决定了该数据应该存储在哪个节点上。 - 所有具有相同分区键的数据会存储在同一个分区中,即同一个节点或一组副本节点上。 例如: - 用户 A 的 `user_id = a1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8`,其哈希值对应某个节点。 - 用户 B 的 `user_id = b2c3d4e5-f6g7-8901-h2i3-j4k5l6m7n8o9`,其哈希值对应另一个节点。 因此,不同的用户数据会被分散到不同的节点上,实现负载均衡。 ### 数据分布与复制 Cassandra 集群中通常配置了多个副本(replication factor)。比如复制因子为 3,表示每个分区的数据会在三个不同的节点上保存。 当写入一条记录时: - Cassandra 根据 `user_id` 的哈希确定主节点(负责写入的节点)。 - 主节点将数据同步到其他两个副本节点(根据复制策略)。 读取时,客户端可以向任意副本节点请求数据,系统会返回最新版本的数据。 ### 示例操作 ```cql INSERT INTO users (user_id, name, email, city) VALUES (a1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8, 'Alice', 'alice@example.com', 'Beijing'); SELECT * FROM users WHERE user_id = a1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8; ``` 这条查询会直接定位到包含该 `user_id` 的分区,快速返回结果。 ### 总结 - 基于主键的分区键决定了数据在集群中的分布。 - 数据自动分片并均匀分布在各个节点上。 - 通过复制机制保证高可用性和容错能力。 - 查询性能高,尤其适合基于主键的点查场景。 这就是 Apache Cassandra 如何通过简单表设计实现高效、可扩展的数据存储与访问。

表名为 courses

1CREATE TABLE courses 2( 3 id int, 4 title text, 5 instructor text, 6 category text, 7 PRIMARY KEY(id) 8);
idtitleinstructorcategory
1Cassandra 基础DataJekCassandra
2CQLBobCassandra
3Cassandra 架构AdamCassandra
...
courses 表按 id 列分区的内部存储结构
...
表在集群中的分布情况

Apache Cassandra 数据建模

CQL DDL:CREATE TABLE 语句