Cassandra1.2文档学习(17)—— CQL数据模型(上)
参考文档:http://www.datastax.com/documentation/cql/3.0/webhelp/index.html#cql/ddl/ddl_anatomy_table_c.html#concept_ds_qqw_1dy_zj
在一个层次上来说,Cassandra中的表、行和列可以认为和关系型数据库是相同的。在SQL和CQL中你可以定义表(包含已经定义好的行和与之相关的数据类型),你可以创建索引去增加查询效率。
然而,一个重要的不同是因为Cassandra是被设计来分组成为一个分布式的系统,它强调使用逆规范化代替规范化和连接,它提供了了工具(如集合)去支持。
一、例子——音乐服务
这是一个关于音乐服务的例子,需要一张音乐表songs,包含标题、唱片集、艺术家列以及外加的名为数据(包含真实音频文件的)的列。这张表使用一个UUID座位主键。
CREATE TABLE songs (
id uuid PRIMARY KEY,
title text,
album text,
artist text,
data blob
);
在关系型数据库中,你应当创立一个播放列表playlists通过一个外键和音乐表相关联。但是在Cassandra中,你反规范化数据。为了表示播放列表的数据,你可以创建一张如下的表:
CREATE TABLE playlists (
id uuid,
song_order int,
song_id uuid,
title text,
album text,
artist text,
PRIMARY KEY (id, song_order )
);
在playlists表中,id和song_order的组合可以唯一标识一行。你可以超过一行的数据包含相同的id只要song_order不同即可。
提示: UUID可以方便在多个机器中排序或者自动增加。简单地说,int类型的song_order就是一个例子。
当插入样本数据到播放列表后,选择所有数据的输出会像以下:
SELECT * FROM playlists;
下面的例子演示如何创建一个查询,使用艺术家作为过滤器。首先,添加更多的数据到播放列表中来让事情变得有趣:
INSERT INTO playlists (id, song_order, song_id, title, artist, album)
VALUES (62c36092-82a1-3a00-93d1-46196ee77204, 4,
7db1a490-5878-11e2-bcfd-0800200c9a66,
'Ojo Rojo', 'Fu Manchu', 'No One Rides for Free');
通过之前给出的模式,一个以艺术家作为过滤的查询会要求对整个播放列表数据集进行一个顺序有序的扫描。Cassandra会拒绝这样的扫描,如果你首先在artist创建了一个索引,Cassandra会高效的给出记录。
CREATE INDEX ON playlists(artist );
现在,你可以查询出Fu Manchu的歌,例如:
SELECT * FROM playlists WHERE artist = 'Fu Manchu';
输出结果如下:
二、复合键和聚类
一个聚合主键包含了分区键(决定数据存储在哪一个节点上),一个或多个列决定了聚类。Cassandra使用复合主键的第一个键作为分区键。例如,在playlists表中,id是分区键。剩余的其他列,或者说是除了主键中非分区键决定了聚类。在playlists表中, song_order就是聚类键。每个分区上的数据按照聚类键聚集。在一个物理节点中,当行的分区键中存储的顺序基于聚类的列,检索的行是非常有效的。例如,因为id在playlists表是分区键,播放列表中所有的歌曲按照song_order列聚集。
在一张表上的行上插入、更新和删除操作分享相同的分区键原子执行并且是隔离的。
你可以通过一个书序的查询去获得播放列表的数据:
SELECT * FROM playlists WHERE id = 62c36092-82a1-3a00-93d1-46196ee77204
ORDER BY song_order DESC LIMIT 50;
输出如下:
Cassandra通过分区键在节点上存储数据。如果你有很多数据再分去上,希望能够将数据分散在多个节点,可以使用复合分区键。
Cassandra1.2文档学习(17)—— CQL数据模型(上)的更多相关文章
- Cassandra1.2文档学习解读计划——为自己鼓劲
最近想深入研究一下Cassandra,而Cassandra没有中文文档,仅有的一些参考书都是0.7/0.6版本的.因此有个计划,一边学习文档(地址:http://www.datastax.com/do ...
- Cassandra1.2文档学习(18)—— CQL数据模型(下)
三.集合列 CQL 3 引入了一下集合类型: •set •list •map 在关系型数据库中,允许用户拥有多个email地址,你可以创建一个email_addresses表与users表存在一个多对 ...
- Cassandra1.2文档学习(19)—— CQL索引
参考文档:http://www.datastax.com/documentation/cql/3.0/webhelp/index.html#cql/ddl/ddl_primary_index_c.ht ...
- Cassandra1.2文档学习(15)—— 配置数据一致性
参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_config ...
- Cassandra1.2文档学习(1)——Cassandra基本说明
参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/architecture/a ...
- Cassandra1.2文档学习(16)—— 模式的变化
参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_schema ...
- Cassandra1.2文档学习(13)—— 数据读取
参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_about_ ...
- Cassandra1.2文档学习(4)——分区器
参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/architecture/a ...
- Cassandra1.2文档学习(14)—— 事务和并发控制
参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_about_ ...
随机推荐
- Cache和Buffer的区别
一.研究数据库的人这样理解:http://wenku.baidu.com/view/32b8b13e376baf1ffc4fad7e.html Cache和Buffer是两个不同的概念,简单的说,Ca ...
- fpm 配置详解
约定几个目录 /usr/local/php/sbin/php-fpm /usr/local/php/etc/php-fpm.conf /usr/local/php/etc/php.ini 一,php- ...
- Steps to disable DRLs with GM Tech2 scanner
It is possible to get daytime running time disabled manually. But the problem can be easily settled ...
- css笔记10:多个id选择器/类选择器包含相同部分问题的探讨
有些时候,我们可以将多个class选择器或者id选择器,html选择器的共同部分提取出来,写在一起,这样的好处是是可以简化css文件 1.首先我们先看一段代码.css,如下: @charset &qu ...
- 前端必会html知识整理
1.浏览器内核: 1.ie:trident(三叉戟)内核 2.firefox:gecko(壁虎)内核 3.safari:webkit(浏览器核心)内核 ...
- CSS skills: 2) change hover dynamically by js
//命名空间 var base = {}; //class base.gClass={}; //鼠标hover交互方法: 注册对象的hover的class特性以及mouseMoveIn,mouseMo ...
- ORM之PetaPoco错误--VS中NUGet程序包管理安装PetaPoco
一般在Vs中使用PetaPoco的时候都是使用NuGet程序包管理来安装PetaPoco的,如果你在安装PetaPoco前设置了ConnectionString,那么PetaPoco中的T4模板会自动 ...
- javaweb学习总结十八(软件密码学、配置tomcat的https连接器以及tomcat管理平台)
一:软件密码学 1:对称加密 对称加密是最快速.最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key).对称加密有很多种算法,由于它效 ...
- javaweb学习总结九(xml解析以及调整JVM内存大小)
一:解析XML文件的两种方式 1:dom,document object model,文档对象模型. 2:sax,simple API for XML. 3:比较dom和sax解析XML文件的优缺点 ...
- [改善Java代码]注意Class类的特殊性
Java语言是先把Java源文件编译成后缀为class的字节码文件,然后再通过ClassLoader机制把这些类文件加载到内存中,最后生成实例执行的,这是Java处理的基本机制,但加载到内存中的数据是 ...