1. cassandra有一个好的特点是列之间可以按照column key进行排序;这样当rowkey确定以后,对于同一个“行”的范围(range query)查找是很方便的;官方说法,每一个“行”(wide row)可以加入最多20亿个列,虽说如此,据ebay的工程师讲,实践中也没有超过百万个的;同一个row的数据值存在于同一server,不会分开的;

2. 而且column 的模式不是预先固定的,可以随时增加和删除,这样其实不仅是column value,column key我们也可以利用上,作为存放数据的地方;举一个例子,比方说。我每隔五分钟采集一个服务器的负载值,那么可以将表格设计成如下的样子;

|   hour + minute       |                               |

-------------------------+-----------------------+-----------------------+-----------------------

device_name + day    |    load value             |

就是将 服务器名字 和 天 作为rowkey,小时和分钟作为column key,然后服务器的负载值作为column value;

3.  CQL 3.0以后,剪标语句更像是传统关心型数据库的sql语句;比如说 建立一个user表,

CREATE TABLE users (

user_id int PRIMARY KEY,

name text,

company text

);

这里其实primary key,user_id 就是cassandra 在实际存储时候的rowkey;

可以出入一条记录,

INSERT INTO users (user_id, name, company)

VALUES (1, 'john', 'taobao');

4. 从上面来看,这种好像表的schema貌似已经固定了,那原有的dynamic column该怎样实现呢;最简单的方法 用alter table 修改schema,然后添加,但每回都要修改表的结构,繁琐且性能有问题;

其实CQL 3.0 提供了另一种角度解决问题的办法:

我们回过头来想想,之所有会有wide row(也就是动态column),是因为想把一个范围内的数据统一组织,方便查询(因为不用定位多个rowkey)也便于理解;同时当需要dynamic column的时候。从业务角度讲,

其实 rowkey + dynamic columin key 是可以唯一确定的,类似于RDBMS中的primary key;在CQL 3.0 中如果想建立dynamic columin 可以使用下面的建表语句,我们采用第2段落中的例子:

CREATE TABLE device_load (

device_and_day, text

hour_and_minute text,

load_value float,

primary key (device_and_day, hour_and_minute)

);

就是将 数据模型中要作为rowkey 和 dynamic column key的合在一起作为primary key, primary key 中的第一个元素就是rowkey,后面的元素的元素是column key;

这种形式,其实cassandra 的底层存储方式可以描述成:

|   row key         |                             columns                                |
|-------------------+----------------------|----------------------|----------------------|
| | 0000:"load value" | 0005:"load value" | 0010:"load value" |......
| device1+20150701 +----------------------|----------------------|----------------------|
| | 1.0 | 2.0 | 5.5 |......
|-------------------+----------------------|----------------------|----------------------|
| | 0000:"load value" | 0005:"load value" | 0010:"load value" |......
| device2+20150701 +----------------------|----------------------|----------------------|
| | 2.0 | 3.0 | 10.0 |......
|-------------------+----------------------|----------------------|----------------------|

这种情况下,当rowkey确定的时候,仍然可以对column key进行范围查询;用法如:

select load_value where device_and_day = 'device1+20150701' and hour_and_minute >= '0000' and hour_and_minute <= '1200';

5. cassandra的查询方式可以用法,就是先确定rowkey,然后再在同一行中进行范围查找;rowkey不支持直接的范围查找,只支持 = 和 in,如果要用rowkey进行范围查找需要使用token 函数;

同时,除了rowkey外,字段也不支持直接的= 查询操作, 需建立二级索引后才能支持,cassandra的索引不是Btree之类的索引,不支持范围查询,类似于hash索引;cassandra的二级索引猜测是在每一个sstable内实现的,所以不能实现的全局的查询;

cassandra CQL 3.0 怎样实现 dynamic column;的更多相关文章

  1. NoSQL Manager for Cassandra 3.2.0.1 带Key

    NoSQL Manager for Cassandra 3.2.0.1 是一个Windows平台下Cassandra 数据库的高级管理工具.请低调使用. NoSQLManagerforCassandr ...

  2. cassandra CQL 常用操作

    1. CQL客户端链接 bin/cqlsh ip username password 2. (1)建立keyspace语句,keyspace类似于 mysql 中的数据库,一个数据库中可以有很多表: ...

  3. C# 4.0 新特性-dynamic 【转】

    前段时间看过一些关于dynamic这个C#4中的新特性,看到有些朋友认为dynamic的弊大于利,如无法使用编译器智能提示,无法在编译时做静态类型检查,性能差等等.因此在这篇文章中我将就这些问题来对d ...

  4. C# 4.0 新特性dynamic、可选参数、命名参数等

    1.dynamic ExpandoObject熟悉js的朋友都知道js可以这么写 :   1 var t = new Object(); 2 t.Abc = ‘something’; 3 t.Valu ...

  5. C#4.0中的dynamic关键字和ExpandoObject对象

    dynamic最大的特点我想莫过于在它的类型在运行时才确定,这也是它与往静态类型关键字的最大区别.如果你在你的代码操作中用到了dynamic关键字去定义一个变量时,那么这个变量在编译的时候编译器不会对 ...

  6. Cassandra Vnodes在Cassandra 2.0-4.0中的演进

    Vnodes简短历史 Vnodes又叫Virtual Nodes.是Cassandra在1.2版本里引入的功能,已经在生产环境中使用了近8年了.从2.0版本开始,因为默认配置里num_tokens一般 ...

  7. C# 4.0 新特性dynamic (待学习)

    随便翻看了一下dynamic,在网上拷贝了一个例子,先贴出来等有空了再慢慢消化 static void Main(string[] args) { dynamic d = new MyDynamicO ...

  8. Apache Cassandra 4.0新特性介绍

    引言 大家好,我是蔡一凡,是Cassandra的贡献者之一.(虽然我不便透露我的公司名称),但目前我们公司Cassandra的部署是全世界最大的之一,Cassandra在我们公司也有很多的应用. Ca ...

  9. Oracle 12.1.0.2 New Feature翻译学习【In-Memory column store内存列存储】【原创】

    翻译没有追求信达雅,不是为了学英语翻译,是为了快速了解新特性,如有语义理解错误可以指正.欢迎加微信12735770或QQ12735770探讨oracle技术问题:) In-Memory Column ...

随机推荐

  1. 为什么要在html和body加上“height:100%;”

    元素中有内容的时候div才能被撑起来所以我给div加了背景但是也不显示,就是因为没有内容,这个时候的解决办法就是 html,body{ height:100%; }

  2. Linux sticky bit 目录权限 rwt权限

    [linux权限分为 user group others三组] 今天看到有个目录的权限是rwxrwxrwt 很惊讶这个t是什么,怎么不是x或者-呢?搜了下发现: 这个t代表是所谓的sticky bit ...

  3. Maven学习(四)-- 生命周期和插件

    标签(空格分隔): 学习笔记 Maven生命周期是抽象的,不做任何实际的工作,在Maven的设计中,实际的任务都交由插件来完成. 每个构件步骤都可以绑定一个或者多个插件行为,而且Maven为大多数构建 ...

  4. 特征的转换规则 Transfer Routione

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  5. springMVC简单示例

    1.新建web工程 2.引入springframework架包 3.配置文件 web.xml <?xml version="1.0" encoding="UTF-8 ...

  6. 《BI那点儿事》数据流转换——导入列、导出列

    导入列: 导入列例子现在来做一个例子:创建路径D:\Pictures随便在路径D:\Pictures中粘贴4个比较小的图像文件命名为01.png.02.png.03.png.04.png在路径D:\P ...

  7. ie兼容问题整理

    1.连续发请求问题 *  jquery(document).ready(function(){}) *  连续发请求ie8出问题,被拦截问题,url后边加时间戳    *  例  url : url+ ...

  8. 项目忽然出现 The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path 解决方法

    0.环境: 新装win8.1系统,Tomcat配置无误. 1.错误: 项目中某一.jps页面忽然出现错误,鼠标点上去为:The superclass "javax.servlet.http. ...

  9. Design pattern---观察者模式

    观察者模式:发布/订阅模式,当某对象(被观察者)状态发生改变时所有订阅该对象的观察者对象(观察者)都将更新自己 成员(4种): 1.抽象被观察者:将所有的观察者对象的引用存入一个集合,并且定义了添加 ...

  10. Evolutionary Computing: 1. Introduction

    Outline 什么是进化算法 能够解决什么样的问题 进化算法的重要组成部分 八皇后问题(实例) 1. 什么是进化算法 遗传算法(GA)是模拟生物进化过程的计算模型,是自然遗传学与计算机科学相互结合的 ...