📅  最后修改于: 2023-12-03 14:59:20.177000             🧑  作者: Mango
Apache Cassandra 是一个高性能、可扩展的分布式 NoSQL 数据库系统,被广泛应用于 Web、物联网、金融、游戏等领域。 它能够无缝扩展到成百上千个节点,处理海量数据,具有高可用性、高性能以及强一致性的特点。
Cassandra 提供了一个类 SQL 的查询语言 CQL(Cassandra Query Language),它支持大部分 SQL 的语法,并且增加了 NoSQL 数据库的一些特性。Cassandra 还支持多数据中心复制,确保数据的跨地域可用性以及高可用性。
Cassandra 是 Apache 开源基金会的顶级项目。
高可扩展性:Cassandra 集群可以透明地扩展到成百上千个节点,处理 PB 级别数据。
高可用性:Cassandra 的数据复制和数据分区机制保证应用高可用性和灵活性。
强一致性:Cassandra 提供了多种数据一致性级别,可以根据业务需求选择合适的一致性级别。
支持多数据中心:Cassandra 通过多数据中心复制来支持跨地理位置的高可用性和低延迟读取。
CQL:Cassandra 的查询语言 CQL,具有类 SQL 的语法,并且支持 NoSQL 数据库的一些特性。
Cassandra 使用的是基于列的数据模型(column-family based data model),类似于 BigTable 和 HBase。它的基本数据单元是列(column),列由列名、列值、时间戳组成。列名是一个可排序的字节数组,列值可以是任意字节数组,时间戳用于版本控制和判断数据的一致性。
Cassandra 的数据模型使用了分区和副本的概念。Cassandra 中的数据按照分区键(partition key)进行分区,每个分区可以包含多个行(row)。每个分区通常被多个副本(replica)复制到不同的节点上,以保证数据在集群中的可用性和可靠性。
Cassandra 可以在 Linux、Windows 和 Mac 上运行,可以通过二进制包或源码编译的方式安装。
$ echo "deb http://www.apache.org/dist/cassandra/debian 311x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list
$ curl https://downloads.apache.org/cassandra/KEYS | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install cassandra
$ sudo vi /etc/yum.repos.d/cassandra.repo
然后添加以下内容:
[cassandra]
name=Apache Cassandra
baseurl=https://www.apache.org/dist/cassandra/redhat/311x/
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://www.apache.org/dist/cassandra/KEYS
最后,运行以下命令安装 Cassandra:
$ sudo yum install cassandra
CQL(Cassandra Query Language)是 Cassandra 提供的类 SQL 查询语言,它支持大部分 SQL 的语法,并且增加了 NoSQL 数据库的一些特性。
-- 创建 keyspace
CREATE KEYSPACE keyspace_name WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3};
-- 使用 keyspace
USE keyspace_name;
-- 创建 table
CREATE TABLE table_name (column1 datatype1, column2 datatype2, column3 datatype3, PRIMARY KEY (column1));
-- 插入数据
INSERT INTO table_name (column1, column2, column3) VALUES (value1, value2, value3);
-- 查询数据
SELECT * FROM table_name WHERE column1 = value1;
-- 更新数据
UPDATE table_name SET column1 = new_value1 WHERE column2 = value2;
-- 删除数据
DELETE FROM table_name WHERE column1 = value1;
CQL 支持以下数据类型:
ASCII:固定长度的 ASCII 字符串。
Bigint:64 位有符号整数。
Boolean:true 或 false。
Counter:分布式计数器。
Date:日期类型,以年月日存储。
Decimal:高精度小数。
Double:64 位 IEEE 浮点数。
Float:32 位 IEEE 浮点数。
Inet:IPv4 或 IPv6 地址。
Int:32 位有符号整数。
Smallint:16 位有符号整数。
Text:UTF-8 编码的可变长度字符串。
Time:时间类型,以小时、分钟、秒存储。
Timestamp:时间戳类型,以毫秒存储。
Timeuuid:UUID 和时间戳的组合。
Tinyint:8 位有符号整数。
Uuid:UUID 类型。
Varchar:UTF-8 编码的可变长度字符串。
Varint:大整数。
在 Cassandra 中,每个表必须有主键。主键由一个或多个列组成,用于唯一标识一行数据,并将数据分布到不同的节点上。主键分为分区键和聚簇列两部分。
分区键(Partition Key):主键的第一部分,用于将数据分区。分区键按照哈希算法计算哈希值,然后将哈希值映射到不同的节点上。分区键的值是不可变的,一旦设置就不允许修改。
聚簇列(Clustering Column):主键的其他部分,用于控制数据的存储和排序。聚簇列按照从左到右的顺序排列,每个聚簇列可以设置升序或降序。聚簇列的值是可变的,可以修改。
主键的类型分为 Simple Primary Key 和 Composite Primary Key 两种,具体情况根据业务需求进行选择。