Cassandra数据模型

Cassandra是一个开源的分布式数据库,面向列的特点,可以将Cassandra的数据模型想象成一个多维的Hash。

  • 高度可扩展性和高度可用性,没有单点故障
  • NoSQL 列族实现
  • 非常高的写入吞吐量和良好的读取吞吐量
  • 类似 SQL 的查询语言(从 0.8 起),并通过二级索引支持搜索
  • 可调节的一致性和对复制的支持
  • 灵活的模式

数据模型: column  ,  supercolumn  ,   columnfamily  ,   keyspace

COLUMN

Column是Cassandra中最小的数据单元。它是一个3元的数据类型,包含:name,value和timestamp。

将一个Column用JSON的形式表现出来如下:

{  // 这是一个column
   2:     name: "逖靖寒的世界",
   3:     value: "[email protected]",
   4:     timestamp: 123456789
   5: }

为了简单起见,我们可以忽略timestamp。就把column想象成一个name/value即可。

注意,这里提到的name和value都是byte[]类型的,长度不限。

SUPERCOLUMN

我们可以将SuperColumn想象成Column的数组,它包含一个name,以及一系列相应的Column。

将一个SuperColumn用JSON的形式表现如下:

   1: {   // 这是一个SuperColumn
   2:     name: "逖靖寒的世界",
   3:     // 包含一系列的Columns
   4:     value: {
   5:         street: {name: "street", value: "1234 x street", timestamp: 123456789},
   6:         city: {name: "city", value: "san francisco", timestamp: 123456789},
   7:         zip: {name: "zip", value: "94107", timestamp: 123456789},
   8:     }
   9: }

Columns和SuperColumns都是name与value的组合。最大的不同在于Column的value是一个“string”,而SuperColumn的value是Columns的Map。

还有一点需要注意的是:SuperColumn’本身是不包含timestamp的。

COLUMNFAMILY

ColumnFamily是一个包含了许多Row的结构,你可以将它想象成RDBMS中的Table。

每一个Row都包含有client提供的Key以及和该Key关联的一系列Column。

我们可以看看结构:

   1: UserProfile = { // 这是一个ColumnFamily
   2:     phatduckk: {   // 这是对应ColumnFamily的key
   3:         // 这是Key下对应的Column
   4:         username: "gpcuster",
   5:         email: "[email protected]",
   6:         phone: "6666"
   7:     }, // 第一个row结束
   8:     ieure: {   // 这是ColumnFamily的另一个key
   9:         //这是另一个Key对应的column
  10:         username: "pengguo",
  11:         email: "[email protected]",
  12:         phone: "888"
  13:         age: "66"
  14:     },
  15: }

ColumnFamily的类型可以为Standard,也可以是Super类型。

我们刚刚看到的那个例子是一个Standard类型的ColumnFamily。Standard类型的ColumnFamily包含了一系列的Columns(不是SuperColumn)。

??Super类型的ColumnFamily包含了一系列的SuperColumn??,但是并不能像SuperColumn那样包含一系列Standard ColumnFamily。

这是一个简单的例子:

   1: AddressBook = { // 这是一个Super类型的ColumnFamily
   2:     phatduckk: {    // key
   3:         friend1: {street: "8th street", zip: "90210", city: "Beverley Hills", state: "CA"},
   4:         John: {street: "Howard street", zip: "94404", city: "FC", state: "CA"},
   5:         Kim: {street: "X street", zip: "87876", city: "Balls", state: "VA"},
   6:         Tod: {street: "Jerry street", zip: "54556", city: "Cartoon", state: "CO"},
   7:         Bob: {street: "Q Blvd", zip: "24252", city: "Nowhere", state: "MN"},
   8:         ...
   9:     }, // row结束
  10:     ieure: {     // key
  11:         joey: {street: "A ave", zip: "55485", city: "Hell", state: "NV"},
  12:         William: {street: "Armpit Dr", zip: "93301", city: "Bakersfield", state: "CA"},
  13:     },
  14: }

KEYSPACE

Keyspace是我们的数据最外层,你所有的ColumnFamily都属于某一个Keyspace。一般来说,我们的一个程序应用只会有一个Keyspace。

时间: 2024-10-28 15:45:33

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 (类似关

Cassandra简介

在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介绍. 接触Cassandra的原因与接触Neo4J的原因相同:我们的产品需要能够记录一系列关系型数据库所无法快速处理的大量数据.Cassandra,以及后面将要介绍的MongoDB,都是我们在技术选型过程中的一个备选方案.虽然说最后我们并没有选择Cassandra,但是在整个技术选型过程中所接触到的一系列内部

Cassandra ABC

NoSQL最近由于雨后春苏,势如破竹.我们这些从事传统关系型数据管理开发的工作者,必须要跟上云时代的步伐.一起像学ABC一样,走进Cassandra的世界吧. 我总结了这么多关键字,连起来,虽不能绕地球一周,可以给大家一个缩影,Cassandra数据库是什么. KeyWords of Cassandra NoSQLColumnGoogleBigTableAmazonDynamoFacebookApacheJava- 首先,Cassandra是NoSQL数据库,面向列的存储,以Google Big

开源软件:NoSql数据库 - 图数据库 Cassandra

转载自原文地址:http://www.cnblogs.com/loveis715/p/5299495.html Cassandra简介 在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库--Cassandra进行简单地介绍. 接触Cassandra的原因与接触Neo4J的原因相同:我们的产品需要能够记录一系列关系型数据库所无法快速处理的大量数据.Cassandra,以及后面将要介绍的Mong

Cassandra标准列和超级列

列(column)是Cassandra数据模型中的最基本的数据结构单元.列是一个由列名(key).值(value).时间戳(timestamp)构成的三元组.在关系型数据库中,你需要先定义列的名称和和列类型来组成表结构,在插入数据的时候,客户端只需要往预先定义好的表结构插入数值就行了,数据库提供表名称和列名,客户端负责插入数据:而在Cassandra中,数据库只负责提供表名称,列名和数值是由客户端提供的. 标准列 标准列的数据结构 标准列 列[] 值 []时间戳[] 列的实际存放例子 (name

MongoDB基本知识(补充)

NoSQL: Not only SQL 非关系型数据库,不是一种特定的技术,分类多种 而关系型数据库,就是一种特定的技术 大数据问题:BigData 并行数据库系统:关系型数据库,采用SQL,水平切分 NoSQL 数据库管理系统:非关系型,分布式,不支持ACID数据设计范式 简单数据模型 元数据和数据分离的模式 弱一致性 高吞吐量 高水平扩展能力,低端硬件集群 NewSQL数据库管理系统: 代表:Clustrix, GenieDB, ScaleBase,MinbusDB,Drizzle 云数据管

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

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

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

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

Cassandra的数据模型的理解

Cassandra属于NoSQL数据库,NoSQL和传统关系型数据库不同,NOSQL偏好数据冗余,因为NoSQL一般无法做表关联查询. (1) keySpace 基本上可以将Keyspace 理解成MySQL 之中的Database. 只不过Cassandra的"database" 包含了更多的内容: Replication Factor : 复制因数. 表示一份数据在一个DC 之中包含几份.常用奇数~ 比如我们项目组设置的replication_factor=3 Replica pl