欢迎投稿

今日深度:

Cassandra简介,

Cassandra简介,


Cassandra简介 Cassandra是一套开源分布式NoSQL数据库系统,由一堆数据库节点共同构成的一个分布式网络服务。Cassandra 集群中节点是通过自治理来对外提供服务的,它不像 Hadoop 这种 Master/Slave 形式的集群结构,会有一个主服务节点来管理所有节点中的原信息和对外提供服务的负载均衡。Cassandra 的集群管理方式就是一种自适应的管理方式,集群中的节点没有 Master、Slave 之分,各个节点之间相互平等,没有从属和依赖关系,每个节点都可以单独对外提供服务,某个节点 Crash 也不会影响到其它节点。对Cassandra 的一个写操作,会被复制到其他节点上去,对Cassandra的读操作,也会被路由到某个节点上面去读取。
Cassandra数据模型 Cassandra是NoSQL数据库系统,数据模型和关系型数据库是不一样。Cassandra 的数据模型是基于列族(Column Family)的多维模型。 Cassandra的数据库由多个Keyspace组成,每个Keyspace由多个ColumnFamily组成,每个个ColumnFamily是一个key-value键值对的集合。若和关系型数据库类比,Keyspace相当于Schema,ColumnFamily相当于表,而里面的key-value键值对相当于表里的一条记录。 ColumnFamily里的每条记录都是一个key-value键值对,value部分存放的是无限制的Columns。每个Column都有一个name、value和timestamp,因此column实际也是一个key-value对。 上面所说的是双层嵌套,还有一种三层嵌套。在这种情况下,ColumnFamily每条记录的value部分不是Columns,而是一种被称为SuperColumn的结构。SuperColumn的key是SuperColumn name,它的value部分可以存储多个Columns。 注:column name(以及row key)最大为64KB,column value最大为2GB。
Cassandra分配算法 真实节点 将数据key使用相同的函数H计算出哈希值h,通根据h确定此数据在环上的位置,从此位置沿环顺时针“行走”,第一台遇到的服务器就是其应该定位到的服务器。由于一致性哈希算法在服务节点太少时,容易因为节点分部不均匀而造成数据倾斜问题,所以引入了虚拟节点:把每台server分成v个虚拟节点,再把所有虚拟节点(n*v)随机分配到一致性哈希的圆环上。
虚拟节点
同样的根据计算的哈希指确定在圆环上的位置后顺时针往下取到第一个vnode就是数据所属节点。当此节点存在故障时,再顺时针取下一个作为替代点。 找到vnode为数据的第一份存储节点,如果数据的备份因子是3那么接下来的两个vnode就是另外两个副本。
Cassandra客户端请求 写请求 1、client连接到协调者,将写请求发送到拥有对应row的所有replica节点。 2、写一致性级别(write consistency level)确定要有多少个replica节点必须返回成功的确认信息。 一致性级别: ANY、ONE、QUORUM、ALL
读请求 1、协调者首先与一致性级别确定的所有replica联系,被联系的节点返回请求的数据。 2、若多个节点被联系,则来自各replica的row会在内存中作比较,若不一致,则协调者使用含最新数据的replica向client返回结果。 3、协调者在后台联系和比较来自其余拥有对应row的replica的数据,若不一致,会向过时的replica发写请求用最新的数据进行更新。 一致性级别: ANY、ONE、QUORUM、ALL
Cassandra读写流程 写请求
1、先将数据写进内存中的数据结构memtable,同时追加到磁盘中的commitlog中。 2、memtable内容超出指定容量后会被放进将被刷入磁盘的队列。 3、若将被刷入磁盘的数据超出了队列长度,C会锁定写,并将内存数据刷进磁盘中的SSTable,之后commit log被清空。
读请求
1、首先检查BloomFilter,每个SSTable都有一个Bloomfilter,用以在任何磁盘IO前检查请求PK对应的数据在SSTable中是否存在。 2、若数据很可能存在,则检查PartitionKey cache(索引的缓存),之后根据索引条目是否在cache中找到而执行不同步骤。 3、若在索引的缓存中找到: 3.1、从compression offset map中查找拥有对应数据的压缩快。 3.2、从磁盘取出压缩的数据,返回结果集。 4、若没有在索引的缓存中找到: 4.1、搜索Partition summary(partition index的样本集)确定index条目在磁盘中的近似位置。 4.2、从磁盘中SSTable内取出index条目。 4.3、从compression offset map中查找拥有对应数据的压缩快。 4.4、从磁盘取出压缩的数据,返回结果集。
Cassandra集群部署 1、安装Cassandra(官方教程:http://cassandra.apache.org/doc/latest/getting_started/installing.html) 2、启动cassandra之前先修改配置文件(/etc/cassandra/cassandra.yaml): 2.1、cluster_name:集群名称,这个需要提前确定好,因为集群名称的修改非常麻烦需要删除数据。 2.2、seeds:种子节点,种子节点的数量为集群中机器数量的1/3最为合适,也不要随意更改。 2.3、listen_address:其它节点与当前节点的通信地址,设置为本机ip。 2.4、rpc_address:客户端与当前节点的通信地址,设置为本机ip。 3、输入命令sudo cassandra -R 启动cassandra。 4、在多台机器上循环1-3的步骤就完成了一个cassandra的集群部署。 5、可以在cassandra的安装目录(/etc/cassandra)下执行nodetool status命令查看集群中的节点状态。nodetool是cassandra自带的工具,其它功能可以查 看官方文档http://cassandra.apache.org/doc/latest/tools/nodetool/nodetool.html
Cassandra的CQL语句 cassandra启动完成后可以使用cqlsh操作cassandra,首先需要通过cqlsh连接到集群中的任意节点,例如:cqlsh 10.147.168.93 常用语句: 1、查看连接的主机地址和端口:show host; 2、查看所有keyspace:describe keyspaces; 3、查看指定的keyspace:describe keyspace mytestkeyspace; 4、使用keyspace:use mytestspace; 5、查看表当前keyspace下的所有标:describe tables; 6、查看当前keyspace下指定的表:describe monkeyspecies; 7、创建keyspaces: CREATE KEYSPACE ave WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '2'} ; 8、创建table: CREATE TABLE user ( card_no text, name text, birthday text,
age int,
sex text, address text PRIMARY KEY (card_no, name, age) ) WITH CLUSTERING ORDER BY (name ASC, ageDESC)
Cassandra的python驱动Python Cassandra Driver 安装驱动:pip install cassandra-driver 编写简单示例(官方文档:http://docs.datastax.com/en/developer/python-driver/3.8/getting_started/): 1、引入驱动的Cluster模块 from cassandra.cluster import Cluster 2、初始化一个集群对象cluster cluster = Cluster(['192.168.0.1', '192.168.0.2']) 3、初始化一个session对象来执行语句,可以在初始化session时就指定需要操作的keyspace session = cluster.connect('mykeyspace') 4、获取查询到的结果集,可以通过遍历获取结果集中的具体数据 rows = session.execute('SELECT name, age, email FROM users') for row in rows: print row[0], row[1], row[2]

www.htsjk.Com true http://www.htsjk.com/cassandra/33016.html NewsArticle Cassandra简介, Cassandra简介 Cassandra是一套开源分布式 NoSQL 数据库系统,由一堆数据库节点共同构成的一个分布式网络服务。 Cassandra 集群中节点是通过自治理来对外提供服务的,它不像...
相关文章
    暂无相关文章
评论暂时关闭