文档章节

走进cassandra之二 数据模型

chenkangyao
 chenkangyao
发布于 2016/07/19 13:26
字数 1025
阅读 23
收藏 0

在1.1官方的文档里面,列族被分成了两类:
static column family
dynamic column famliy


static这种,就是传统上的,大家很快就能理解的类似于关系型数据库的table的一种,官方定义如下:
A static column family uses a relatively static set of column names and is similar to a relational database table. For
example, a column family storing user data might have columns for the user name, address, email, phone number and
so on. Although the rows generally have the same set of columns, they are not required to have all of the columns
defined. Static column families typically have column metadata pre-defined for each column.
这段英文不难看懂,也很容易理解,跟table有很大的相似性。
 
关于dynamic这种,就是新的概念了,官方定义:
A dynamic column family takes advantage of Cassandra's ability to use arbitrary application-supplied column names to
store data. A dynamic column family allows you to pre-compute result sets and store them in a single row for efficient
data retrieval. Each row is a snapshot of data meant to satisfy a given query, sort of like a materialized view. For
example, a column family that tracks the users that subscribe to a particular user's blog is dynamic
 
这段文字有点费解,尤其是刚刚学习NOSQL的时候。
但是他举的例子,可以比较快接受,大家现在都用微博,如果追踪一个成名人物所有的粉丝,为这个目的,建立一个列族的话,就可用 dynamic这种。
(你用关系型数据库的表,也能存储这种关系,但是记得,我们现在是在nosql的世界里哦)
总的来说,各个column不是固定的,是动态的,这就是dynamic.
 
关于每个column,1.1官方文档里也做了描述,它区分的更加细致,除了大家所了解的普通列和超级列,还有其他的,如下:
 
Column families consist of these kinds of columns:
? Standard: Has one primary key.
? Composite: Has more than one primary key, recommended for managing wide rows
? Expiring: Gets deleted during compaction.
? Counter: Counts occurrences of an event.
? Super: Used to manage wide rows, inferior to using composite columns.
 

 
关于cassandra有很多文档上都说它是无schema,其实这个描述,稍微有点不准确,schema是什么呢,就是一个数据库的一组规则标准,不管你是关系型,还是nosql,总得有规则的,不可能是一点儿没有,区别在于 cassandra的这种, schema有点粗,相当大条。
 
怎么个粗法呢?
 
比如说我们找到一个schema文件的例子
xxxx\services\schema
 
我们可以打开一个cv.cass来看看。如下:
CREATE KEYSPACE CV;
 
USE CV;
 
CREATE COLUMN FAMILY Comments
WITH column_type = Super
AND comparator = TimeUUIDType
AND key_validation_class = BytesType;
 
CREATE COLUMN FAMILY CommentCounter
WITH default_validation_class = CounterColumnType
AND key_validation_class = BytesType
AND comparator = UTF8Type;
 
CREATE COLUMN FAMILY Group
WITH comparator = UTF8Type
AND key_validation_class = BytesType
AND column_metadata=[
{column_name: name, validation_class: UTF8Type, index_type: KEYS},
{column_name: type, validation_class: UTF8Type, index_type: KEYS},
{column_name: timecreated, validation_class: IntegerType, index_type: KEYS},
{column_name: timeupdated, validation_class: IntegerType, index_type: KEYS}];
 
可以看出,这里面,就列出了 列族的名字, 还有一些基本属性,比起关系型数据库的 E-R图来说,是有些大条,以至于说它是无 schema了。
 
那么这段 粗略的schema,到底 规定了什么东东呢?到底在说呢?
 
CREATE COLUMN FAMILY Comments 给列族起了一个名字,这个好理解。
WITH column_type = Super 这段是说这个列族是超级列族。
AND comparator = TimeUUIDType 这个是规定列名的数据类型和列是如何排序的。官方的解释是The comparator specifies the data type
for the column name, as well as the sort order in which columns are stored within a row。
AND key_validation_class = BytesType; 这个是定义row key validator的
 
WITH default_validation_class = CounterColumnType 这个也是validator。
 
AND column_metadata=[
{column_name: name, validation_class: UTF8Type, index_type: KEYS},
{column_name: type, validation_class: UTF8Type, index_type: KEYS},
{column_name: timecreated, validation_class: IntegerType, index_type: KEYS},
{column_name: timeupdated, validation_class: IntegerType, index_type: KEYS}];
这一堆,说的是针对 静态列族,你可以预先定义一部分列。这些列是预先定义好的,死的,不是在运行时才加上去的。
比较适合有公共部分的row,比如说,一个‘人‘的列族,每人肯定是有性别的,别的可以没有,这个必须有。
 
一般来说,作为我们程序员,只关心列族的配置就好了,keyspace的,可以不太关注。
 
数据模型,是了解cassandra的hello world 步骤,过了这一篇,下面就是高年级知识了。

© 著作权归作者所有

共有 人打赏支持
chenkangyao
粉丝 5
博文 44
码字总数 75969
作品 0
广州
高级程序员
走进cassandra 之一 CAP和分布式

决定share一下我的cassandra学习成果,写一些博客,跟大家共同分享一下,准备写10篇文章,内容分别涉及 分布式存储概述及CAP, 数据模型, 分区器, 副本机制, 存储机制, 数据读写删, 最终一...

chenkangyao
2016/07/19
21
0
分布式 Key-Value 存储系统:Cassandra 入门

Cassandra 的数据存储结构 Cassandra 的数据模型是基于列族(Column Family)的四维或五维模型。它借鉴了 Amazon 的 Dynamo 和 Google's BigTable 的数据结构和功能特点,采用 Memtable 和 ...

黄平俊
2010/07/16
2.6K
0
考虑 Apache Cassandra 数据库

简介 在数据库历史文章 “What Goes Around Comes Around”(参阅 参考资料)中,Michal Stonebraker 详细描述了存储技术是如何随着时间的推移而发展的。实现关系模型之前,开发人员曾尝试过...

ihaolin
2014/08/17
0
0
走进cassandra之六 数据读写删

先说写,再说读,最后说 数据一致性(data consistency)。 cassandra对于 数据写入,那是相当给方便的,比对 首长儿子还亲呢, 写的相当快,相当高效。 相比来说,关系型数据库,对于数据 ...

chenkangyao
2016/07/19
9
0
Cassandra数据模型设计(上)

【编者注:InfoQ中文站获得了eBay工程师Jay Patel的授权,将会为陆续为读者呈现Cassandra数据模型设计的系列内容。】 本文是Cassandra数据模型设计第一篇(全两篇),该系列文章包含了eBay使...

啊莫
2015/12/07
54
0

没有更多内容

加载失败,请刷新页面

加载更多

Bytom资产发行与部署合约教程

比原项目仓库: Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockchain/bytom 发行资产 在比原链上发行资产比较方便快捷,使用节点的dashboard图形界面...

比原链Bytom
10分钟前
0
0
Ext ComboBox 实现下拉多选,全选,反选

Ext ComboBox下拉选中-全选反选逻辑处理 Ext ComboBox 实现下拉多选,全选,反选 方法一: 代码 var me = this;var isMultiSelect = true;//是否设置为下拉多选me.selectValues = [];//保存...

javaART
13分钟前
0
0
Swoole Windows 版(4.2.1)

https://pan.baidu.com/s/1uTm77_cp4kn0_xMgO1DpIw Swoole Windows 版(内部版本,swoole-4.2.1,php-7.1,必须为64位系统,Win7或更高版本)。 解压后,将 $dir/bin 目录,设置到 系统的环境...

老查
16分钟前
0
0
美团点评上市受追捧,成中国第四大互联网企业

从建立到上市,蔚来用了不到4年,拼多多3年,趣头条更是仅用了2年3个月。在这波中概股上市浪潮中,等待了漫长8年的美团点评也终于迎来登陆资本市场的时刻。20日上午,美团创始人兼CEO王兴终于...

Mr_zebra
17分钟前
0
0
Mysql-mybatis批量插入

话不多说直接上代码吧 <insert id="batchSave" >insert into table_name (`name`,age)values<foreach collection="list" index="index" item="item" open="(" separator="," close=......

落叶清风
22分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部