zoukankan      html  css  js  c++  java
  • Cassandra 学习三 数据模型

       Cassandra如何存储数据的概述。

      集群(Cluster)

      ·Cassandra数据库分布在几个一起操作的机器上。最外层容器被称为集群。对于故障处理,每个节点包含一个副本,如果发生故障,副本将负责。Cassandra按照环形格式将节点排列在集群中,并为它们分配数据。

           键空间 (Keyspace)(相当于关系型数据库的DataBase)

      键空间是Cassandra中数据的最外层容器。Cassandra中的一个键空间的基本属性是 - 

    • 复制因子 - 它是集群中将接收相同数据副本的计算机数。

    • 副本放置策略 - 它只是把副本放置策略。我们有简单策略(机架感知策略),旧网络拓扑策略(机架感知策略)和网络拓扑策略(数据中心共享策略)等策略。

    • 列族(类似于关系型数据库中的表(Table) - 键空间是一个或多个列族的列表的容器。列族又是一个行集合的容器。每行包含有序列。列族表示数据的结构。每个键空间至少有一个,通常是许多列族。

    创建键空间的语法如下 -

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


    Cassandra列族示意如下:整个是一个列族,包含了两行,两行的列可以不一样。(类比关系型数据库,相当于整个表有两条记录Row key1和Row key2)

    下面的示例可以让我们更好地理解Cassandra的数据存储:

    Musician:                           ColumnFamily 1 (列族)
        bootsy:                         RowKey 
            email: bootsy@pfunk.com,    ColumnName:Value 
            instrument: bass            ColumnName:Value 
        george:                         RowKey 
            email: george@pfunk.com     ColumnName:Value
    Band:                               ColumnFamily 2 
        george:                         RowKey 
            pfunk: 1968-2010            ColumnName:Value

    另外,Cassandra还有一种可在列之间建立关联的超级列(Super Column),你可以往超级列中添加子列。

    如果用JSON表示,一组存放在列族中的数据看起来是这样的:

    Hotel {
        key: AZC_043 { name: Cambria Suites Hayden, phone: 480-444-4444,address: 400 N. Hayden Rd., city: Scottsdale, state: AZ, zip: 85255} 
        key: AZS_011 { name: Clarion Scottsdale Peak, phone: 480-333-3333,address: 3000 N. Scottsdale Rd, city: Scottsdale, state: AZ, zip: 85255} 
        key: CAS_021 { name: W Hotel, phone: 415-222-2222,address: 181 3rd Street, city: San Francisco, state: CA, zip: 94103} 
        key: NYN_042 { name: Waldorf Hotel, phone: 212-555-5555,address: 301 Park Ave, city: New York, state: NY, zip: 10019} }

    使用Cassandra创建键空间Hotelier,列族为Hotel,并查询行键(Row Key)为“NYN_042”的结果,

    cassandra> get Hotelier.Hotel['NYN_042'] 
    => (column=zip, value=10019, timestamp=3894166157031651)
    => (column=state, value=NY, timestamp=3894166157031651)
    => (column=phone, value=212-555-5555, timestamp=3894166157031651)
    => (column=name, value=The Waldorf=Astoria, timestamp=3894166157031651)
    => (column=city, value=New York, timestamp=3894166157031651)

    列(Column)
    Cassandra的列是一组键值对(和关系型数据库中的列不一样)

        使用JSON描述的列结构:

    {
        "name": "email",
        "value: "me@example.com", 
        "timestamp": 1274654183103300
    }

        超级列(Super Column)的结构:(键值对的嵌套)

    
    

    最后让我们来巩固一下Cassandra和关系型数据库的区别吧:

    
    
    • 没有查询语言:No SQL (Structured Query Language);

    • 没有外键约束:关系型数据库的最重要特征;

    • 双重簇索引:在关系型数据库中,每个表只能指定一个簇索引,其它的索引查询都会导致全表扫描,但在Cassandra中,我们可以有第二级的簇索引;

    • 排序是在设计时决策:cassandra支持order by, 排序是需要设计时考虑,而不是像在关系型数据库查询时刻使用Order By;

    • 无数据结构约定:这是Cassandra最大的优势,在关系型数据库中,我们设计数据库结构时总是慎之又慎,但在Cassandra中不需要预先约定数据结构。

     
  • 相关阅读:
    jQuery学习笔记3--网页字体变大变小
    jQuery学习笔记2--表格内容筛选
    jQuery学习笔记1--表格展开关系
    (转)PhoneGap开发环境搭建
    对HTML+CSS+JavaScript的个人理解
    (转)经典收藏 50个jQuery Mobile开发技巧集萃
    (转)phoneGap-Android开发环境搭建
    (转)面向移动设备的HTML5开发框架
    (转)前端攻略系列(二)
    (转)常见浏览器兼容性问题与解决技巧
  • 原文地址:https://www.cnblogs.com/liufei1983/p/9363150.html
Copyright © 2011-2022 走看看