cassandra
1.cassandra简介
Cassandra是一个高可靠的大规模分布式存储系统。高度可伸缩的、一致的、分布式的结构化key-value存储方案,
集Google BigTable的数据模型与Amazon Dynamo的完全分布式的架构于一身。
Cassandra使用了Google BigTable的数据模型,与面向行的传统的关系型数据库不同,这是一种面向列的数据库,
列被组织成为列族(Column Family),在数据库中增加一列非常方便。
Cassandra的数据会写入多个节点,来保证数据的可靠性。适用于有节点、网络失效,以及多数据中心的场景。
2.cassandra特点及数据类型介绍
特点:
- 列表数据结构
在混合模式可以将超级列添加到5维的分布式Key-Value存储系统。
真正的可扩展性
Cassandra是纯粹意义上的水平扩展。为给集群添加更多容量,可以增加动态添加节点即可。你不必重启任何进程,改变应用查询,或手动迁移任何数据。
分布式写操作
你以在任何地方任何时间集中读或写任何数据。并且不会有任何单点失败。
- 列表数据结构
数据类型:
3.cassandra集群搭建
cassandra.yaml 文件路径:/usr/local/cassandra/conf/cassandra.yaml
1.更改 cassandra.yaml 中 cluster_name: '??' ??为:cassandra集群名称,cassandra集群中所有配置文件中的这个要改成同一个的名字。
2.更改 cassandra.yaml 中 - seeds: "??,??" ??为:集群中其他机器的ip
3.依次启动cassandra集群
cd /usr/local/cassandra/bin
./cassandra (后台运行)
./cassandra -f (关闭crt等连接工具cassandra会停止服务)
4.cassandra创建keyspace和 column family以及表的有关操作
提到Keyspace,可以把keyspace 想像成关系型数据库中的database,而database 的层次应该是database>table>columns,
当然keyspace也有相对应的层次结构keyspace>column family>column, super column,所以在设计keyspace就像在设计database一样.
使用cassandra自带的查询工具查询数据:
- cd /usr/local/cassandra/bin
- ./cqlsh 10.200.21.59(机器ip)
- use cloud ; (cloud 为cassandra的Keyspace)
- select * from recent; (此步骤为输入的cql语句)
查看已有表:describe tables;
查看表结构:describe table table_name;
cassandra表有关的操作:
cassandra为非关系型数据,建表的结构就决定了以后查询的条件,所以建表之前一定要清楚以后次表的查询操作
第一主键 只能用=号查询
第二主键 支持= > < >= <=
索引列 只支持=号
通过以上实验可以得出cassandra cql order by 字段必须是复合主键的第二个字段,并且需要where后跟上第一个字段的条件判断。
cassandra只能按某个条件删除数据,不能一次全部删除数据 delete from mytable where key1=?
cassandra操作map类型数据:
添加map列:ALTER TABLE users ADD todo map<timestamp, text>;
插入一条数据 :INSERT INTO users (user_id, todo) VALUES ('frodo', { '2013-9-22 12:01' : 'birthday wishes to Bilbo', '2013-10-1 18:00': 'Check into Inn of Pracing Pony'}) ;
更新一条数据:UPDATE users SET todo = todo + { '2013-9-22 12:01' : 'birthday wishes to Bilbo', '2013-10-1 18:00': 'Check into Inn of Pracing Pony'} WHERE user_id='frodo';
使用集合类型要注意:
1.集合的每一项最大是64K。
2.保持集合内的数据不要太大,免得Cassandra 查询延时过长,只因Cassandra 查询时会读出整个集合内的数据,集合在内部不会进行分页,集合的目的是存储小量数据。
3.不要向集合插入大于64K的数据,否则只有查询到前64K数据,其它部分会丢失。
5.cassandra导入数据
COPY favorites(username,id,content,migratestatus,updatetime) from '../favorites.scv';
6.如果一台机器宕机,从集群中删除这台机器步骤
第一步:先每个机器都修复下每个keyspace
nodetool repair -h ip_address_of_node keyspace_name
第二步:如果你要删除的机器是UP状态的机器,没有宕机
你可以在要删除的机器上执行 nodetool decommission. 就直接结束了,否则继续:
第三步:如果你的机器是宕机的。
你要先用在一个活着的机器上执行nodetool status 命令,获取宕机节点的id
$ nodetool status
Datacenter: DC1
===============
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
— Address Load Tokens Owns (effective) Host ID Rack
UN 192.168.2.101 112.82 KB 256 31.7% 420129fc-0d84-42b0-be41-ef7dd3a8ad06 RAC1
DN 192.168.2.103 91.11 KB 256 33.9% d0844a21-3698-4883-ab66-9e2fd5150edd RAC1
UN 192.168.2.102 124.42 KB 256 32.6% 8d5ed9f4-7764-4dbd-bad8-43fddce94b7c RAC1
第四步: 在活的节点上执行删除操作
nodetool removenode d0844a21-3698-4883-ab66-9e2fd5150edd
它会自己均衡数据,这里就直接结束了,否则继续。