关于cassandra:什么是Cassandra

94次阅读

共计 3640 个字符,预计需要花费 10 分钟才能阅读完成。

简介

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 name
WITH 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: 本文次要翻译自官网文档

正文完
 0