2024-12-21
生活的情况越艰难,我越感到自己更坚强,甚而也更聪明。——高尔基
Github: https://github.com/apache/cassandra/
官方文档: https://cassandra.apache.org/
最近开始接触Apache Cassandra,这是一款开源的分布式NoSQL数据库,特别适合处理大量结构化数据,具有高可用性和无单点故障的特点。听说它采用了Dynamo和Bigtable的架构设计,存储模型是基于列的,非常适合需要快速写入和查询的场景,比如时间序列数据、物联网应用等等。
先简单说说安装,直接从官网下载二进制文件,解压后进入bin目录,运行cassandra
即可启动。第一次运行时需要初始化数据目录,默认情况下配置文件在conf目录下,建议先熟悉一下里面的参数,特别是cassandra.yaml
,很多关键配置都在这里。如果是用Docker,也可以直接拉取官方镜像,运行一条简单的命令就可以启动一个容器,非常方便。
使用Docker运行也很简单,拉取官方镜像:
1 |
|
启动一个Cassandra实例:
1 |
|
通过环境变量可以自定义配置,比如设置集群名称或种子节点:
1 |
|
启动后可以通过容器的端口9042连接到Cassandra,使用cqlsh
测试功能。对于多节点集群,可以启动多个容器并设置相同的集群名称和不同的种子节点。
启动后,连接Cassandra可以使用自带的CQL Shell工具,叫cqlsh
,直接在终端输入cqlsh
就可以连接到本地实例。试了一下创建一个Keyspace和表,感觉CQL的语法很像SQL,但是多了一些针对分布式特性的设计,比如需要定义分区键和集群键。用下面的命令创建了一个简单的表:
1 |
|
插入了一些数据,用INSERT INTO
语句,然后用SELECT
查询,响应速度很快,这也是它的特点之一。在分布式环境下,它会自动分片存储数据,通过一致性哈希算法实现负载均衡。Cassandra的写入路径也非常有意思,是基于Memtable和SSTable的设计,写入时是顺序操作,延迟非常低。
了解了一下它的多节点设置,需要先修改配置文件里的cluster_name
和seeds
参数,把节点之间的通信地址配置好,然后启动多个实例即可。默认是用Gossip协议来实现节点发现和状态同步。也看了一下nodetool
工具,可以用它来查看集群状态、修复数据或者清理旧的SSTable。
Cassandra支持多种一致性级别,比如ONE
、QUORUM
和ALL
,可以根据业务需求调整读取和写入的一致性保障。这种灵活性让它在很多场景下都很适用,比如需要高写入性能的日志系统,也可以用来做强一致性要求的任务。
还研究了一下如何在Spring Boot项目中集成Cassandra。首先需要添加依赖:
1 |
|
然后在application.properties
文件中配置Cassandra的连接信息:
1 |
|
定义一个实体类并用Cassandra的注解进行标注:
1 |
|
创建一个Repository接口来访问数据:
1 |
|
然后在Service或者Controller中使用这个Repository即可进行数据的CRUD操作。
目前还在学习阶段,但整体体验下来感觉Cassandra确实是一款非常强大的分布式数据库,特别适合那些需要可扩展性和高可用性的系统。