欢迎投稿

今日深度:

链式存储系统原理,链式存储原理

链式存储系统原理,链式存储原理


• NoSQL运动与Cassandra系统 NoSQL的技术特征:三个否定 否定关系模型 否定ACID事务(亚洲工业发展理事会) 否定SQL语言(现在某种程度上又回归SQL) 大数据促进了NoSQL的迅速繁荣,出现了大量的、技术多样的NoSQL系统,主要可以分为三类:文档系统,键值系统和图系统。以键值存储的代表,Cassandra系统为例。 Cassandra技术来源 Cassandra系统核心技术主要来源于两个方面,一是Google的Bigtable,就是我们常说的大表,另一个是Amazon的DynamoDB,主要是借鉴他的P2P架构。 Cassandra特点与定位 Cassandra的技术来源决定了的它所拥有的技术特点,即,无单点故障、高可用性和可配置的一致性。他适合的应用场景包括时间序列数据、物联网数据、社交媒体数据等等。 • 数据模型、接口和语言 Cassandra 的逻辑数据模型: 键空间 - Keyspace,最上层的命名空间,通常是一个应用程序一个Keyspace; Keyspace 是列族(column family)的容器;一个keyspace 具有特定的配置(数据分区策略, 副本数目等);一个应用程序,一般有一个keyspace 和多个列族; 列族 - ColumnFamily,与table对应,不同点在于:Column Family是稀疏的表; 一个 Column Family 由很多行组成; 行 - Row,每一行由一个key唯一标识,由columns 组成; 一行由很多列组成; 列 - Column,存储的基本单元。 列是一个三元组 : (name(用于查询), value(没有辅助索引的情况下无法按列查询), timestamp(long类型,可用来解决版本冲突)) 核心概念之间的包含关系: Cassandra接口-基于Thrift的API 读操作 get:单行键单列查询 get_slice:单行键多列查询 multiget_slice:多行键多列查询 get_count:获取列数量 get_range_slice:多行键列范围查询 get_indexed_slices:基于二级索引的多列查询 写操作 inset:单行单列写入 batch_mutate:多行多列写入 remove:单行单列删除 truncate:删除整个列族(打标记) 其他 login,describe_*,add/drop column family/keyspace 登陆,读取表结构,添加删除CF/KS Cassandra查询语言 – Not only SQL Cassandra 0.8版 引入CQL, 类似SQL以替代传统的RPC接口 CQL的理由 Thrift 接口(低层接口: get, get_slice, mutate...;直接暴露了内部存储结构,不利于系统升级) CQL2(在0.8版本(CQL)引入, 在1.0版本更新(CQL2);语法和SQL类似, 比 Thrift 接口更可扩展;几乎是1对1的映射到 Thrift 接口, 所以不支持SQL中面向行的部分内容,也不支持复合类型) CQL3示例 DESCRIBE keyspaces;——>查看键空间 CREATE KEYSPACE IF NOT EXISTS myCas WITH REPLICATION = {'class':'SimpleStrategy','replication_factor':1};——>创建键空间,使用键空间 USE testsp;——>使用键空间 DESCRIBE keyspace testsp;——>创建列族 CREATE ColumnFamily users1 (id int,user_name varchar, PRIMARY KEY (id) );——>插入数据 INSERT INTO users1 (id,user_name) VALUES (1, 'abc');——>更新数据 UPDATE users1 SET user_name = '2014' WHERE id = 1;——>删除数据 DELETE FROM users1 WHERE id = 1;——>查询数据 • 系统架构和Gossip协议 Cassandra去中心化的架构-P2P P2P分布式架构:所有节点在结构上是对等关系;任意节点宕机,可能对整个机群的吞吐量造成潜在影响;但不会造成灾难性的服务中断。 扩展能力强:集群扩展时,绝大多数步骤都是自动完成的;得益于P2P架构,集群的扩展相比主从结构更为简便。 不同节点间如何相互感知(Hadoop是主从架构系统,所有节点定期与主节点通信,管理容易) 流言协议(Gossip协议—>疫情算法(Epoidemic Algorithms):借鉴Amazon的键值系统Dynamo的体系架构,利用Gossip协议来发现集群中其他节点的位置(如路由表、Hash环上的位置)、状态(如版本、负载、死活)等信息。 通过Gossip组建集群(指定部分种子节点,某些节点要预知多个种子节点;各节点与种子节点通信,形成集群;多次通信,集群中的节点互相都知道,组建集群完成。) Gossip交换信息的三种模式:推(Push)、拽(Pull)、推+拽(Push-pull) • 一致性哈希和数据分区 在Cassandra节点间相互连通之后,如何将大规模的数据集合进行切分并存放到到各个节点上呢? Cassandra采用一种性哈希方法对数据集进行切分。其基本思想是用同样的哈希函数来计算数据对象和节点的哈希值,用节点的哈希值作为数据集的切分点。 在一致性哈希方法中,节点不再是影响数据对象哈希值的参数,而是作为哈希函数的输入。 一致性哈希方法的优点主要有两条: 1、在确定了Hash函数和节点区间表以后,客户端就可以知道一个数据项存放在哪一个物理节点上。因此不需要全局的元数据服务器。 2、当节点数量改变时,不需要将所有数据对象在新的集群进行重新分配。具体来讲,如果删除一个节点,邻近的机器会接管删除节点的数据,如果新增一个节点,邻近的机器会分摊一部分数据给新节点。 • 数据副本及其一致性 数据副本是大数据存储系统普遍采用的提高系统读性能,并保证系统可靠性的重要手段。 副本、全副本、副本因子N Cassandra副本策略: 简单策略:复制数据副本到协调者节点的N-1个后继节点上。 机架感知策略:在不同的机架中选择存放副本的机器。 数据中心感知策略:类似机架感知策略, 只是本策略是在数据中心层面做出选择。 副本的优点:可用性、并行化、减少数据传输。 副本的缺点:增加了更新成本,增加了并发控制的复杂度(并发可能会导致数据不一致)。 数据分区与数据迁移(需要同时更新数据本身与副本节点,考虑节点离开与新节点加入)。 保证数据的一致性:法团协议Quorum) –NR (读成功数)+ NW(写成功数) > N(副本数) –NW > N/2 • 节点本地数据存取 data:存储真正的数据文件,既后面的SStable文件,可以指定多个目录。 commitlog:存储未写入SSTable中的数据(在每次写入之前先放入日志文件)。 cache:存储系统中的缓存数据(在服务重启的时候从这个目录中加载缓存数据)。 Memtable中的数据是排序的,Cassandra定期将Memtable刷到硬盘的Sstable当中; SStable中的数据一经写入,不再修改; SStable被生成后,Memtable即被销毁,相关CommitLog清空。 Cassandra系统中某一个节点的是如何完成本地数据存取的 Cassandra系统采用了P2P架构,节点完全对等,没有主节点。 客户端访问可以和集群中的任一节点相连,这个连接点叫协调者,其他节点叫非协调者。 协调者结点会根据一致性级别,把访问请求发送给相应数据节点。 最终执行用户请求的节点,可称之为本地节点。 Cassandra数据写入 1、写入memtable 2、写入CommitLog 首先从memtable获取数据,如果存在即返回; 否则,从行缓存中获取数据,如果存在即返回; 再则,检查布隆过滤器判断哪些sstable中存在数据,如果不存在即返回; 检索key缓存来快速在Sstable中定位 从sstable中获取数据 数据写入到行缓存中 列检索特别快!行切片检索比较快! 没有任何读操作,速度很快,阻塞来自于CPU而非I/O! 具体写入示意图如下:

www.htsjk.Com true http://www.htsjk.com/cassandra/32537.html NewsArticle 链式存储系统原理,链式存储原理 • NoSQL运动与Cassandra系统 NoSQL的技术特征:三个否定 否定关系模型否定ACID事务(亚洲工业发展理事会)否定SQL语言(现在某种程度上又回归SQL)大数...
相关文章
    暂无相关文章
评论暂时关闭