简介

Apache Cassandra是一个高度可扩大的高性能分布式数据库,旨在解决许多商用服务器上的大量数据,提供高可用性而没有单点故障。它是NoSQL数据库的一种。首先让咱们理解一下NoSQL数据库的作用。

NoSQL 数据库

NoSQL数据库(有时称为“Not Only SQL”)是一种数据库,它提供了一种存储和检索关系数据库中应用的表格关系以外的数据的机制。这些数据库是无模式的,反对简略的复制,具备简略的API,最终是统一的,并且能够解决大量数据。

NoSQL数据库的次要指标是:

  • 设计简略
  • 程度缩放
  • 更好地管制可用性

与关系数据库相比,NoSql数据库应用不同的数据结构。它使NoSQL中的某些操作更快。给定NoSQL数据库的适用性取决于它必须解决的问题。

NoSQL vs 关系型数据库

下表列出了将关系数据库与NoSQL数据库辨别开的要点。

关系数据库

NoSql 数据库

反对弱小的查询语言

反对非常简单的查询语言

schema固定

schema不固定

遵循ACID

最终一致性

反对事务

不反对事务

除了Cassandra,咱们还有以下十分风行的NoSQL数据库-

  • Apache HBase-HBase是一种以Google的BigTable建模的开源,非关系,分布式数据库,并应用Java编写。它是Apache Hadoop我的项目的一部分,在HDFS之上运行,为Hadoop提供相似BigTable的性能。
  • MongoDB-MongoDB是一个跨平台的面向文档的数据库系统,它防止应用传统的基于表的关系数据库构造,而是应用具备动静模式的相似JSON的文档,从而使数据在某些类型的应用程序中的集成更加容易和快捷。

什么是Apache Cassandra?

Apache Cassandra是一个开源,分布式和扩散/分布式存储系统(数据库),用于治理散布在世界各地的大量结构化数据。它提供高可用性服务,没有单点故障。

以下列出了Apache Cassandra的一些值得注意的中央-

  • 它具备可伸缩性,容错性和一致性。
  • 它是一个面向列的数据库。
  • 其散发设计基于亚马逊的Dynamo及其在Google的Bigtable上的数据模型。
  • 它创立于Facebook,与关系数据库管理系统截然不同。
  • Cassandra实现了Dynamo格调的复制模型,没有单点故障,然而增加了更弱小的“column family”数据模型。
  • 一些大型公司(例如Facebook,Twitter,Cisco,Rackspace,ebay,Twitter,Netflix等)正在应用Cassandra。

Cassandra特点

Cassandra因为其杰出的技术个性而变得如此受欢迎。以下是Cassandra的一些性能:

  • 弹性可扩展性– Cassandra具备高度可扩展性;它容许增加更多硬件,以依据需要包容更多客户和更多数据。
  • 始终在线-Cassandra没有单点故障,并且能够间断用于无奈接受故障的要害业务应用程序。
  • 疾速的线性规模性能-Cassandra具备线性可扩展性,即,随着集群中节点数量的减少,它能够进步吞吐量。因而,它放弃了疾速的响应工夫。
  • 灵便的数据存储-Cassandra可包容所有可能的数据格式,包含:结构化,半结构化和非结构化。它能够依据须要动静适应对数据结构的更改。
  • 轻松进行数据散发-Cassandra通过在多个数据中心之间复制数据,提供了在所需地位散发数据的灵活性。
  • 事务反对-Cassandra反对原子性,一致性,隔离性和持久性(ACID)等属性。
  • 疾速写入-Cassandra旨在在便宜的商品硬件上运行。它执行疾速的写入,并且能够存储数百TB的数据,而不会就义读取效率。

架构

Cassandra的设计指标是在多个节点上解决大数据工作负载而不会呈现任何单点故障。 Cassandra在其节点之间具备对等分布式系统,并且数据分布在集群中的所有节点之间。

  • 集群中的所有节点都表演雷同的角色。每个节点都是独立的,并同时互连到其余节点。
  • 集群中的每个节点都能够承受读写申请,而不论数据理论位于集群中的何处。
  • 当某个节点产生故障时,能够从网络中的其余节点解决读/写申请。

Cassandra中的数据复制

在Cassandra中,集群中的一个或多个节点充当给定数据段的正本。如果检测到某些节点响应的值过期,则Cassandra会将最新值返回给客户端。返回最新值后,Cassandra在后盾执行读取修复以更新过期的值。
下图显示了Cassandra如何在集群中的节点之间应用数据复制以确保没有单点故障的示意图。

Cassandra应用Gossip协定,以容许节点彼此通信并检测集群中的任何故障节点。

Cassandra 组件

组成部分如下-

  • Node − 它是存储数据的中央。
  • Data center − 它是相干节点的汇合。
  • Cluster − 是蕴含一个或多个数据中心的组件。
  • Commit log − 是Cassandra中的解体复原机制。每个写操作都会写入commit log。
  • Mem-table − 内存表是驻留内存的数据结构。commit log后,数据将被写入内存表。有时,对于single-column family,将有多个内存表。
  • SSTable − 它是一个磁盘文件,当其内容达到阈值时,会将数据从内存表中刷新到该磁盘文件中。
  • Bloom filter − 这些仅是用于测试元素是否为汇合成员的疾速,不确定性算法。这是一种非凡的缓存。每次查问后都会拜访Bloom筛选器。

Cassandra 查询语言

用户能够应用Cassandra查询语言(CQL)通过其节点拜访Cassandra。 CQL将数据库Keyspace视为表。程序员应用cqlsh进行查问。

客户端靠近任何节点以进行读写操作。该节点(协调器)在客户端和保留数据的节点之间表演代理角色。

写操作:节点的每个写入流动均由写入节点中的commit logs捕捉。之后,将捕捉数据并将其存储在mem-table中。每当mem-table已满时,数据将被写入SStable数据文件中。所有写入将主动分区并在整个集群中复制。 Cassandra定期合并SSTable,抛弃不必要的数据。

读操作: 在读取操作期间,Cassandra从mem-table中获取值,并查看Bloom筛选器以找到保留所需数据的适当SSTable。

数据模型

Cassandra的数据模型与咱们通常在RDBMS中看到的模型大不相同。本章概述了Cassandra如何存储其数据。

Cluster

Cassandra数据库散布在多台计算机上。最外层的容器称为cluster。为了进行故障解决,每个节点都蕴含一个正本,如果产生故障,则由正本负责。 Cassandra以环形格局将节点排列在cluster中,并为其调配数据。

Keyspace

Keyspace是Cassandra中数据的最外层容器。 Cassandra中Keyspace的根本属性是 -

  • Replication factor − 集群中将接管雷同数据正本的计算机数。
  • Replica placement strategy − 将正本搁置在环中的策略。咱们有诸如简略策略(机架感知策略),旧网络拓扑策略(机架感知策略)和网络拓扑策略(数据中心共享策略)之类的策略。
  • Column families − Keyspace是一个或多个Column family的容器。Column family又是行汇合的容器。每行蕴含有序的列。Column family代表数据的构造。每个Keyspace至多有一个Column family,通常有许多Column family。

创立Keyspace的语法如下 -

CREATE KEYSPACE Keyspace nameWITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3};

下图显示了Keyspace的示意图。

Column Family

Column Family是用于有序收集行的容器。每行又是列的有序汇合。Cassandra Column Family具备以下属性 -

  • keys_cached − 它代表每个SSTable放弃缓存的地位数。
  • rows_cached − 它代表其全部内容将被缓存在内存中的行数。
  • preload_row_cache − 它指定是否要预填充行缓存。
与关系表中Column Family的模式不固定的状况不同,Cassandra不会强制单个行蕴含所有列。

下图显示了Cassandra Column Family的示例。

Column

列是Cassandra的根本数据结构,具备三个值,即键或列名,值和工夫戳。上面给出的是列的构造。

SuperColumn

超级列是非凡列,因而,它也是一个键值对。然而超级列存储子列的映射。
通常,Column Family存储在磁盘上的单个文件中。因而,为了优化性能,将可能要查问的列放弃在同一Column Family中很重要,在此超级列可能会有所帮忙。以下是超级列的构造。

PS: 本文次要翻译自官网文档