一、Cassandra的介绍
Apache Cassandra 是一个开源的分布式 NoSQL 数据库管理系统,设计用于处理大量数据跨多个数据中心和云区域的分布式存储。它提供了高可用性、可扩展性、容错性等特点,适用于处理大量数据的读写操作。
概括:
Cassandra 最初由 Facebook 开发,后来成为 Apache 软件基金会的顶级项目。它是一个分布式键值存储系统,通常用于时间序列数据、用户数据、实时分析和 IoT 数据等场景。Cassandra 采用无单点故障的架构,能够在节点故障的情况下继续运行,而不会影响整体服务的可用性。
Cassandra的存储方式是列式存储,相较于传统的行式存储,具有适合大数据集的数据集合操作,适合数据压缩,查询效率高等特点。
特点:
- 分布式架构:Cassandra 的数据分布在多个节点上,没有单一的故障点。
- 去中心化:没有主节点,每个节点都参与数据的读写操作。
- 高可用性:即使某些节点发生故障,系统仍然可以继续运行,并且数据不会丢失。
- 可扩展性:可以通过添加更多的节点来扩展系统的容量。
- 容错性:设计了数据复制和故障转移机制,确保数据的持久性和一致性。
- 高性能:读写速度快,尤其是在高并发的场景下。
- 灵活的数据模型:支持动态列和表的创建,不需要预定义模式。
优势:
- 扩展性:可以通过增加更多的节点来提高系统的容量和处理能力。
- 低延迟:由于其分布式架构,Cassandra 能够提供低延迟的数据访问。
- 高吞吐量:适合处理大量的读写请求,特别是在写密集型的应用中。
- 多数据中心:可以在多个数据中心之间同步数据,提供地理冗余和低延迟的本地访问。
- 易于维护:提供了自动化的工具来管理数据的复制和恢复。
- 数据一致性:提供了不同的一致性级别,可以根据应用需求选择适当的一致性保证。
适用场景:
- 大规模数据集:适用于需要存储和管理 PB 级别数据的场景。
- 高可用性需求:适用于对服务可用性要求极高的应用。
- 分布式系统:适用于需要跨多个地理位置分布数据的系统。
- 实时分析:适用于需要实时处理和分析数据的应用。
二、安装
1. 下载:
清华大学开源镜像站下载地址:
https://mirrors.tuna.tsinghua.edu.cn/apache/cassandra/4.1.6/
官网下载地址:
https://www.apache.org/dyn/closer.lua/cassandra/4.1.6/apache-cassandra-4.1.6-bin.tar.gz
cassandra需要python3支持,正式安装前请确保linux已经有python3环境。
2. 上传解压:
tar -zxvf apache-cassandra-4.1.6-bin.tar.gz
进入根目录下,创建文件夹:
mkdir data
mkdir commitlog
mkdir saved-caches
3. 修改配置文件:
在conf目录下,找到cassandra.yaml文件,修改以下配置项:
data_file_directories:
- /opt/tools/cassandra-4.1.6/data
commitlog_directory: /opt/tools/cassandra-4.1.6/commitlog
saved_caches_directory: /opt/tools/cassandra-4.1.6/saved_caches
# 改为自己的主机IP
rpc_address: 192.168.100.101
4. 启动cassandra:
./bin/cassandra -R
出现以下信息代表启动成功:
INFO [main] 2024-09-10 19:38:17,504 StorageService.java:3075 - Node /192.168.100.101:7000 state jump to NORMAL
查看服务状态:
./bin/nodetool status
如果启动出错,可以用以下命令查看:
./bin/journalctl -u cassandra
三、Cassandra的基本概念
1. 数据模型
1.1列(Column)
列是Cassandra的基本数据结构单元,具有三个值:名称,值、时间戳
1.2列族( Column Family)
列族相当于关系数据库的表(Table),是包含多行数据的容器。
1.3键空间 (KeySpace)
键空间(KeySpace)相当于数据库。
2. 数据类型
数值类型:
int | 32位有符号整型 |
smallint | 16位有符号整型 |
bigint | 长整型 |
tinyint | 8位有符号整型 |
varint | 可变精度有符号整型 |
float | 32位浮点型 |
double | 64位浮点型 |
decimal | 高精度浮点型 |
文本类型:
ascii | ASCII字符串 |
text | 固定长度字符串 |
varchar | 可变长度字符串 |
时间类型:
timestamp | 包含了日期和时间的时间戳 |
date | 日期 |
time | 时间 |
集合类型:
set | 无需的集合数据类型 |
list | 有序序列 |
map | 包含了键值对的集合类型 |
其他类型:
boolean | 布尔类型 |
blob | 二进制对象 |
inet | IPv4或IPv6网络地址 |
counter | 计数器类型 |
四、基本操作
1. 操作键空间
1.1 创建键空间
create keyspace KeyspaceName with replicaton={'class':strategy name,
'replication_factor': No of replications on different nodes};
需要替换的部分:
KeyspaceName:键空间的名字。
class:复制策略的类,对于单节点一般采用SimpleStrategy,对于集群一般采用NetworkTopologyStrategy。
replication_factor:指定数据的复制数量,不能超过节点数。
1.2 连接键空间
use KeyspaceName;
1.3 修改键空间
alter keyspace keysapceName with <properties>
1.4 删除键空间
drop keyspace keyspaeName;
2. 操作表和数据
2.1 创建表
create table tableName (id text primary key,name text,age int);
2.2 插入数据
insert into tableName(id,name,age) values('01','zhangsan',20);
2.3 查询数据
select * from tableNme;
2.4 修改数据
update tableName set
cloumnName = newValue,
cloumnName = newValue
where <condition>
2.5 删除数据
delete from tableName where <condition>;
2.6 删除表
drop tableName;