[原创]Cassandra的基本数据模型之自顶向下

一 序言

  在前面的文章中,我简单地讲述了一下在windows平台上cassandra的安装与启动,并以自底向上的视角来讲述了cassandra的基本数据模型。在我学习一个新的事物之前,我认为最好的方法就是先在宏观上了解一下这个事物,然后再从细节上着手。本篇文章就从自顶向下的视角来分析cassandra的数据模型。

二 集群的概念

  Cassandra在设计之初就考虑到了跨越多台主机共同工作,对用户呈现一个整体的分布式系统架构的需求。所以,应此需求而生的就是Cassandra的最外层结构是集群(Cluster),也可以称之为环(Ring),因为Cassandra将集群中的所有节点组成一个环,并依此来分配数据到集群中的节点上。

  谈到集群,我们就会想到数据的同步。Cassandra的集群没有主从的概念,所有的节点都是对等的,并且它们以P2P协议在各个节点之间进行数据同步。

三 Keyspace

  集群是keyspace的容器,而且一个集群通常只有一个keyspace。keyspace是cassandra中数据的最外层容器,因此可以将其类比成关系型DB中的数据库实例。在Cassandra的设计中,keyspace有如下几个基本属性:

  1 副本因子(Replication factor)

  副本因子的作用是控制数据在集群中有多少个副本。从本质上说,副本因子决定了要为CAP理论中的C付出多少性能代价。

  2 副本放置策略(Replica placement strategy)

  是指数据如何分布到环上,此策略直接影响到数据的键值映射到环上节点的方式。

  3 列族(Column family)

  在cassandra中,keyspace是一个或多个列族的容器,就类似于关系型DB中的表,是集合了多行数据的容器。

四 列族(Column family)

  列族是容纳一组有序的行的容器,每行都包含一组有序的列。这里从几个方面讲述列族与关系型DB中的表的区别:

  1 Cassandra被认为是无Schema的,因为可以随意在在列族中添加任意的列。而不像关系型DB中,一但定义了表的属性后就确定了列。

  2 列族除了和关系型DB中的表都拥有一个名称以外,还有一个称之为比较器(comparator)的属性。它决定了在查询数据时返回的列的排序方式,可以根据long,byte,UTF8或者其他方式排序。

  3 在关系型DB中,数据在磁盘上的组织方式是对用户透明的。但是在cassandra中,每个列族都存储为不同的文件,所以从查询性能上来讲,把相关的列放到同一个列族中十分重要。

  这里需要明确的是,列族是行的容器,而行则是许多列的容器。行与列一样,都是局部唯一标识它们的Name值。

五 列(column)

  列是cassandra中最基本的数据结构了。它是一个由名称(Name),值(Value)和时间戳组成的三元组,如下图所示:

  

  列的结构很简单,说白了就是name-value对。 需要注意的是它与关系型DB中的列的区别:首先,在关系型DB中需要预告定义所有列的名字和属性来定义表的结构,然后才能按照定义好的属性提供值,而在Cassandra中可以由应用根据需要随时写入列,在极大地提高了灵活性,也允许数据随着时间的推移而循序渐进地改变;其次,在关系型DB中一旦列的名称定义好后就不建议再修改,而且所有行的数据都按照对应列来解析。在Cassandra中,列的定义完全由应用决定,也就是说一个列中的name和value可以存储用户任何想存储的数据,name在某种意义上也是一种数据;最后,被认为是cassandra中列与关系型DB中列的最大区别就是,Cassandra中列在各行中数目不定,根据应用的需求变化,而在关系型DB中各行的列都是不变的。

六 小结

  这篇文章从自顶向下的视角分析一下Cassandra的数据模型,并简单的讲述了一下与关系型DB的一些区别。Cassandra与关系型DB的最大区别就是在设计数据库的架构时不再以数据为中心,而是以查询为中心。需要为特定的查询设计特别的数据架构以便获取最高的查询性能。

  如有错误之处,敬请留言!

时间: 2024-10-25 22:53:33

[原创]Cassandra的基本数据模型之自顶向下的相关文章

[原创]Cassandra的基本数据模型之自底向上

一 简介 对于那些习惯了关系型数据库的人来说,学习Cassandra有一定的困难.Cassandra有很多新的术语,与关系型DB中的术语既类似但本质上又不相同.这里我们主要从两个角度来学习Cassandra的数据模型:自底向上和自顶向下. 二 自底向上理解Cassandra的数据模型 Cassandra被归类于NoSQL数据库,其根本原因在于它的设计不像关系型DB那样需要预告定义属性列.Cassandra是按列进行存储的,通常我们可以想像为以下这种模型: 但是使用这种数据模型来存储数据之后,如果

Cassandra 学习三 数据模型

   Cassandra如何存储数据的概述. 集群(Cluster) ·Cassandra数据库分布在几个一起操作的机器上.最外层容器被称为集群.对于故障处理,每个节点包含一个副本,如果发生故障,副本将负责.Cassandra按照环形格式将节点排列在集群中,并为它们分配数据. 键空间 (Keyspace)(相当于关系型数据库的DataBase) 键空间是Cassandra中数据的最外层容器.Cassandra中的一个键空间的基本属性是 - 复制因子 - 它是集群中将接收相同数据副本的计算机数.

cassandra学习 四 数据模型

Keyspace(建空间): 可以理解为Database: Replication factor: 复制因数 :   Replica placement srategy: 复制策略,默认是SimpleStrategy Column Family(列族) / Column (列) 可以理解为table:    Column 包含了Timestamp.作用是当有新数据覆盖的时候,部署直接将老数据从存储介质上删除,而是直接写入新数据.老数据会在一段时间后删除. Row可以理解为一条记录,Column其

Hbase总结(一)-hbase命令,hbase安装,与Hive的区别,与传统数据库的区别,Hbase数据模型

Hbase总结(一)-hbase命令 下面我们看看HBase Shell的一些基本操作命令,我列出了几个常用的HBase Shell命令,如下: 名称 命令表达式 创建表 create '表名称', '列名称1','列名称2','列名称N' 添加记录 put '表名称', '行名称', '列名称:', '值' 查看记录 get '表名称', '行名称' 查看表中的记录总数 count  '表名称' 删除记录 delete  '表名' ,'行名称' , '列名称' 删除一张表 先要屏蔽该表,才能对

【DB】HBase的基本概念

一 Hbase是个啥东东? 在说Hase是个啥家伙之前,首先我们来看看两个概念,面向行存储和面向列存储.面向行存储,我相信大伙儿应该都清楚,我们熟悉的RDBMS就是此种类型的,面向行存储的数据库主要适合于事务性要求严格场合,或者说面向行存储的存储系统适合OLTP,但是根据CAP理论,传统的RDBMS,为了实现强一致性,通过严格的ACID事务来进行同步,这就造成了系统的可用性和伸缩性方面大大折扣,而目前的很多NoSQL产品,包括Hbase,它们都是一种最终一致性的系统,它们为了高的可用性牺牲了一部

一篇百度知道上的实际数据库需求变化及演变

在说HBase之前,我想再唠叨几句.做互联网应用的哥们儿应该都清楚,互联网应用这东西,你没办法预测你的系统什么时候会被多少人访问,你面临的用户到底有多少,说不定今天你的用户还少,明天系统用户就变多了,结果您的系统应付不过来了了,不干了,这岂不是咱哥几个的悲哀,说时髦点就叫"杯具啊". 其实说白了,这些就是事先没有认清楚互联网应用什么才是最重要的.从系统架构的角度来说,互联网应用更加看重系统性能以及伸缩性,而传统企业级应用都是比较看重数据完整性和数据安全性.那么我们就来说说互联网应用伸缩

Cassandra数据模型

Cassandra是一个开源的分布式数据库,面向列的特点,可以将Cassandra的数据模型想象成一个多维的Hash. 高度可扩展性和高度可用性,没有单点故障 NoSQL 列族实现 非常高的写入吞吐量和良好的读取吞吐量 类似 SQL 的查询语言(从 0.8 起),并通过二级索引支持搜索 可调节的一致性和对复制的支持 灵活的模式 数据模型: column  ,  supercolumn  ,   columnfamily  ,   keyspace COLUMN Column是Cassandra中

Cassandra 数据模型

Cassandra的数据模型类似于关系型数据库的模型,且提供了与SQL语言非常类似的CQL语言进行操作. 但是Cassandra的数据模型类似于多层键值对结构,与关系型数据库存在巨大差别. 本文基于: [cqlsh 5.0.1 | Cassandra 3.11.2 | CQL spec 3.4.4 | Native protocol v4] 目录: 多层KV结构 查询 排序 聚合 ALLOW FILTERING 次级索引 多层KV结构 Cassandra 的数据模型由 keyspace (类似关

[原创]Windows平台Cassandra安装与启动

一 cassandra简介 cassandra可译为卡珊德拉,这个来源于希腊神话中的名词,具体可以参见百度百科. Cassandra被认为是NoSQL的一种,但是细究起来,就会发现它的设计中含有行的概念.另外cassandra注重的是CAP理论中的AP,这些东西读者可以自行搜索学习. 二 cassandra下载 笔者所讲述的是从https://cassandra.apache.org/上下载的v2.1.8版本的cassandra.下载后会得到一个名为apache-cassandra-2.1.8-