https://hub.docker.com/_/cassandra/

https://docs.datastax.com/en/

应用: db -> 添加服务: cassandra

镜像: cassandra:latest

卷:

/etc/localtime:/etc/localtime:ro

/data/file:/data/file

端口:9042-9042

保存ip: 升级或替换 不变

主机名: 使用容器名称


2,查看,创建keyspace,数据表

查看命令和MySQL类似。

desc cluster;
desc keyspaces;
desc keyspace portfoliodemo;
desc tables;
desc table stocks;

创建keyspace: 默认制定SimpleStrategy的副本类型。

Create a keyspace.
cqlsh> CREATE KEYSPACE demodb WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 } AND durable_writes = true;
Use the keyspace.
cqlsh> USE demodb;
创建数据表:
CREATE TABLE users (
  userid uuid PRIMARY KEY,
  first_name text,
  last_name text,
  emails set<text>,
  top_scores list<int>,
  todo map<timestamp, text>,
  create_time timestamp
);
Cassandra 有一个特性就是底层做好分布式了,所以再查询排序的时候限制就比较多。
要按照用户才创建时间倒叙查询,必须再创建表的时候就写好。
CREATE TABLE users (
  userid uuid PRIMARY KEY,
  first_name text,
  last_name text,
  emails set<text>,
  top_scores list<int>,
  todo map<timestamp, text>,
  create_time timestamp
  PRIMARY KEY (userid, create_time)
)
WITH CLUSTERING ORDER BY (create_time DESC);

默认定义的时正序,倒叙需要再定义下,并且把这个字段放入到primary key 里面。
更新表结构和mysql类似:
ALTER TABLE users ALTER bio TYPE text;

3,插入数据,更新

和mysq 类似:其中emails是set类型。

INSERT INTO users (userid, first_name, last_name, emails)
  VALUES(cfd66ccc-d857-4e90-b1e5-df98a3d40cd6 , 'Frodo', 'Baggins', {'f@baggins.com', 'baggins@gmail.com'});


更新数据,比较特殊的时list,map,set类型:

其他的类似,参考 http://www.datastax.com/documentation/cql/3.1/cql/cql_reference/update_r.html

增加emails数据:使用+
 UPDATE users SET emails = emails + {'fb@friendsofmordor.org'} WHERE userid = cfd66ccc-d857-4e90-b1e5-df98a3d40cd6;
删除emails数据:使用-
 UPDATE users SET emails = emails - {'fb@friendsofmordor.org'} WHERE userid = cfd66ccc-d857-4e90-b1e5-df98a3d40cd6;
清空emails数据:使用{}
 UPDATE users SET emails = {} WHERE userid = cfd66ccc-d857-4e90-b1e5-df98a3d40cd6;

4,查询数据

查询数量
SELECT COUNT(*) FROM users;
查询前10条
SELECT * FROM users LIMIT 10 ALLOW FILTERING;
按照token查询
SELECT * FROM users WHERE TOKEN(userid) >= TOKEN(cfd66ccc-d857-4e90-b1e5-df98a3d40cd6);
查询token内容,token只能是primary key。
SELECT TOKEN(userid) FROM users WHERE TOKEN(userid) >= TOKEN(cfd66ccc-d857-4e90-b1e5-df98a3d40cd6);

还支持distinct,in等查询,但不支持关联查询,毕竟不是关系型数据库。


参考网址:

https://blog.csdn.net/freewebsys/article/details/41595353


签名:这个人很懒,什么也没有留下!
最新回复 (0)
返回