介绍
Apache Cassandra是一个高度可扩展的高性能分布式数据库,用于处理大量商用服务器上的大量数据,提供高可用性,无单点故障。这是一种NoSQL类型的数据库。
特点
- 弹性可扩展性
是高度可扩展的; 它允许添加更多的硬件以适应更多的客户和更多的数据根据要求。 - 始终基于架构
没有单点故障,它可以连续用于不能承担故障的关键业务应用程序。 - 快速线性性能
线性可扩展性的,即它为你增加集群中的节点数量增加你的吞吐量。因此,保持一个快速的响应时间。 - 灵活的数据存储
适应所有可能的数据格式,包括:结构化,半结构化和非结构化。它可以根据您的需要动态地适应变化的数据结构。 - 便捷的数据分发
通过在多个数据中心之间复制数据,可以灵活地在需要时分发数据。 - 事务支持
支持属性,如原子性,一致性,隔离和持久性(ACID)。 - 快速写入
被设计为在廉价的商品硬件上运行。 它执行快速写入,并可以存储数百TB的数据,而不牺牲读取效率。 - 详细架构说明参考:https://www.w3cschool.cn/cassandra/cassandra_architecture.html
数据模型
集群(Cluster)》键空间 (Keyspace)》列族 》列 》超级列
参考说明:https://blog.csdn.net/u010859650/article/details/85244056
https://cloud.tencent.com/developer/article/2031320
安装Docker版本
# 获取镜像 docker pull cassandra # 启动镜像 docker run --name some-cassandra -p 9042:9042 -d cassandra:latest # 进入容器 docker exec -it some-cassandra bash # 修改配置文件 cassandra.yaml
authenticator: AllowAllAuthenticator # 修改为: authenticator: PasswordAuthenticator # 这样可以使用用户名和密码,进行远程连接。默认的策略,只能本地连接
# 修改方法
# 复制文件到本地(里面没有 vim 不能编辑) docker cp fa14e5d96a6f:/etc/cassandra/cassandra.yaml cassandra.yaml # 修改后,先把原来的删除再复制进去 rm -rf cassandra.yaml docker cp cassandra.yaml fa14e5d96a6f:/etc/cassandra/cassandra.yaml # 再看下权限是否有问题, 如需要就修改权限 chmod 777 cassandra.yaml
默认账户密码为 cassandra cassandra docker官方地址:https://hub.docker.com/_/cassandra/
其他 linux 集群部署安装参考:https://www.w3cschool.cn/cassandra/cassandra_installation.html
python 操作
# -*- encoding: utf-8 -*- from cassandra import ConsistencyLevel # 引入Cluster模块 from cassandra.cluster import Cluster # 引入DCAwareRoundRobinPolicy模块,可用来自定义驱动程序的行为 # from cassandra.policies import DCAwareRoundRobinPolicy from cassandra.auth import PlainTextAuthProvider from cassandra.query import SimpleStatement import pandas as pd # 配置Cassandra集群的IP,记得改成自己的远程数据库IP哦 contact_points = ['1.1.1.1', '2.2.2.2', '3.3.3.3'] # 配置登陆Cassandra集群的账号和密码,记得改成自己知道的账号和密码 auth_provider = PlainTextAuthProvider(username='XXX', password='XXX') # 创建一个Cassandra的cluster cluster = Cluster(contact_points=contact_points, auth_provider=auth_provider) # 连接并创建一个会话 session = cluster.connect() # 定义一条cql查询语句 cql_str = 'select * from keyspace.table limit 5;' simple_statement = SimpleStatement(cql_str,consistency_level=ConsistencyLevel.ONE) # 对语句的执行设置超时时间为None execute_result = session.execute(simple_statement, timeout=None) # 获取执行结果中的原始数据 result = execute_result._current_rows # 把结果转成DataFrame格式 result = pd.DataFrame(result) # 把查询结果写入csv result.to_csv('连接远程数据库.csv', mode='a', header=True) # 关闭连接 cluster.shutdown()
参考:https://www.itdaan.com/blog/2019/02/15/758c4f9d3635617b16ab0eb4d4a965f3.html
https://www.jianshu.com/p/4ca2c6fdb916
Shell 命令
- Copy - 此命令将数据从Cassandra复制到文件中
COPY emp (emp_id, emp_city, emp_name, emp_phone,emp_sal) TO ‘myfile’;
- Describe cluster -此命令提供有关集群的信息
- Describe Keyspaces -此命令列出集群中的所有键空间。
- Describe tables -此命令列出了键空间中的所有表。
- Describe tables -此命令提供表的描述。
参考 https://www.w3cschool.cn/cassandra/cassandra_shell_commands.html
键空间
-
创建键空间
键空间是一个定义节点上数据复制的命名空间。集群每个节点包含一个键空间。
CREATE KEYSPACE “键名称” WITH replication = {'class': ‘策略名称’, 'replication_factor' : ‘复制因子个数’} 【AND durable_writes = ‘bool 值’】;
# CREATE KEYSPACE 语句有两个属性:replication 和 durable_writes。
复制
复制选项用于指定副本位置策略和所需副本的数量。下表列出了所有副本位置策略。
策略名称 描述 简单的策略 SimpleStrategy 为集群指定简单的复制因子。 网络拓扑策略 NetworkTopologyStrategy 使用此选项,可以单独为每个数据中心设置复制因子。 旧网络拓扑策略 使用此选项,可以单独为每个数据中心设置复制因子。 使用此选项,您可以指示Cassandra是否对当前KeySpace的更新使用commitlog。此选项不是强制性的,默认情况下,它设置为true。
示例
下面给出了创建KeySpace的示例。
-
这里我们创建一个名为TutorialsPoint 的KeySpace。
-
我们使用第一个副本放置策略,即简单策略。
-
我们选择复制因子为1个副本。
cqlsh.> CREATE KEYSPACE tutorialspoint WITH replication = {'class':'SimpleStrategy', 'replication_factor' : 3};
验证
您可以使用命令Describe验证是否创建表。如果对键空间使用此命令,它将显示如下所示创建的所有键空间。
cqlsh> DESCRIBE keyspaces; tutorialspoint system system_traces
Durable_writes
默认情况下,表的durable_writes属性设置为true,但可以将其设置为false。您不能将此属性设置为simplex策略。
示例
下面给出了示例持久写入属性的使用示例。
cqlsh> CREATE KEYSPACE test ... WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'datacenter1' : 3 } ... AND DURABLE_WRITES = false;
验证
您可以通过查询系统键空间来验证test KeySpace的durable_writes属性是否设置为false。此查询提供了所有KeySpaces及其属性。
cqlsh> SELECT * FROM system.schema_keyspaces; keyspace_name | durable_writes | strategy_class | strategy_options ----------------+----------------+------------------------------------------------------+---------------------------- test | False | org.apache.cassandra.locator.NetworkTopologyStrategy | {"datacenter1" : "3"} tutorialspoint | True | org.apache.cassandra.locator.SimpleStrategy | {"replication_factor" : "4"} system | True | org.apache.cassandra.locator.LocalStrategy | { } system_traces | True | org.apache.cassandra.locator.SimpleStrategy | {"replication_factor" : "2"} (4 rows)
在这里可以观察测试 KeySpace 的 durable_writes 属性设置为 false。
-
-
修改键空间
ALTER KEYSPACE 键名称 WITH REPLICATION = {'class' : '策略名称', 'datacenter1' : 复制因子个数} AND DURABLE_WRITES = true/false;
-
删除键空间
DROP KEYSPACE 键名称;
表
-
创建表
CREATE TABLE emp( emp_id int PRIMARY KEY, emp_name text, emp_city text, emp_sal varint, emp_phone varint );
-
修改表
# 添加列 ALTER TABLE emp ADD emp_email text; # 删除列 ALTER TABLE emp DROP emp_email;
-
创建索引
CREATE INDEX name ON emp1 (emp_name);
-
批量处理
BEGIN BATCH <insert-stmt>/ <update-stmt>/ <delete-stmt> # 多个执行语句 APPLY BATCH
# 示例: BEGIN BATCH INSERT INTO emp (emp_id, emp_city, emp_name, emp_phone, emp_sal) values( 4,'Pune','rajeev',9848022331, 30000); UPDATE emp SET emp_sal = 50000 WHERE emp_id =3; DELETE emp_city FROM emp WHERE emp_id = 2; APPLY BATCH;
参考:https://www.w3cschool.cn/cassandra/cassandra_create_table.html
插入数据
-
insert
INSERT INTO emp (emp_id, emp_name, emp_city, emp_phone, emp_sal) VALUES(1,'ram', 'Hyderabad', 9848022338, 50000);
-
update
UPDATE emp SET emp_city='Delhi',emp_sal=50000 WHERE emp_id=2;
-
select
SELECT * FROM emp WHERE emp_sal=50000;
CQL数据类型
-
内置数据类型
-
集合类型
-
集合类型的使用
# 创建表 CREATE TABLE data(name text PRIMARY KEY, email list<text>); # 插入数据 INSERT INTO data(name, email) VALUES ('ramu',['abc@gmail.com','cba@yahoo.com']); # 修改数据 UPDATE data SET email = email +['xyz@tutorialspoint.com'] where name = 'ramu';
可视化软件
下载地址:http://www.mongodbmanager.com/cassandra/