zoukankan      html  css  js  c++  java
  • Cassandra学习六 一些知识点

    http://www.flyml.net/2016/09/08/cassandra-tutorial-java-api-example/

    • Cassandra对查询的支持很弱,只支持主键列及索引列的查询,而且主键列还有各种限制,不过查询弱归弱,但它还是支持索引和排序的。
    • cassandra:

        索引列 支持 like
        只有主键支持 group by
        不支持 or, 但是 支持 and

    select * from books where subject like 'Pro%'


    CREATE CUSTOM INDEX employee_firstname_idx ON
    books (subject) USING
    'org.apache.cassandra.index.sasi.SASIIndex' WITH
    OPTIONS = {'analyzer_class': 'org.apache.cassandra.index.sasi.analyzer.StandardAnalyzer', 'case_sensitive': 'false'};

    Partition Key :决定了数据在Cassandra各个节点的是如何分区的。
    Clustering Key : 用于在各个分区内的排序。
    Primary Key : 主键,决定数据行的唯一性
    Composite Key :只是一个多字段组合的概念

    在实际的使用过程中,cassandra的数据查询有很多不同于关系型数据库的地方,
    如果你总是用关系型数据库的思维去考虑cassandra的问题的话,往往会掉进坑里。
    cassandra的CQL写法并没有像你想象中的随心所欲,因为究其本质,
    它的数据集是以key-value的形式存放,所以在查询时会有很多限制。

    总结:

    • cassandra的查询必须在主键列上,或者查询的字段有二级索引。
    • 对于(A,B)形式的主键,假如查询条件不带分区键A,则查询语句需要开启allow filtering。
    • 对于((A,B),C,D)形式的主键,可以认为是第2点的变种。A,B必须同时出现在查询条件中(A和B合在一起决定分区),且C,D不可以跳跃,像where A and B and D的查询是非法的。
    • 以上查询不考虑范围查询的情况。
    • 所以因为第三点的关系,parition key字段过多会对以后的查询造成很大困扰,在建表的时候首先一定要考虑好数据模型,以免后期掉坑。
    • 此外假如与spark集成的话,可以在一定程度上规避掉上面非法查询的问题,通过sparksql可以近似实现关系型数据库sql的查询,而不用考虑查询中一定要带上所有partition key字段

    PRIMARY KEY(key_part_one, key_part_two)
    PRIMARY KEY((k_part_one,k_part_two), k_clust_one, k_clust_two, k_clust_three)
    Partition Key : Cassandra会对partition key 做一个hash计算,并自己决定将这一条记录放在哪个node;
    Clustering Key : 主要用于进行Range Query. 并且使用的时候需要按照建表顺序进行提供信息;
    Cassandra 整体数据可以理解成一个巨大的嵌套的Map。 只能按顺序一层一层的深入,不能跳过中间某一层~

    如果只根据key_part_two 来查询呢?
    A: 默认不允许: 会触发数据过滤(需要扫描的数据比较多)
    如果一定要执行:在cql 之中增加ALLOW FILTERING
    select * from stackoverflow where key_part_two = 9 ALLOW FILTERING;


    Cassandra之中的存储,是2-level nested Map
    Partition Key –> Custering Key –> Data
    partition key: eq and in
    clustering key: < <= = >= > in

    二级索引的原理
    Cassandra之中的索引的实现相对MySQL的索引来说就要简单粗暴很多了。他实际上是自动偷偷新创建了一张表格,
    同时将原始表格之中的索引字段作为新索引表的Primary Key!并且存储的值为原始数据的Primary Key


    注意:一个CF可以包含多个Column, 并且每一行可以包含的Column的范围不要求完全一致。 类似一个稀疏矩阵;
    。Cassandra的发展很快,但是基础的数据模型并没有本质改变。 从2007年诞生到现在(2016年),仍然可以使用下面的一句话概括:
    Map<RowKey, SortedMap<ColumnKey, ColumnValue>>
    首先Map结构,通过key来进行查询速度会非常快。 再加上内嵌的SortedMap, 可以进行顺序查找,速度也很快。 当然,如何快速的生成Key等就是另外一个topic了

  • 相关阅读:
    C#深入浅出 修饰符(二)
    HDU 5785 Interesting
    HDU 5783 Divide the Sequence
    HDU 5781 ATM Mechine
    UVA 714 Copying Books
    uva 1471 Defense Lines
    UVA 11134 Fabled Rooks
    UVA 11572 Unique Snowflakes
    UVA 11093 Just Finish it up
    UVA 10954 Add All
  • 原文地址:https://www.cnblogs.com/liufei1983/p/9484581.html
Copyright © 2011-2022 走看看