📜  Apache Cassandra(NOSQL 数据库)(1)

📅  最后修改于: 2023-12-03 14:59:20.177000             🧑  作者: Mango

Apache Cassandra

介绍

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 上运行,可以通过二进制包或源码编译的方式安装。

Debian/Ubuntu 安装
$ 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
RedHat/CentOS 安装
$ 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

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 两种,具体情况根据业务需求进行选择。

参考资料

Cassandra 官方文档