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

一 简介

  对于那些习惯了关系型数据库的人来说,学习Cassandra有一定的困难。Cassandra有很多新的术语,与关系型DB中的术语既类似但本质上又不相同。这里我们主要从两个角度来学习Cassandra的数据模型:自底向上和自顶向下。

二 自底向上理解Cassandra的数据模型

  Cassandra被归类于NoSQL数据库,其根本原因在于它的设计不像关系型DB那样需要预告定义属性列。Cassandra是按列进行存储的,通常我们可以想像为以下这种模型:

  

  但是使用这种数据模型来存储数据之后,如果数据没有放在固定位置,那么在查询时我们就需要逐个查看各个Value的值;如果永远将一个值放在此模型中的固定位置,那么对于没有值的情况下必须添加点位符以保持相对位置。产生这些问题的根本在于,这种可称之为数组的数据模型过于简单,它的语义还不够丰富。

  于是,我们考虑在些种模型之上增加一个维度以增加语义:value对应的名称。在给每一个Value取一个Name之后就得到了如下图所示的一个映射结构。

  

  这样就大大增加了语义,我们知道了每一个Value对应的Name,知道了它的用途。

  虽然上面的模型解决了数据的存储及解析问题(主要是解决了正确解析的问题),但是这种模型只能存储某一个实例的数据,如果有多个实例,它们要存储的数据都一样,那应该怎么办呢?

  Cassandra为解决此问题,给上面这种数据模型再增加了一个Name,并且称之为Row Key。要注意的是,这里的Row Key本质上也是一个Name,它不同于关系型DB中的Row Key,但作用类似,均是用于唯一标识一组数据。在增加了这个Row Key后,得到如下图所示的数据模型:

  

  在得到了Row的概念后,就有了一个新的问题了,我们怎么存储多个行的数据呢?Cassandra为些引入了一个列族的概念,用作逻辑上的分组,联系起相似的数据。因此,可以把列族类比作关系型DB中的Table。

  把上面提到的这些概念整合在一起,就得到了Cassandra的基本数据结构:列,也就是Name/Value对(客户端还会提供一个最近一次更新的时间戳);列族,就是为具有相似但不同的列的集合的行而准备的容器。

  最后再稍微提一下从列到行演化时可能发生的嵌套问题,Cassandra中称此为超级列(Super Column),它的本质就是用Row对上图中的Row再封装一层。值得注意的是,Cassandra中只允许嵌套一层。

三 小结

  虽然不倡议将Cassandra中的概念同关系型DB中的概念进行类比,但是通过类比我们可以更快捷地理解各个概念所起的作用及引入的源由。列,就是Name/Value对,而列族就相当于Table,它是为存储由列组成的Row来引入的。至于列族外层是什么容器,那就是下一篇文章《[原创]Cassandra的基本数据模型之自顶向下》中所讲述的了。

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

时间: 2024-11-05 11:31:25

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

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

一 序言 在前面的文章中,我简单地讲述了一下在windows平台上cassandra的安装与启动,并以自底向上的视角来讲述了cassandra的基本数据模型.在我学习一个新的事物之前,我认为最好的方法就是先在宏观上了解一下这个事物,然后再从细节上着手.本篇文章就从自顶向下的视角来分析cassandra的数据模型. 二 集群的概念 Cassandra在设计之初就考虑到了跨越多台主机共同工作,对用户呈现一个整体的分布式系统架构的需求.所以,应此需求而生的就是Cassandra的最外层结构是集群(Cl

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-