NoSQL一般是反范式的,比如提倡数据冗余,使得不至于写出非常复杂的SQL语句。

Cassandra之中一共包含下面5中Key:

  • Primary Key: 用来获取某一行的数据,可以是一列或多列

                PRIMARY KEY(key_part_one, key_part_two)

     key_part_one -  partition key

          key_part_two - clustering key

PRIMARY KEY((k_part_one,k_part_two), k_clust_one, k_clust_two, k_clust_three)

        复合的partition key, 复合的clustering key

  • Partition Key: (用来进行分区的)Cassandra会对partition key做一个hash计算,并自己决定将记录放到哪个NODE。  partition key 可以是单一主键,也可以是复合主键。但是主键不能重复。

 Cassandra会给每一行数据一个timestamp,如果有多行数据,Cassandra会取时间最新的数据返回

  • Composite Key:
  • Compound Key:
  • Clustering Key:   主要用于进行Range Query(范围查找). 并且使用的时候需要按照建表顺序进行提供信息。
-- 创建表
-- 注意state 这个field
CREATE TABLE users (
mainland text,
state text,
uid int,
name text,
zip int,
PRIMARY KEY ((mainland), state, uid)
) -- 插入一些值
insert into users (mainland, state, uid, name, zip) VALUES ( 'northamerica', 'washington', , 'john', );
insert into users (mainland, state, uid, name, zip) VALUES ( 'northamerica', 'texas', , 'lukas', );
insert into users (mainland, state, uid, name, zip) VALUES ( 'northamerica', 'delaware', , 'henry', );
insert into users (mainland, state, uid, name, zip) VALUES ( 'northamerica', 'delaware', , 'dawson', );
insert into users (mainland, state, uid, name, zip) VALUES ( 'centraleurope', 'italy', , 'fabio', );
insert into users (mainland, state, uid, name, zip) VALUES ( 'southamerica', 'argentina', , 'alex', );

有效的查询:

  select * from users where mainland = 'northamerica' and state > 'ca' and state < 'ny';

(mainland), state, uid 构成联合主键,其中mainland是partition key,是hash实现的,所以用=;而state 和UID是clustering key, 是sortedMap实现的可以用于做范                围查找。 原理参考:

Map<RowKey, SortedMap<ColumnKey, ColumnValue>>

无效的查询:

-- 没有提供stat 信息
select * from users where mainland = 'northamerica' and uid < ;

Cassandra 整体数据可以理解成一个巨大的嵌套的Map。 只能按顺序一层一层的深入,不能跳过中间某一层~

create table stackoverflow (
key_part_one text,
key_part_two int,
data text,
PRIMARY KEY(key_part_one, key_part_two)
); select * from stackoverflow where key_part_one = ‘ronaldo’; // 这个正确,没有问题 select * from stackoverflow where key_part_two = ALLOW FILTERING // 一定要有allow filterring
PRIMARY KEY((col1, col2), col3, col4))
正确的where查询条件: 
  • col1 and col2
  • col1 and col2 and col3
  • col1 and col2 and col3 and col4
无效的where查询条件:
col1 (这样Cassandra无法找到在哪一行)
col1 and col2 and col4
anything that does not contain both col1 and col2

总结:

  Cassandra之中的存储,是2-level nested Map(2级嵌套map)
  Partition Key –> Custering Key –> Data 
 
  partition key: 可以在where中使用  eq and in
  clustering key: 可以在where中使用 < <= = >= > in

Cassandra学习五 使用Key的正确姿势的更多相关文章

  1. 代码走查25条疑问 C# 跳转新的标签页 C#线程处理 .Net 特性 attribute 学习 ----自定义特性 看懂 ,学会 .NET 事件的正确姿势-简单版

    代码走查25条疑问   代码走查(Code Review) 是一个开发人员与架构师集中讨论代码的过程.通过代码走查可以提高代码的 质量,同时减少Bug出现的几率.但是在小公司中并没有代码走查的过程在这 ...

  2. 学习Linux的正确姿势

    学习Linux的正确姿势 端正学习态度1.Linux不等于骇客(or Cracker).当然众所周知很多“黑客工具”都是Linux平台上的,我帮助过很多Linux小白发现他们殊途同归都是朝着类似Air ...

  3. 使用 Python 控制自己的电脑和键盘是一种什么样的体验?python学习的正确姿势

    可能有时候你需要在电脑做一些重复的点击或者提交表单等操作,如果能通过 Python 预先写好相关的操作指令,让它帮你操作,然后你自己爱干嘛干嘛去,有点 “按键精灵” 的意思,是不是感觉有点爽呢? 那么 ...

  4. Golang错误和异常处理的正确姿势

    Golang错误和异常处理的正确姿势 错误和异常是两个不同的概念,非常容易混淆.很多程序员习惯将一切非正常情况都看做错误,而不区分错误和异常,即使程序中可能有异常抛出,也将异常及时捕获并转换成错误.从 ...

  5. 使用 win10 的正确姿势 (第二版)

    文章为本人原创,转载请注明出处,谢谢. 17年9月初,写了第一篇<使用 win10 的正确姿势>,而现在半年多过去,文章更新了一些,主要是桌面的变化. 一. 重新定义桌面 我的桌面: 将桌 ...

  6. Redis实现分布式锁的正确姿势

    分布式锁一般有三种实现方式:1. 数据库乐观锁:2. 基于Redis的分布式锁:3. 基于ZooKeeper的分布式锁.本篇博客将介绍第二种方式,基于Redis实现分布式锁.虽然网上已经有各种介绍Re ...

  7. GitHub 热点速览 Vol.18:刷 LeetCode 的正确姿势

    作者:HelloGitHub-小鱼干 摘要:找对路子,事半功倍,正如本周 GitHub Trending #刷 LeetCode# 主题想表达的那般,正确的学习姿势方能让人走得更远,走进大厂

  8. 玩转 Ceph 的正确姿势

    玩转 Ceph 的正确姿势 本文先介绍 Ceph, 然后会聊到一些正确使用 Ceph 的姿势:在集群规模小的时候,Ceph 怎么玩都没问题:但集群大了(到PB级别),这些准则可是保证集群健康运行的不二 ...

  9. 程序员节应该写博客之.NET下使用HTTP请求的正确姿势

    程序员节应该写博客之.NET下使用HTTP请求的正确姿势 一.前言 去年9月份的时候我看到过外国朋友关于.NET Framework下HttpClient缺陷的分析后对HttpClient有了一定的了 ...

随机推荐

  1. java reflect反射---Java高级开发必须懂的

    理解反射对学习Java框架有很大的帮助,如Spring框架的核心就是使用Java反射实现的,而且对做一些Java底层的操作会很有帮助.  一.Class类的使用         1.万事万物皆对象,( ...

  2. spring mvc:拦截器不拦截静态资源的三种处理方式

    方案一.拦截器中增加针对静态资源不进行过滤(涉及spring-mvc.xml) <mvc:resources location="/" mapping="/**/* ...

  3. MVVM3

    MVVM设计模式 2010-09-19 23:59:18|  分类: MVVM |  标签:mvvm  silverlight4  mvc  mvp  command  |举报|字号 订阅     一 ...

  4. 解决:TypeError: object() takes no parameters

    运行测试用例时发现以下报错 Ran 1 test in 22.505s FAILED (errors=1) Error Traceback (most recent call last): File ...

  5. MySQL备份与恢复实战案例及生产方案

    按天备份 按周备份 mysql的mysqldump备份什么时候能派上用场1,迁移或者升级数据库时2,增加从库的时候3,如果因为硬件或特殊情况,主库或者从库宕机,主从可以互相切换,无需备份4,人为的DD ...

  6. 【转】Symstore 详细使用

    SymStore (symstore.exe) 是用于创建符号存储的工具.它被包含在Windows调试工具包中. SymStore按照某种格式存储符号,使得调试器可以通过时间戳.映像大小(对于.dbg ...

  7. Swagger实践和总结

    Swagger学习和实践 最近安装并使用了一下Swagger-ui.Swagger-editor和Swagger-codegen,感觉还不错. Swagger 是一个规范和完整的框架,用于生成.描述. ...

  8. cannot be read or is not a valid ZIP file

    在eclipse下创建 maven 项目,运行 flowable 6.1.2 配置maven之后,下载相应的依赖库. 发现报错: Archive for required library: '/Use ...

  9. GeoWebCache的配置与使用

    最近在做一个开源GIS的demo的工作,工作中涉及到了地图瓦片,选取的开发环境是geoserver+openlayers,那么地图瓦片自然而然也就使用geowebcache,geowebcache就相 ...

  10. 预热篇- 总结Delphi Xe4 做App的的可行性分析. ios平台的问题还需要自行学习

    首先澄清一个问题, 很多同学其实是误会了, 以为只要搞定了Delphi 就能很快写快餐程序了.  ios 本身的知识还是需要一些的, 并没有什么捷径可以走. 但如果一个团队有分工协作的话, Delph ...