当前位置:   article > 正文

Cassandra数据库的安装及常用操作_cassandra数据库安装

cassandra数据库安装

Cassandra数据库的安装
第一步:先要保证虚拟机已安装jdk(1.7版本以上)
在这里插入图片描述
第二步:下载cassandra安装包
在http://mirror.bit.edu.cn/apache/cassandra/里面下载你所需要的版本(建议使用2.1以上的版本):
wget http://mirror.bit.edu.cn/apache/cassandra/3.11.8/apache-cassandra-3.11.8-bin.tar.gz
在这里插入图片描述解压: tar -xvf xxx.tar.gz

第三步:启动
进入解压之后的bin目录下: ./cassandra
在这里插入图片描述进入cassandra客户端的方式: 进入解压之后的bin目录下: ./cqlsh
在这里插入图片描述
Cassandra常用命令
查看表空间 describe keyspaces;
进入某个表空间: use keyspace(表空间名称);
查看已有表: describe tables;
查看表结构: describe table tabel_name(表名称);
创建一个keyspace: CREATE KEYSPACE IF NOT EXISTS xxx(keyspace名字) WITH REPLICATION = {‘class’: ‘SimpleStrategy’,‘replication_factor’:1};
删除keyspace: drop keyspace xxx(keyspace名字);
删除表: drop table xxx(表名称);
Cassandra 提供collection 用于处理某些特殊类型的需求,如单用户记录的多个邮件地址,此处翻译为 集合类型。
Cassandra 提供了三种集合类型,分别是Set,List,Map。
一:Set
Set存储了一组类型相同的不重复元素,当被查询时会返回排好序的结果,但是内部构成是无序的值,应该是在查询时对结果进行了排序。
使用示例:
1:创建带有set类型的表

CREATE TABLE users (
  user_id text PRIMARY KEY,
  first_name text,
  last_name text,
  emails set<text>
);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2:插入数据

INSERT INTO users (user_id, first_name, last_name, emails) VALUES('frodo', 'Frodo', 'Baggins', {'f@baggins.com', 'baggins@gmail.com'});
  • 1

3:使用UPDATE命令和‘+’操作符向set列添加一个元素

UPDATE users SET emails = emails + {'fb@friendsofmordor.org'} WHERE user_id = 'frodo';
  • 1

4:查询

select * from users ;
  • 1

在这里插入图片描述5:删除一个元素

UPDATE users SET emails = emails - {'fb@friendsofmordor.org'} WHERE user_id = 'frodo';
  • 1

6:删除所有元素
使用delete或者update

UPDATE users SET emails = {} WHERE user_id = 'frodo'; DELETE emails FROM users WHERE user_id = 'frodo';
  • 1

一般来说,Set,list和Map要求最少有一个元素,否则Cassandra无法把其同一个空值区分。

二:List
list查询时会按照元素在list中的index顺序来返回结果,可以存储多个重复的值。
操作示例:
1:向users表中添加一个list列

ALTER TABLE users ADD top_places list<text>;
  • 1

2:使用update命令向list添加值

UPDATE users SET top_places = [ 'rivendell', 'rohan' ] WHERE user_id = 'frodo';
  • 1

3:在list前面添加值

UPDATE users SET top_places = [ 'the shire' ] + top_places WHERE user_id = 'frodo';
  • 1

4:在list后面添加值

UPDATE users SET top_places = top_places + [ 'mordor' ] WHERE user_id = 'frodo';
  • 1

5:使用列表索引值设置指定值

UPDATE users SET top_places[2] = 'riddermark' WHERE user_id = 'frodo';
  • 1

原先的值会被覆盖,这种操作会读入整个list,效率比3,4低
6:使用DELETE命令和索引删除某个特定位置的值

DELETE top_places[3] FROM users WHERE user_id = 'frodo';
  • 1

7:使用UPDATE命令和‘-’移除list中所有的特定值

UPDATE users SET top_places = top_places - ['riddermark'] WHERE user_id = 'frodo';
  • 1

6和7相比,推荐使用7,因为6操作是非线程安全的,如果在操作时其它线程在前面添加了一个元素,会导致移除错误的元素。使用7不会有此问题。

三: Map
Map提供了名字到值的映射,Map可以存储时间戳相关的信息,每一个元素在内部作为一列存储,可以修改,替换,删除和查询,拥有一个单独的TTL值。
1:添加map列

ALTER TABLE users ADD todo map<timestamp, text>;
  • 1

2:使用Insert或Update命令,设置或更新数据。

UPDATE users SET todo =
  { '2012-9-24' : 'enter mordor', '2014-10-2 12:00' : 'throw ring into mount doom' } WHERE user_id = 'frodo';
  • 1
  • 2

3:使用UPDATE命令设置指定元素的value

UPDATE users SET todo['2014-10-2 12:00'] = 'throw my precious into mount doom' WHERE user_id = 'frodo';
  • 1

4:使用INSERT命令设置指定行的map数据

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'}) ;
  • 1

旧的MAP数据会被覆盖。
在 Cassandra 2.1.1后,可以使用如下语法增加map元素。如果key已存在,value会被覆盖,不存在则插入。

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

5:删除元素

UPDATE users SET todo=todo - {'2013-9-22 12:01','2013-10-01 18:00:00-0700'} WHERE user_id='frodo';
DELETE todo['2013-9-22 12:01'] FROM users WHERE user_id = 'frodo';
  • 1
  • 2

6:TTL

UPDATE users USING TTL <computed_ttl> SET todo['2012-10-1'] = 'find water' WHERE user_id = 'frodo';
INSERT INTO users (user_id, first_name) VALUES ('cbrown', 'ch@ngem4a') USING TTL  <computed_ttl>;
  • 1
  • 2

在设定的computed_ttl秒后,数据会自动删除。
使用集合类型要注意:
1.集合的每一项最大是64K。
2.保持集合内的数据不要太大,免得Cassandra 查询延时过长,只因Cassandra 查询时会读出整个集合内的数据,集合在内部不会进行分页,集合的目的是存储小量数据。
3.不要向集合插入大于64K的数据,否则只有查询到前64K数据,其它部分会丢失。

Cassandra高级应用
一:添加索引
从 Cassandra 2.1起,可以给集合添加索引。
示例:
CREATE INDEX ON users(emails);
CREATE INDEX mymapvalues ON users(todo);
索引名字可以不指定。
上面第二个语句使用Map列的列名在其values上创建了索引,也可以在其keys上创建索引,如下:
DROP INDEX mymapvalues; CREATE INDEX mymapkeys ON playlists (KEYS(todo));
二、过滤集合中的数据
假设已经给集合添加了索引,就可以使用where子句的CONTAINS条件按照给定的值进行过滤。
SELECT user_id FROM users WHERE emails CONTAINS ‘baggins@gmail.com’;
注意给定的值是集合项的一项,短于集合某项不会进行模糊匹配。
对于MAP,可以使用key或value进行过滤。
SELECT user_id FROM users WHERE todo CONTAINS ‘birthday wishes to Bilbo’;
SELECT user_id FROM users WHERE todo CONTAINS KEY ‘2013-09-23 12:01:00-0700’;

Python操作cassandra
1:安装cassandra-driver驱动: pip install cassandra-driver
2:代码示例如下

#encoding:utf-8
from cassandra.cluster import Cluster
from cassandra.policies import DCAwareRoundRobinPolicy

# 默认是本地
cluster = Cluster()
# 创建一个连接会话
session = cluster.connect()
# 创建keyspace
# session.execute("CREATE KEYSPACE test WITH replication = {'class':'SimpleStrategy', 'replication_factor' : 3};")
# # 选择keyspace
session.execute("use test;")
# # 创建table
# session.execute("create table test.user(name text primary key, age int, email varchar);")
# # 往表格中添加数据
# session.execute("insert into test.user (name, age, email) VALUES (%s, %s, %s);", ["aaa", 21, "21@qq.com"])
# session.execute("insert into test.user (name, age, email) VALUES (%s, %s, %s);", ["bbb", 19, "19@qq.com"])
# session.execute("insert into test.user (name, age, email) VALUES (%s, %s, %s);", ["ccc", 25, "25@qq.com"])
# 删除表
# session.execute("drop table test.user;")
# 删除特定的keyspace
# session.execute("drop keyspace test;")
# 查询数据
rows = session.execute("select * from test.user;")
for row in rows:
    print(row)
# # 关闭连接
cluster.shutdown()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

附带:
为什么 Cassandra 的写速度比 MySQL 快?
知乎连接: https://www.zhihu.com/question/19553452

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/126501
推荐阅读
相关标签
  

闽ICP备14008679号