Apache Cassandra是一个高度可扩展的高性能分布式数据库,用于处理大量商用服务器上的大量数据,提供高可用性,无单点故障。这是一种NoSQL类型的数据库。
让我们先了解一下NoSQL数据库:
NoSQL 数据库
NoSQL数据库(有时称为“不是唯一的SQL”)是一种数据库,它提供一种机制来存储和检索数据,而不是关系数据库中使用的表格关系。这些数据库是无架构的,支持简单的复制,具有简单的API,最终一致,并且可以处理大量的数据。
NoSQL数据库的主要目的在于:
1、设计简单
2、水平缩放
3、更好地控制可用性
与关系数据库相比,NoSql数据库使用不同的数据结构。它使NoSQL中的一些操作更快。给定NoSQL数据库的适用性取决于它必须解决的问题。
NoSQL数据库与关系数据库
下表列出了区分从NoSQL的数据库关系数据库的各点。
除了Cassandra,我们有以下NoSQL数据库是相当受欢迎:
1、Apache的HBase的 - HBase是一个开放源代码,非关系型,分布式数据库,以Google的BigTable为模型,用Java编写。它作为Apache Hadoop项目的一部分开发,在HDFS之上运行,为Hadoop提供类似于BigTable的功能。
2、MongoDB的 - MongoDB是一个跨平台的面向文档的数据库系统,避免使用传统的基于表的关系数据库结构,使用动态模式的类似JSON的文档,使得在某些类型的应用程序中的数据集成更容易和更快。
什么是Apache Cassandra?
Apache Cassandra是一个开源,分布式和分散式/分布式存储系统(数据库),用于管理遍布世界各地的大量结构化数据。它提供高可用性的服务,没有单点故障。
下面列出了Apache Cassandra的一些值得注意的地方:
1、它是可扩展,容错和一致的。
2、它是一个面向列的数据库。
3、它的分布设计基于Amazon的Dynamo及其在Google的Bigtable上的数据模型。
4、创建在Facebook,它与关系数据库管理系统有很大的不同。
5、Cassandra实现了一个没有单点故障的Dynamo风格的复制模型,但增加了一个更强大的“列族”数据模型。
6、Cassandra被一些最大的公司使用,如Facebook,Twitter,Cisco,Rackspace,ebay,Netflix等。
Cassandra的特点
Cassandra因其卓越的技术特性而变得如此受欢迎。下面给出了Cassandra的一些特性:
1、弹性可扩展性 - Cassandra是高度可扩展的; 它允许添加更多的硬件以适应更多的客户和更多的数据根据要求。
2、始终基于架构 - Cassandra没有单点故障,它可以连续用于不能承担故障的关键业务应用程序。
3、快速线性性能 - Cassandra是线性可扩展性的,即它为你增加集群中的节点数量增加你的吞吐量。因此,保持一个快速的响应时间。
4、灵活的数据存储 - Cassandra适应所有可能的数据格式,包括:结构化,半结构化和非结构化。它可以根据您的需要动态地适应变化的数据结构。
5、便捷的数据分发 - Cassandra通过在多个数据中心之间复制数据,可以灵活地在需要时分发数据。
6、事务支持 - Cassandra支持属性,如原子性,一致性,隔离和持久性(ACID)。
7、快速写入 - Cassandra被设计为在廉价的商品硬件上运行。 它执行快速写入,并可以存储数百TB的数据,而不牺牲读取效率。
Cassandra的组件
Cassandra的关键组件如下:
1、节点 - 它是存储数据的地方。
2、数据中心 - 它是相关节点的集合。
3、集群 - 集群是包含一个或多个数据中心的组件。
4、提交日志 - 提交日志是Cassandra中的崩溃恢复机制。每个写操作都写入提交日志。
5、Mem-表 - mem-表是存储器驻留的数据结构。提交日志后,数据将被写入mem表。有时,对于单列族,将有多个mem表。
6、SSTable - 它是一个磁盘文件,当其内容达到阈值时,数据从mem表中刷新。
7、布隆过滤器 - 这些只是快速,非确定性的算法,用于测试元素是否是集合的成员。它是一种特殊的缓存。 每次查询后访问Bloom过滤器。
Cassandra 数据模型
键空间 (Keyspace)
键空间是Cassandra中数据的最外层容器。Cassandra中的一个键空间的基本属性是
1、复制因子 - 它是集群中将接收相同数据副本的计算机数。
2、副本放置策略 - 它只是把副本放在戒指中的策略。我们有简单策略(机架感知策略),旧网络拓扑策略(机架感知策略)和网络拓扑策略(数据中心共享策略)等策略。
3、列族 - 键空间是一个或多个列族的列表的容器。列族又是一个行集合的容器。每行包含有序列。列族表示数据的结构。每个键空间至少有一个,通常是许多列族。
创建键空间的语法如下:
CREATE KEYSPACE Keyspace name
WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3};
下图显示了键空间的示意图。
列族
列族是有序收集行的容器。每一行又是一个有序的列集合。下表列出了区分列系列和关系数据库表的要点。
1、keys_cached - 它表示每个SSTable保持缓存的位置数。
2、rows_cached - 它表示其整个内容将在内存中缓存的行数。
3、preload_row_cache -它指定是否要预先填充行缓存。
注 - 与不是固定列族的模式的关系表不同,Cassandra不强制单个行拥有所有列。
下图显示了Cassandra列族的示例。
列:
超级列
超级列是一个特殊列,因此,它也是一个键值对。但是超级列存储了子列的地图。
通常列族被存储在磁盘上的单个文件中。因此,为了优化性能,重要的是保持您可能在同一列族中一起查询的列,并且超级列在此可以有所帮助。
下面是超级列的结构
Cassandra 和 RDBMS 的数据模型
下表列出了区分Cassandra的数据模型和RDBMS的数据模型的要点。
Cassandra Cqlsh
默认情况下,Cassandra提供一个提示Cassandra查询语言shell(cqlsh),允许用户与它通信。使用此shell,您可以执行Cassandra查询语言(CQL)。
使用cqlsh,你可以
1、定义模式
2、插入数据
3、执行查询
启动cqlsh
使用命令cqlsh启动cqlsh,如下所示。它提供Cassandra cqlsh提示作为输出。
[hadoop@linux bin]$ cqlsh
Connected to Test Cluster at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 2.1.2 | CQL spec 3.2.0 | Native protocol v3]
Use HELP for help.
cqlsh>
Cqlsh常用命令
Cqlsh有几个命令,允许用户与它进行交互。命令如下所示。
CQL数据定义命令
1、CREATE KEYSPACE -在Cassandra中创建KeySpace。
2、USE -连接到已创建的KeySpace。
3、ALTER KEYSPACE -更改KeySpace的属性。
4、DROP KEYSPACE -删除KeySpace。
5、CREATE TABLE -在KeySpace中创建表。
6、ALTER TABLE -修改表的列属性。
7、DROP TABLE -删除表。
8、TRUNCATE -从表中删除所有数据。
9、CREATE INDEX -在表的单个列上定义新索引。
10、DROP INDEX -删除命名索引。
CQL数据操作指令
1、INSERT -在表中添加行的列。
2、UPDATE -更新行的列。
3、DELETE -从表中删除数据。
4、BATCH -一次执行多个DML语句。
CQL字句
1、SELECT -此子句从表中读取数据。
2、WHERE -where子句与select一起使用以读取特定数据。
3、ORDERBY -orderby子句与select一起使用,以特定顺序读取特定数据。
领取专属 10元无门槛券
私享最新 技术干货