Cassandra属于NoSQL数据库,NoSQL和传统关系型数据库不同,NOSQL偏好数据冗余,因为NoSQL一般无法做表关联查询。

(1) keySpace

基本上可以将Keyspace 理解成MySQL 之中的Database. 只不过Cassandra的”database” 包含了更多的内容:

  • Replication Factor : 复制因数。 表示一份数据在一个DC 之中包含几份。常用奇数~ 比如我们项目组设置的replication_factor=3
  • Replica placement strategy : 复制策略。 默认的是SimpleStrategy. 如果是单机架、单数据中心的模式,保持使用SimpleStrtegy即可。

下面是一个简单的通过CQL 语句创建一个新的keyspace的例子:

MySQL

1
2
CREATE KEYSPACE Keyspace name
WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3};

(2) Column Family/Column
         可以理解Column Family为MySQL的Table, 将Column 理解为MySQL之中的一条记录。所谓Column就是: A tuple with name, value and timestamp。之所以称之为Column Family, 是因为Cassandra 是一种列式数据库,因此将一组Column称为Column Family。.
      比较有意思的是,Column 包含了Timestamp。 其作用主要是当有新数据覆盖的时候,不是直接将老数据从存储介质上删除,而是直接写入新的数据。 当需要查询的时候,通过key或者某种方式找到的所有Column,并去找Timestamp 最新的Column。 老数据会在一段时间之后自行删除。

可以使用下面的一句话概括:

Java

1
Map<RowKey, SortedMap<ColumnKey, ColumnValue>>

首先Map结构,通过key来进行查询速度会非常快。 再加上内嵌的SortedMap, 可以进行顺序查找,速度也很快。 当然,如何快速的生成Key等就是另外一个topic

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


 

(3)Super Column
   已经被淘汰,可以不用关注

(4)Primary key
       Primary key = Partition Key  + [Clustering Key] 

(5)Partition Key
   其实就是指在Primary key 中的第一个列,如果想要用多个列就可以把这的多个列用小括号括起来。
    http://docs.datastax.com/en/cql/3.1/cql/cql_reference/refCompositePk.html 这里有一个例子,说的很清楚。 


参考资料:
1)Data Modeling Concepts,http://docs.datastax.com/en/cql/3.1/cql/ddl/dataModelingApproach.html  
2)Data modeling in 30 seconds  http://docs.datastax.com/en/landing_page/doc/landing_page/dataModeling.html  
3)[Cassandra教程] (四)使用Key的正确姿势,http://www.flyml.net/2016/09/05/cassandra-tutorial-right-way-to-use-key/  

Cassandra的数据模型的理解的更多相关文章

  1. Cassandra的数据模型

    Cassandra的数据模型可以理解为嵌套的Map,在Cassandra中数据类型主要有四种:Column,SuperColumn,ColumnFamily,Keyspace.下面分别介绍这几种类型. ...

  2. Cassandra key说明——Cassandra 整体数据可以理解成一个巨大的嵌套的Map Map<RowKey, SortedMap<ColumnKey, ColumnValue>>

    Cassandra之中一共包含下面5种Key: Primary Key Partition Key Composite Key Compound Key Clustering Key 首先,Prima ...

  3. Cassandra 数据模型

    Cassandra的数据模型类似于关系型数据库的模型,且提供了与SQL语言非常类似的CQL语言进行操作. 但是Cassandra的数据模型类似于多层键值对结构,与关系型数据库存在巨大差别. 本文基于: ...

  4. Cassandra 介绍

    cassandra是一种NoSQL数据库,No是指No Relational.cassandra的数据模型结合了Dynamo的key/value和BigTable  的面向列的特点,主要被设计为存储大 ...

  5. Hbase总结(一)-hbase命令,hbase安装,与Hive的区别,与传统数据库的区别,Hbase数据模型

    Hbase总结(一)-hbase命令 下面我们看看HBase Shell的一些基本操作命令,我列出了几个常用的HBase Shell命令,如下: 名称 命令表达式 创建表 create '表名称', ...

  6. Cassandra 和 Spark 数据处理一窥

    Apache Cassandra 数据库近来引起了很多的兴趣,这主要源于现代云端软件对于可用性及性能方面的要求. 那么,Apache Cassandra 是什么?它是一种为高可用性及线性可扩展性优化的 ...

  7. Cassandra 的数据存储结构——本质是SortedMap<RowKey, SortedMap<ColumnKey, ColumnValue>>

    Cassandra 的数据存储结构 Cassandra 的数据模型是基于列族(Column Family)的四维或五维模型.它借鉴了 Amazon 的 Dynamo 和 Google's BigTab ...

  8. Cassandra学习六 一些知识点

    http://www.flyml.net/2016/09/08/cassandra-tutorial-java-api-example/ Cassandra对查询的支持很弱,只支持主键列及索引列的查询 ...

  9. Cassandra数据建模

    1.  概述 Apache Cassandra将数据存储在表中,每个表都由行和列组成.CQL(Cassandra查询语言)用于查询存储在表中的数据.Apache Cassandra数据模型基于查询并针 ...

随机推荐

  1. abstract class 和 interface 区别

    本文出自与:heipai:tsg666 含有 abstract 修饰符的 class 即为抽象类,abstract 类不能创建的实例对象.含有 abstract 方法的类必须定义为 abstract ...

  2. java多线程快速入门(十一)

    在方法上面加synchonizd用的是this锁 package com.cppdy; class MyThread7 implements Runnable { private Integer ti ...

  3. python全栈开发day22-常用模块二(hashlib、configparse、logging)

    一.昨日内容回顾 1.钻石继承 #新式类,本身或父类显示继承object #找名字的时候是广度优先顺序 #有mro方法,super方法, # super并不是单纯的找父类,和mro顺序是完全对应的 # ...

  4. ACM题目中的时间限制与内存限制 复杂度的估计

    运行时限为1s,这很常见,对于该时限,我们设计的算法复杂度不能超过百万级别,即不要超过一千万.假如你的算法时间复杂度为O(n^2),则n不应该大于3000 空间限制是32MB,即你程序中申请的内存不能 ...

  5. C++雾中风景番外篇3:GDB与Valgrind ,调试代码内存的工具

    写 C++的同学想必有太多和内存打交道的血泪经验了,常常被 C++的内存问题搅的焦头烂额.(写 core 的经验了)有很多同学一见到 core 就两眼一抹黑,不知所措了.笔者 入"坑&quo ...

  6. Java 复习

    基础: JAVA基础扎实,理解io.多线程.集合等基础框架,对JVM原理有一定的了解: 熟读Java SDK源码: 框架: 对Spring,ibatis,struts等开源框架熟悉:

  7. Windows环境下 PHP调用R脚本

    写在前面的: 由于是windows平台实现的,只要保证脚本命令能在cmd控制台运行,则可以在php中利用system()实现. 注意事项: (1).保证system的路径中无汉字和空格 !!  (亲身 ...

  8. 一些日常工具集合(C++代码片段)

    一些日常工具集合(C++代码片段) ——工欲善其事,必先利其器 尽管不会松松松,但是至少维持一个比较小的常数还是比较好的 在此之前依然要保证算法的正确性以及代码的可写性 本文依然会持久更新,因为一次写 ...

  9. 码云,git使用 教程-便签

    码云,git使用 教程-便签 Code cloud, git use tutorial - note 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq.c ...

  10. 关于Android studio团队协同开发连接到已有项目

    当团队中已经有人创建好项目的时候,队员想把自己的as与码云上项目相互连接时,有两种方法: 方法一: 进入as初始页面: 分别点击:check out project from Version cont ...