非关系型数据库(nosql)

1、非关系型数据库(nosql)


区别:mongodb数据存在磁盘上,redis和memcache数据不存在磁盘,存在内存里。
特点:
模式自由:不需要定义表结构,数据表中的每条记录都可能有不同的属性和格式。
逆规范化:不遵循范式要求,去掉完整性约束,减少表之间的依赖。
弹性可扩展:可在系统运行的过程中,动态的删除和增加节点。
多副本异步复制:数据快速写入一个节点,其余节点通过读取写入的日志来实现异步复制。
弱事务:不能完全满足事务的ACID特性,但是可以保证事务的最终一致性。
什么时候使用nosql类型数据库?
数据库表schema经常变化;
数据库表字段是复杂数据类型;
高并发数据库请求;
海量数据的分布式存储。
mongodb:概念: 集合==表 文档==数据
键值对:{"name":"酸酸","sex":"女","age":"25"}
命令关键词:
show dbs; #查看数据库
show collectios; #查看集合(表)
create collection #创建一个集合
use #切换数据库
insert #插入数据
find #查找数据
update #修改数据
remove #删除数据
use 数据库名; #切换数据库,如果不存在即新建一个数据库(use关键字创建数据库)
db; #查看当前的数据库
db.dropDatabase(); #删除数据库
创建数据:用insert关键字来插入数据,db.collectios.insert(doc);
同一张表里的数据可以不一样,如果插入数据的时候表不存在,执行插入语句会自动创建表
①.直接执行insert语句
db.集合名.insert({"列名1":"值1","列名2":值2,"列名3":["值3a","值3b","值3c","值3d","值3e"],"列名4":"值4"});
②.通过定义变量的方式
变量名={"列名1":"值1","列名2":值2,"列名3":["值3a","值3b","值3c","值3d","值3e"],"列名4":"值4"});
db.集合名.insert(变量名);
更新数据:用update关键字来更新数据,db.collectios.update({条件},{更新的值})
同一张表里的数据可以不一样,如果更新数据的值不存在,插入一条语句
①.所有字段加全,否则会影响其他字段数据
db.集合名.update({"列名1":"值1","列名2":值2,"列名3":["值3a","值3b","值3c","值3d","值3e"],"列名4":"值4"});
②.$set方式只更新指定的字段
db.集合名.update({"条件列名1":"条件值"},{$set:{"修改列名":"修改值"}});
③.$inc,在原来的值上增加值,只适用于数字型
db.集合名.update({"条件列名1":"条件值"},{$inc:{"修改列名":20}});
删除数据:用remove关键字来删除数据,db.collectios.remove();
①.删除整个集合里的数据
db.集合名.remove();
②.删除指定的数据,多条匹配删除多条
db.集合名.remove({"条件列名1":"条件值1","条件列名2":"条件值2"});
③.删除指定数据的前n条,多条匹配删除多条
db.集合名.remove({"条件列名1":"条件值1","条件列名2":"条件值2"},n);
查询数据:用find关键字来查询数据,db.collectios.find();
①.查询所有的数据
db.集合名.find();
②.格式化显示数据
db.集合名.find().pretty();
③.指定条件查询
db.集合名.find({"条件列名1":"条件值1"});
④.and操作
db.集合名.find({"条件列名1":"条件值1","条件列名2":"条件值2"});
⑤.or操作
db.集合名.find({$or:[{"条件列名1":"条件值1"},{"条件列名2":"条件值2"}]});
⑥.and和or合用
db.集合名.find({"条件列名1":"条件值1"},$or:[{"条件列名2":"条件值2"},{"条件列名3":"条件值3"}]);
⑦.查询所有的行数
db.集合名.find().count();
⑧.排序,1是升序,-1是降序
db.集合名.find().sort("条件列名":1);
条件表达式:
等于 {"列名":"值"}
小于 {"列名":{$lt:"值"}}
小于或等于 {"列名":{$lte:"值"}}
大于 {"列名":{$gt:"值"}}
大于或等于 {"列名":{$gte:"值"}}
不等于 {"列名":{$ne:"值"}}
Profile(慢查询):记录执行时间超过多久的语句
profile级别有三种:
0:不开启
1:记录慢命令,默认为大于100ms
2:记录所有命令
db.getProfilingLevel(); #获取当前profile级别
db.setProfilingLevel(); #设置当前profile级别
举例:db.setProfilingLevel(1,2000); #记录超过2s
查询profile(慢查询)记录:db.system.profile.find();
ts: 该命令在何时执行
op: 操作类型
query: 本命令的详细信息
responseLength: 返回结果集的大小
ntoreturn: 本次查询实际返回的结果集
millis: 该命令执行耗时,以毫秒记
索引:
创建索引
①.单列索引
db.集合名.ensureIndex({"列名":1});
②.多列索引
db.集合名.ensureIndex({"列名1":1,"列名2":1});
③.唯一索引
db.集合名.ensureIndex({"列名":1},{"unique":true});
查看索引
①.查看索引
db.system.indexes.find();
②.查看当前集合中的索引
db.集合名.getIndexes();
删除索引:用dropIdenx来删除索引
①.删除指定索引
db.集合名.dropIndex({"列名1":1});
②.删除所有的索引
db.user.dropIndexes();
explain:解析查询语句
db.collection.find({"列名":"值"}).explain();
explain说明:
cursor: 返回游标类型(BasicCursor 或 BtreeCursor)
nscanned: 被扫描的文档数量
n: 返回的文档数量
millis: 耗时(毫秒)
indexBounds: 所使用的索引,如果这个字段没有的话,代表没有使用索引
isMultiKey:是否使用了多键索引
scanAndOrder:是否在内存中对结果集进行了排序
indexOnly:是否只使用索引就能完成查询(覆盖索引)
redis
redis-server #启动redis
redis-cli #进入redis命令行
增删改查:
select 1 #用select关键字,选择第一个数据库
set 键 值 #用set关键字,插入数据
set 键 值 EX 失效时间 #设置失效时间(单位:s)
get 键 #用get关键字,获取数据
del 键 #用del关键字,删除数据
hset 键 字段 '值' #hash类型,添加hash类型数据
hget 键 字段 #hash类型,获取hash类型单子字段数据
hgetall 键 #获取hash类型里所有字段值
hdel 键 字段 #删除指定的某个字段
keys * #查看当前数据库有哪些key
info #查看redis当前系统信息(监控)
memcache
启动参数:
-p #监听的端口
-c #最大同时连接数,默认是1024
-m #最大内存使用,单位MB。默认64MB
-P #设置保存Memcache的pid文件
-d #后台运行
-u #运行Memcache的用户,仅在以root运行的时候有效
增:增加使用add 关键字
add key 0 #存放时间 数据大小
add name 0 30 5 #用add关键字,增加数据
查:查询使用get 关键字
get key #用get关键字,获取数据
改:修改使用set或者replace关键字,set和replace的区别是set一个不存在的key时,会新增,replace一个不存在key时,会报错。
set key 0 #存放时间 数据大小
replace key 0 #存放时间 数据大小
set name1 0 50 6
replace name 0 70 5
删:删除使用delete关键字
delete key #用delete关键字,删除数据
stats; #查看memcache当前系统信息(监控)

2、Jenkins:自动化部署
①.java -jar jenkins.war
访问ip:8080
②.如果把war包放在了tomcat的webapps目录下
访问ip:8080/jenkins
配置→构建触发器→Poll SCM #jenkins设置定时任务,格式与linux下的定时任务格式一致

posted @ 2020-10-20 20:26  _酸酸  阅读(484)  评论(0编辑  收藏  举报