文档章节

走进cassandra之二 数据模型

chenkangyao
 chenkangyao
发布于 2016/07/19 13:26
字数 1025
阅读 28
收藏 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
粉丝 6
博文 44
码字总数 75969
作品 0
广州
高级程序员
私信 提问
走进cassandra 之一 CAP和分布式

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

chenkangyao
2016/07/19
21
0
走进cassandra之六 数据读写删

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

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

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

黄平俊
2010/07/16
2.8K
0
走进cassandra之三 分区器

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

chenkangyao
2016/07/19
6
0
考虑 Apache Cassandra 数据库

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

ihaolin
2014/08/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

面向对象继承

第1章 面向对象 1.1 知识回顾 1.Java中的数据类型 2.引用数据类型String中的方法 3.IO流_读写文件 1.2 面向对象概念回顾 什么叫面向对象编程?有人是这么理解的 也有人说不对,面向对象编程是你...

stars永恒
29分钟前
0
0
Java-深入HashMap原理及内部存储结构

本文将通过如下简单的代码来分析HashMap的内部数据结构的变化过程。 public static void main(String[] args) { Map<String, String> map = new HashMap<>(); for (int i = 0; i ......

小刀爱编程
45分钟前
1
0
高并发和分布式中的幂等处理

概念 抽象概念 幂等(idempotent,idempotentce)是一个数学与计算机概念,常见于抽象代数中。 在计算机概念中,就是针对一个操作,不管做多少次,产生效果或返回的结果都是一样的。 场景距...

细节探索者
45分钟前
0
0
2019年1月份最新阿里内推Java后端面试题

阿里一面题目: osi七层网络模型,五层网络模型,每次层分别有哪些协议死锁产生的条件, 以及如何避免死锁,银行家算法,产生死锁后如何解决如何判断链表有环虚拟机类加载机制,双亲委派模型...

别打我会飞
今天
2
0
MIT 6.828 main.c文件分析

#include <inc/x86.h>#include <inc/elf.h> /*这是一个简单粗略的boot loader,它唯一的工作就是从硬盘的第一个扇区启动格式为ELF的内核镜像硬盘布局这个程序(包括boot.S和mai...

FeanLau
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部