MongoDB

MongoDB是NoSQL数据库的一种,是一种文档型数据库,它使用的是一种类似于JSON的数据结构既BSON。工作于27017端口。

与Reids一样MongoDB也是为了解决大数据时代的新需求(三高,3V)。

MongoDB不支持事务,常用于数据量大,读写操作频繁,价值较低的数据(如游戏中的经验等,物流中的订单变更等等)

数据结构

在MongoDB中,表可以理解为collection,一个collection中有多行既Document。
请添加图片描述
每一列被成为域filed,同时MongoDB不支持表连接。
请添加图片描述
MongoDB最小存储单位就是document,数据在MongoDB中以BSON(Binary JSON)存储,类似JSON的一种二进制存储格式。

基本命令操作

数据库:
show dbs #显示所有数据库
db #查看当前使用的数据库,默认的数据库test
use xxx #选择数据库,若不存在就自动创建
db.dropDatabase() #删除当前库
集合:
db.createCollection("xxx") #创建名为xxx的集合
show collections #显示所有集合
db.xxx.drop() #删除名为xxx的集合
文档:
db.xxx.insert(xxxx) #向xxx集合插入document
db.xxx.find(<query>,[projection]) #显示xxx集合中的文档,query指定筛选器。projection指定与筛选器匹配的文档中返回的字段
db.xxx.find({xxx:xxx}) #按照一定条件来查询
db.xxx.findOne({xxx:xxx}) #与find类似,但是只返回第一条数据

请添加图片描述

db.xxx.insertMany([xxxxx],{writeConcern:<document>,ordered:<boolean>}) #writeConcern ,ordered是否有序插入
db.xxx.update({匹配条件}{修改字段}) #覆盖修改,直接将原有的数据覆盖掉
db.xxx.update({匹配条件}{$set:{修改字段}}) #部分修改,通过$set修改器。在有多个匹配结果时,默认只修改第一条数据。
db.xxx.update({匹配条件}{$set:{修改字段}},{multi:true}) #在有多个匹配结果时,修改所有数据
db.xxx.update({匹配条件}{$inc:{likenum:NumberInt(1)}}) #对likenum字段加一
db.xxx.remove(条件) #删除匹配条件的document
db.xxx.remove({}) #删除所有document

请添加图片描述

db.xxx.count(匹配条件) #统计匹配条件的文档数
db.xxx.find().limit(n) #分页查询,显示前n条记录,默认20
db.xxx.find().skip(n) #跳过前n条记录,默认为0
db.xxx.find().limit(x).skip(x) #配合使用,实现指定翻页
db.xxx.find().sort({xxx:1/-1}) #指定使用某字段排序,1表示升序,-1降序
db.xxx.find({content:xxx}) #MongoDB还支持正则匹配
db.xxx.find({linkenum:{$gt:NumberInt(700)}}) #查询出likenum大于700的文档
db.xxx.find({id:{$in:["1003","1004"]}}) #查询id字段包含1003,1004的document。$nin表示不包含
db.xxx.find($and:[{xxx},{xxx},{xxx}]) #多条件查询
db.xxx.find($or:[{xxx},{xxx},{xxx}]) #多条件查询

索引

与MySQL索引的作用类似,同样是为了实现更高效率的查询。MongoDB采用B Tree作为索引的数据结构。MongoDB也可以创建单索引或者复合索引,与MySQL类似,MongoDB也会默认创建主键索引。

db.xxx.getIndexes() #获取索引

请添加图片描述

db.xxx.createIndex(keys,options) #创建索引:keys表示那些字段使用索引,options:常用name 自定义索引名,unique 是否唯一索引 默认false
db.xxx.dropIndex(index) #删除指定索引名称
db.xxx.dropIndex(匹配条件) #删除匹配条件的索引
db.xxx.dropIndexs() #删除所有索引

执行计划

与MySQL类似,用于查看查询消耗的时间。

db.xxx.find().explain() #

请添加图片描述
主要部分winningPlan:

stage:collscan 集合扫描 相当于全文扫描,需要索引优化为Fetch。

覆盖索引

类似MySQL的覆盖索引,查询的字段尽量被索引字段包含。

Java操作

与MySQL类似,MongoDB采用mongoDB-driver链接MongoDB。

类似于Mybatis,SpringDataMongoDB用于操作MongoDB的持久层框架,底层封装mongoDB-driver。

集群

副本集

副本集提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。副本集还允许您从硬件故障和服务中断中恢复数据。

mongodb的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。

mongodb各个节点常见的搭配方式为:一主一从、一主多从。

两种类型:主节点,可读可写。复节点,可以读和选举。

三种角色:primary,接收所有写操作。replicate,复制主节点的操作以维护相同的数据,不可以写操作,但是可以读操作,既可以投票也可以参与选举。arbiter,不保留任何副本,只有投票的功能,不参与选举。
请添加图片描述

选举原则

在主节点故障、主节点网络不可达等情况下,一个节点若得到最高的票数且是来自一半以上的成员,那么这节点就会成为主节点。若多个节点的有相同的票数且都获得一般以上的成员,那么MongoDB就会根据oplog来判读,使得拥有上一主节点最新副本的节点为新主节点。

通过设置priority来设置每个成员的所能投的票数,在默认下为1。

请添加图片描述

分片

在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求。当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量。这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据。

分片规则:默认使用Hash规则,范围规则多用于范围查询较多的场景。
请添加图片描述
● Shard:用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个replica set承担,防止主机单点故障。
● Config Server:mongod实例,配置服务器存储集群,存储了整个 ClusterMetadata,其中包括 chunk信息。
● Routers:mongos,在客户端和分片集群中间提供接口。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值