1. cassandra数据库
1.1. MAC 下安装 cassandra
1.1.1. 更新自制软件的存储库索引
–为了在Mac OS上安装Cassandra, 需要更新自制软件的存储库索引。
brew update
1.1.2. 在MacOS上安装Cassandra
–在MacOS上安装Cassandra,会将Cassandra安装在/usr/local/cellar/cassandra位置
brew install cassandra
1.1.3. 启动cassandra
以下命令用于启动Cassandra(本地)。
brew services start cassandra
1.1.4. 停止cassandra
以下命令用于停止Cassandra (本地)。
brew services stop cassandra
1.2. shell命令
1.2.1. 连接数据库
命令格式:
cqlsh -u username -p password -k keyspaces ip地址
说明:
username:用户名
password:密码
keyspaces:表空间
control+z 关闭连接快捷键
1.2.2. 查看集群的信息
describe clusters ;
—此命令提供有关集群的信息
1.2.3. 列出集群中的所有键空间
此命令列出集群中的所有键空间
describe keyspaces;
切换键空间
use keyspace;
1.2.4. 列出了键空间中的所有表
此命令列出了键空间中的所有表
describe tables;
此命令提供表的描述
describe table 表名称;
1.3. CURD操作
---------CURD操作---------
CQL ( Cloud Query Language)是 LeanCloud 为查询 API 定制的一套类似 SQL 查询语法的子集和变种,其目的是让开发者可以使用传统的 SQL 语法来查询。
----查询限制-----
1.主键顺序查询限制
Cassandra对查询的支持很弱,只支持主键列及索引列的查询,而且主键列还有各种限制,不过查询弱归弱,但它还是支持索引和排序的。
索引列支持 like
只有主键支持 group by
cassandra主键是一个partition key主键和多个clustering key复合主键,而主键的查询顺序必须与定义表结构时一致
分区主键查询限制
cassandra中分区主键只能以 等号或in查询,不能使用范围查询
也就是不能以日期进行范围查询
2.范围主键查询限制
cassandra中范围查询只能放在条件查询的最后一个位置,例如,如果范围查询age,则就不能添加phone查询条件。加上ALLOW FILTERING(允许过滤) 可以支持
3.排序规则
cassandra在创建表时设置一个排序规则,默认以此进行规则排序,如当前表,默认以正序age,正序bornDate和倒序createDate, 手动设置倒序只有一种方式,即将所有排序字段全部颠倒,也就是必须像这样order by age desc, bornDate desc, createDate asc
4.排序对分区主键条件的限制
cassandra中只要使用排序,无论是使用默认排序规则还是相反排序规则,分区主键只能使用等于查询,(可以使用in,但是只能IN一个数据)
6.使用In和Order by 时需要全局关闭分页
Cluster.Builder()
.AddContactPoints(cassandraUrls)
// 设置pageSize为最大值,这样代表为关闭分页,可以使用in 和order by
.WithQueryOptions(new QueryOptions().SetPageSize(int.MaxValue))
.Build();
1.3.1. 新增操作
命令格式:
INSERT INTO <tablename> (<column1 name>, <column2 name>....) VALUES (<value1>, <value2>....) USING <option>
1.3.2. 更新数据
UPDATE <tablename> SET <column name> = <new value> <column name> = <value>.... WHERE <condition>
1.3.3. 查询数据
SELECT FROM <table name> WHERE <condition>;
示例: select * from employee; —读取所有字断
1)主键顺序查询限制
–错误示范(违反主键顺序查询限制)
select * from employee where age = 1 and name = '张三' and bornDate='1999-01-01';
–正确写法
select * from employee where bornDate = '1999-01-01' and name ='张三' and age=1;
2)分区主键查询限制
–错误示范(违反分区主键查询限制)
select * from employee where bornDate >='1999-01-01' and name='张三';
–正确写法
select * from employee where bornDate = '1999-01-01' and name ='张三' and age=1;
3)范围主键查询限制
–错误示范(违反范围主键查询限制)
select * from employee where bornDate = '2019-01-01' and name ='张三' and age >18 and phone = '123456';
–正确写法
select * from employee where bornDate = '2019-01-01' and name ='张三' and age >18 and phone = '123456' allow filtering;
4)排序规则 默认排序规则如果需要倒叙则所有原定排序要倒序
5)排序对分区主键条件的限制分区主键只能使用等于查询,(可以使用in,但是只能IN一个数据)
–错误示范
select * from employee where bornDate in ('1999-01-01','1999-01-02') and name = '张三' order by age desc, bornDate desc, createDate asc;
–正确写法
select * from employee where bornDate = '1999-01-01' and name = '张三' order by age desc, bornDate desc, createDate asc;
EXPAND ON;—扩展命令,使用命令后select输出的结果展示形式不一样,当列较多时可以使用优化数据展现形式
copy users(id, username, age) to ‘D:\myfile’; —复制命令copy to, 将表中的数据写入到文件中
1.3.4. 删除数据
DELETE FROM WHERE ;
1.3.5. 与SQL注要差异
- 不支持在 select 中使用 as 关键字为列增加别名。
- update 和 delete 不提供批量更新和删除,只能根据 objectId(where objectId=xxx)和其他条件来更新或者删除某个文档。
- 不支持 join,关联查询提供 include、relatedTo 等语法来替代(关系查询)。
- 仅支持部分 SQL 函数(内置函数)。
- 不支持 group by、having、max、min、sum、distinct 等分组聚合查询语法。
- 不支持事务。
- 不支持锁
2. mongodb数据库
2.1. 安装
2.1.1. 使用OSX的brew来安装mongodb
brew tap mongodb
brew install mongodb-community@4.4
@ 符号后面的 4.4 是版本号。
安装信息:
配置文件:/usr/local/etc/mongod.conf
日志文件路径:/usr/local/var/log/mongodb
数据存放路径:/usr/local/var/mongodb
2.1.2. 运行 MongoDB
使用 brew 命令或 mongod 命令来启动服务。
brew 启动:
brew services start mongodb-community@4.4
brew 停止:
brew services stop mongodb-community@4.4
2.1.3. mongod 命令后台进程方式
mongod --config /usr/local/etc/mongod.conf --fork
2.2. SHELL命令
2.2.1. 连接数据库
mongo --host mongodb://username:password@ip:port/database (control+z 关闭连接(mac))
说明:
mongo:指令关键字
–host mongodb://:连接数据库关键字
username:用户名
password:密码
@ip:IP地址
port:端口号
database:数据库名称
2.2.2. 显示数据库列表
show dbs;
2.2.3. 切换/创建数据库
use yourDB;当创建一个集合(table)的时候会自动创建当前数据库
2.2.4. 显示当前数据库中的集合
show collections;
显示当前数据库中的集合(类似关系数据库中的表)
CURD操作
新增数据
db.user.insert({"userId" : "014","uclass" : "B","name" : "Back","age" : 11,"email" : "b14@sina.com","birthday" : ISODate("2018-07-31T03:46:13.885Z"),"dataStatus" : 1});
删除数据
db.user.remove({"userId":"014"});
修改数据
db.user.update({"userId":"013"}, {$set:{"email":"b13@sina.com", "age":20}});
查询数据
查询所有:db.user.find({});
查询条件=:db.user.find({"uclass":"A"});
查询条件like:db.user.find({"name":/Ba/});
查询条件distinct:db.user.distinct("name");
查询条件>:db.user.find({"age":{$gt:16}});
查询条件>=:db.user.find({"age":{$gte:16}});
查询条件<:db.user.find({"age":{$lt:16}});
查询条件<=:db.user.find({"age":{$lte:16}});
查询条件!=:db.user.find({"age":{$ne:16}});
查询条件=:db.user.find({"age":{$eq:16}});等效于 db.user.find({"age":16});
查询条件in:db.user.find({"uclass":{$in:['A', 'B']}});
查询条件and:db.user.find({"uclass":"B", "age":{$gt:16}});
查询条件or:db.user.find({$or:[{"uclass":"A"},{"class":"B"}]});
查询条件:时间 db.user.find({"birthday":{$gt: new Date("2008-08-14T06:24:40.110Z"), $lt: new Date("2015-08-14T06:14:40.089Z")}});
查询条数count: db.user.find({"uclass":"A"}).count(); 类似mysql select count(1) from user where uclass = 'A';
查询条件sort升序: db.user.find({}).sort({"age":1});
查询条件sort降序: db.user.find({}).sort({"age":-1});
聚合查询count单列:db.user.aggregate([{$group:{_id:"$uclass",num:{$sum:1}}}]);类似MySQL select uclass, count(1) as num from user group by uclass;
聚合查询count多列 :db.user.aggregate([{$group:{_id:{uclass:"$uclass", age:"$age"},num:{$sum:1}}}]);类似MySQL select uclass, age, count(1) as num from user group by uclass, age;
分页查询limit n: db.user.find({}).limit(5); 查询前n条
分页查询limit m,n: db.user.find({}).limit(5).skip(5); 查询n条,从第m条开始
查询指定字段 db.user.find({}, {userId:1, name:1}); 第一个{}为查询条件
查询嵌套数据的指定字段 db.user.find({}, {userId:1, name:1, 'ecus.name':1, 'ecus.serial':1}); ---其中ecus为嵌套列表,name和serial为嵌套字段
排查指定字段 db.user.find({}, {dataStatus:0, _id:0});
其它操作
—简易模式
db.tablenName.find().pretty();
从指定主机上克隆数据库
db.cloneDatabase(“127.0.0.1”);
3. redis数据库
3.1. 安装
brew install redis 安装
3.2. 操作命令
命令格式:命令+空格+key+空格+参数1+空格+参数2
注意事项:
1.key以及参数需要加""
2.参数间以空格做分割
示例:
hmget “keyname” “value1” “value2”
3.2.1. 连接操作命令
quit:关闭连接(connection)
auth:简单密码认证
help cmd: 查看cmd帮助
3.2.2. 持久化
save:将数据同步保存到磁盘
bgsave:将数据异步保存到磁盘
lastsave:返回上次成功将数据保存到磁盘的Unix时戳
shundown:将数据同步保存到磁盘,然后关闭服务
3.2.3. 远程服务控制
info:提供服务器的信息和统计
monitor:实时转储收到的请求
slaveof:改变复制策略设置
config:在运行时配置Redis服务器
3.2.4. 对value操作的命令
exists(key):确认一个key是否存在
del(key):删除一个key
type(key):返回值的类型
keys(pattern):返回满足给定pattern的所有key
randomkey:随机返回key空间的一个key
rename(oldname, newname):重命名key
dbsize:返回当前数据库中key的数目
expire:设定一个key的活动时间(s)
ttl:获得一个key的活动时间 (当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以秒为单位,返回 key 的剩余生存时间。)
select(index):按索引查询
move(key, dbindex):移动当前数据库中的key到dbindex数据库
flushdb:删除当前选择数据库中的所有key
flushall:删除所有数据库中的所有key
3.2.5. String
set(key, value):给数据库中名称为key的string赋予值value
get(key):返回数据库中名称为key的string的value
getset(key, value):给名称为key的string赋予上一次的value
mget(key1, key2,…, key N):返回库中多个string的value
setnx(key, value):添加string,名称为key,值为value
setex(key, time, value):向库中添加string,设定过期时间time
mset(key N, value N):批量设置多个string的值
msetnx(key N, value N):如果所有名称为key i的string都不存在
incr(key):名称为key的string增1操作
incrby(key, integer):名称为key的string增加integer
decr(key):名称为key的string减1操作
decrby(key, integer):名称为key的string减少integer
append(key, value):名称为key的string的值附加value
substr(key, start, end):返回名称为key的string的value的子串
### 3.2.6. List
rpush(key, value):在名称为key的list尾添加一个值为value的元素
lpush(key, value):在名称为key的list头添加一个值为value的 元素
llen(key):返回名称为key的list的长度
lrange(key, start, end):返回名称为key的list中start至end之间的元素
ltrim(key, start, end):截取名称为key的list
lindex(key, index):返回名称为key的list中index位置的元素
lset(key, index, value):给名称为key的list中index位置的元素赋值
lrem(key, count, value):删除count个key的list中值为value的元素
lpop(key):返回并删除名称为key的list中的首元素
rpop(key):返回并删除名称为key的list中的尾元素
blpop(key1, key2,… key N, timeout):lpop命令的block版本。
brpop(key1, key2,… key N, timeout):rpop的block版本。
rpoplpush(srckey, dstkey):返回并删除名称为srckey的list的尾元素,并将该元素添加到名称为dstkey的list的头部
3.2.7. Set
sadd(key, member):向名称为key的set中添加元素
membersrem(key, member) :删除名称为key的set中的元素
memberspop(key) :随机返回并删除名称为key的set中一个元素
smove(srckey, dstkey, member) :移到集合元素
scard(key) :返回名称为key的set的基数
sismember(key, member) :member是否是名称为key的set的元素
sinter(key1, key2,…key N) :求交集
sinterstore(dstkey, (keys)) :求交集并将交集保存到dstkey的集合
sunion(key1, (keys)) :求并集
sunionstore(dstkey, (keys)) :求并集并将并集保存到dstkey的集合
sdiff(key1, (keys)) :求差集
sdiffstore(dstkey, (keys)) :求差集并将差集保存到dstkey的集合
smembers(key) :返回名称为key的set的所有元素
srandmember(key) :随机返回名称为key的set的一个元素
3.2.8. Hash
hset(key, field, value):向名称为key的hash中添加元素
fieldhget(key, field):返回名称为key的hash中field对应的value
hmget(key, (fields)):返回名称为key的hash中field i对应的value
hmset(key, (fields)):向名称为key的hash中添加元素field
hincrby(key, field, integer):将名称为key的hash中field的value增加integer
hexists(key, field):名称为key的hash中是否存在键为field的域
hdel(key, field):删除名称为key的hash中键为field的域
hlen(key):返回名称为key的hash中元素个数
hkeys(key):返回名称为key的hash中所有键
hvals(key):返回名称为key的hash中所有键对应的value
hgetall(key):返回名称为key的hash中所有的键(field)及其对应的value