文档章节

走进cassandra之二 数据模型

chenkangyao
 chenkangyao
发布于 2016/07/19 13:26
字数 1025
阅读 18
收藏 0
点赞 0
评论 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
粉丝 4
博文 29
码字总数 36163
作品 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
Cassandra数据模型设计最佳实践

本文是Cassandra数据模型设计第一篇(全两篇),该系列文章包含了eBay使用Cassandra数据模型设计的一些实践。其中一些最佳实践我们是通过社区学到的,有些对我们来说也是新知识,还有一些仍然...

laigous
2013/10/10
0
0
Cassandra数据模型设计

本文是Cassandra数据模型设计第一篇(全两篇),该系列文章包含了eBay使用Cassandra数据模型设计的一些实践。其中一些最佳实践我们是通过社区学到的,有些对我们来说也是新知识,还有一些仍然...

Will--wang
2015/05/26
0
0
如何为微服务选择数据库

原文:How to choose a database for your microservices 作者:Jeff Carpenter, InfoWorld 译者:Jackyrong 你的微服务架构需要多种数据模型。你是应该选择混合持久化呢还是多模型数据库? ...

dev_csdn
2017/11/14
0
0
走进cassandra之三 分区器

从这节开始,都是高年级知识了,需要一点分布式的基础知识。 以前的文章说到, james(公司大佬)把任务分给了几拨人来做,那么怎么个分法呢? 什么任务交给什么人呢? James估计是有自己的一...

chenkangyao
2016/07/19
6
0
Cassandra v2.1 发布,分布式K/V存储系统

Apache™ Cassandra™ v2.1 发布,此版本提升了 "NoSQL" 分布式大数据库的性能,改进了分析功能和易用性。此版本最大的改进是引入 CQL3 元组和用户定义类型 (UDT) 作为为新数据模型和使用模式...

oschina
2014/09/12
3.6K
7

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Crontab作业时间设置

今天,遇到这么一个题目,周一到周五的9:00-16:59之间,每隔两分钟将某个命令运行一次。给的答案是: */2 9-16 * * 1-5 /usr/sbin/somecommand dosomething 乍一看,这个答案不对,应...

大别阿郎
10分钟前
0
0
ES17-JAVA API文档管理

1.保存文档 可以通过json工具把java对象转换成json字符串进行保存,也可以通过内置的帮助类直接构建json格式 /** * 获取客户端 * * @return */public static TransportClie...

贾峰uk
11分钟前
0
0
Python代码规范和命名规范

前言 Python 学习之旅,先来看看 Python 的代码规范,让自己先有个意识,而且在往后的学习中慢慢养成习惯 一、简明概述 1、编码 如无特殊情况, 文件一律使用 UTF-8 编码 如无特殊情况, 文件头...

blackfoxya
14分钟前
0
0
联动滑动之一:NestScrollChild和NestedScrollingParent

NestScrollChild和NestedScrollingParent 吐槽一下开源中国竟然标题字数有限制 由于项目中使用了CoordinateLayout来解决联动以及实现炫酷的UI效果,那么必须就要研究一波源码了,毕竟知其然知...

JerryLin123
31分钟前
1
0
cloudera spark2.2 读写hbase

cloudera spark2.2 读写hbase 例子 host = 'bigdata-03,bigdata-05,bigdata-04'conf = { "hbase.zookeeper.quorum": host, "hbase.mapreduce.inputtable": "student1"}k......

osenlin
35分钟前
0
0
数据库规范化

转载自 一个小时学会MySQL数据库 地址:http://www.cnblogs.com/best/p/6517755.html 截取其中 1.4 部分 用于自己学习使用 感谢作者:张果 1.4、数据库规范化 经过一系列的步骤,我们现在终于...

十万猛虎下画山
36分钟前
0
0
ios逆向之工具篇

Reveal:查看任意app的UI结构 注:1.不越狱的手机,可以用Reveal来查看自己app的UI结构,不能查看其它app的结构。 2.越狱手机上可以查看任意app的UI结构。 IDA:反编译工具 从App Store下载的...

HeroHY
37分钟前
0
0
EOS区块链平台智能合约示例HelloWorld

我们将介绍一个使用EOS智能合约构建hello World的例子。 一般环境设置通过上一篇文章已经说明,这方面的问题大家可以看本博客上一篇文章,本文引用了官方EOS在Git上的示例。 运行nodeos 要通...

笔阁
39分钟前
1
0
Scrapy爬虫框架简单解析 

scrapy框架解析 Scrapy框架大致包括以下几个组件:Scrapy Engine、Spiders、Scheduler、Item Pipeline、Downloader; 组件 Scrapy Engine 这是框架的核心,负责控制数据流在整个系统的各个组...

zhujun2017
39分钟前
0
0
Vue之ref详解与实例

尽管存在 prop 和事件,有的时候你仍可能需要在 JavaScript 里直接访问一个子组件。为了达到这个目的,你可以通过 ref 特性为这个子组件赋予一个 ID 引用。ref可以加在父级组件上也可以加在子...

tianyawhl
48分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部