• 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了

  • 相关阅读:
    Vertica的这些事(九)——-vertica存储统计信息
    Vertica的这些事(八)——-Vertica-管理
    Vertica的这些事(六)——-vertica中group-by-和join-语句的优化
    Vertica的这些事(五)——-谈谈vertica的flex-table
    Vertica的这些事(四)——-vertica加密数据
    Vertica的这些事(三)——Vertica中实现Oracle中的ws_concat功能
    Vertica的这些事(二)——SQL-Server、Oracle、MySQL和Vertica数据库常用函数对比
    Docker_安装和卸载(2)
    Docker_简介(1)
    Jenkins_创建git任务(3)
  • 原文地址:https://www.cnblogs.com/liufei1983/p/9484581.html
Copyright © 2020-2023  润新知