• cassandra


    Cassandra note:

    依赖:需要java 8 (http://www.oracle.com/technetwork/java/javase/downloads/index.html)

    数据模型: 与Hbase同样是属于列式数据库,Key-Value存储系统。(http://www.ibm.com/developerworks/cn/opensource/os-cn-cassandra/)
    http://www.datastax.com/dev/blog/basic-rules-of-cassandra-data-modeling

    集群中的数据是靠partion key的hash code均匀映射到不同的节点上去的。partionkey是primary key的第一个元素,所以选一个好的主
    key才能使数据更好的均匀存储在不同的节点上。


    Cassandra的节点实例叫Cluster,里面可以包含一个或多个键空间(KeysSpace).键空间是存放列族(Column Family)的容器,相当于
    关系数据中的database,schema。列族是存放列(column)的容器,类似与关系数据库中的table。超级列(Super column)是一种
    特殊的列,它的value值可以包含多个column。 columns是cassandra的最基本单位,有name,value,timestamp构成。

     

    列式数据库的优点:
    1.适合存储大量数据,而不是小量数据。因为数据是是基于列存储的,所以可以忽略不需要的列的数据,提高查找效率。
    与之对应的是行数据库。
    2.高压缩比。节省存储空间,也节省CPU和内存。
    3.高装载速度。

    列式数据库的缺点:
    1.不适合扫描小量数据。
    2.不适合随机更新数据。
    3.不适合做含有删除的更新的实时操作。


    查询数据:
    Cassandra有自己的一套查询语言CQL(类似SQL),在数据访问方式上亦是如此。客户端可以与集群中的任意节点相连,并访问任意的数据。

    cassandra在写入数据之前需要记录日志(CommitLog),然后数据开始写入到 Column Family 对应的 Memtable 中,
    Memtable 是一种按照 key 排序数据的内存结构,在满足一定条件时,再把 Memtable 的数据批量的刷新到磁盘上,存储为 SSTable 。

    存储二进制大文件(不推荐存储):http://wiki.apache.org/cassandra/FAQ#large_file_and_blob_storage

    Cassandra的GUI管理工具整理:http://wiki.apache.org/cassandra/FAQ#gui 也有自带的CLI工具连接Cassandra

    Cassandra集群种子的概念(很重要):http://wiki.apache.org/cassandra/FAQ#seed
    类似与Cassandra集群的初始化节点(集线器),各个节点通过种子节点互相学习(交换)各自的数据(状态),所以新加入的Cassandra节点都需要给它
    指定种子节点,下次启动的时候就不需要了。


    Cassandra 的C++ 接口:
    Cassandra的各种编程语言的接口是有Thrift这个开源工具生成的,语言无关的Thrift输入文件(cassandra.thrift)Cassandra已经自带
    ,安装thrift运行 thrift.exe -gen cpp cassandra.thrift生成就可以了。 cpp的接口依赖thrift的核心库叫libthrift,libthrift依赖boost1.53.0
    版本和openssl


    Cassandra windows 安装配置:
    解压,配置好CASSANDRA_HOME环境变量的路径(也就是你解压的cassandra根目录),然后运行bin下的cassandra.bat,如果发现logs
    目录底下的system.log文件中有INFO - Starting up server gossip,那么恭喜你,Cassandra已经在你的本机启动起来了。

     

     

    *****************************************Cassandra的基本操作************************************************

    数据模型:多维的hash表,每行可以有不同的列。每行都有个键. keyspace包含若干列族
    (列族和表是同一个概念:http://stackoverflow.com/questions/18824390/whats-the-difference-between-creating-a-table-and-creating-a-columnfamily-in-ca),
    keyspace在逻辑上是容纳列族和某些配置属性的命名空间。列族定义了相关的数据名字和它们的排序方式。

    入门必读:http://wiki.apache.org/cassandra/GettingStarted

    CQLSH中运行外部创建的cql脚本文件: SOURCE '[file_path]'

    键空间的创建:
    CREATE KEYSPACE [keyspace_name] WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'datacenter1' : 3};

    ----键空间的创建要附带副本属性,class可以指定NetworkTopologyStrategy或SimpleStrategy。SimpleStrategy只用于测试评估Cassandra
    生产环境使用NetworkTopologyStrategy. 键空间类似关系型数据库中的数据库(database)

    键空间的修改:
    ALTER KEYSPACE [keyspace_name] WITH REPLICATION = {};

    键空间的删除:
    DROP KEYSPACE [keyspace_name]

    键空间的使用:
    USE [keyspace_name]


    列出已存在的键空间:
    DESCRIBE keyspaces;

    列出某个键空间下的所有表:
    USE [keyspace_name];
    DESCRIBE tables;

    列出某个键空间下的所有列族:
    USE [keyspace_name];
    DESCRIBE columnfamilies;

    列出特定的表的基本信息:
    DESCRIBE TABLE [keyspace_name].[table_name];

    建表:
    http://docs.datastax.com/en/cql/3.1/cql/cql_using/create_table_t.html
    表的主键可以是复合的,就是多个列组成一个主键:
    CREATE TABLE emp (
    empID int,
    deptID int,
    first_name varchar,
    last_name varchar,
    PRIMARY KEY (empID, deptID)); //主键的第一个键就是分区键(empID),分区键的目的就是把表中的数据均分到集群中的
    各个节点中

    更改表:
    ALERT TABLE [table_name] [some change]
    https://docs.datastax.com/en/cql/3.0/cql/cql_reference/alter_table_r.html
    没办法更改主键,因为主键涉及到数据的物理储存

    给表的某列建立索引:
    CREATE INDEX ON [table_name] (column_name);


    查表:
    SELCT [column_name] FROM [keyspace].[table_name] WHERE [column_name] = [value] //其中column_name必须是主键的其中部分,
    如果有多个条件必须其中有一个是分区键

    更新表中的值:
    UPDATE [keyspace].[table_name] SET [column_name] = [new_value] WHERE [column_name]=[value]

    删除表中列或行:
    删除列中值:DELETE [column_name] FROM [table_name] WHERE [column_name] = [value] # 同查表
    删除一整行:DELETE FROM [table_name] WHERE [column_name] = [value] #同上

    自定义数据类型(http://docs.datastax.com/en/cql/3.1/cql/cql_using/cqlUseUDT.html):
    CREATE TYPE [keyspace_name].[type_name] (
    street text,
    city text,
    zip_code int,
    phones set<text>
    );
    自定义的数据类型的字面值是json-style的风格。

    内建的数据类型(http://docs.datastax.com/en/cql/3.1/cql/cql_reference/cql_data_types_c.html):
    ascii,bigint,blob,boolean,counter,double,float,inet,int,list,map,set,text,uuid,
    timestamp,tuple,varchar(UTF-8 encoded string) ,varint


    查看集群信息:
    SELECT * FROM system.peers;

    本地帮助文档的查看:
    HELP [COMMAND]
    比如:查看创建键空间 HELP CREATE_KEYSPACE;


    CQL语句支持多语句提交(Batch):
    可以减少Node之间的流量交换,类似于事务,是原子的。
    http://docs.datastax.com/en/cql/3.1/cql/cql_reference/batch_r.html#reference_ds_djf_xdd_xj__batch-conditional
    http://docs.datastax.com/en/cql/3.1/cql/cql_using/use-batch-static.html


    给数据设置存活期:
    超过存活期的数据,将被销毁。
    INSERT INTO [table_name]
    ([column_name1], [column_name2])
    VALUES ([column_value1], [column_value2]) USING TTL 86400; # 86400 sec 大概是一天的存活期
    是给column_name2设置的


    UPDATE [table_name] USING TTL 432000 SET [column_name] = [column_value]
    WHERE user_name = 'cbrown';

  • 相关阅读:
    nginx系列之七:限流配置
    nginx系列之六:cache服务
    nginx系列之五: 负载均衡
    nginx系列之四:web服务器
    nginx系列之三:日志配置
    nginx系列之二:配置文件解读
    nginx系列之一:nginx入门
    [面试题]25个MySQL经典面试题
    常用的 Linux iptables 规则
    java new一个对象的过程中发生了什么
  • 原文地址:https://www.cnblogs.com/ligao/p/8372405.html
Copyright © 2020-2023  润新知