美文网首页
2021-04-20

2021-04-20

作者: 米_8d62 | 来源:发表于2021-04-20 21:01 被阅读0次

mongo 文档型数据库 是nosql数据库的一种

版本 最新版 4.4


mongo 使用场景

  • high performance 高并发读写
  • high storage 高效存储和高效访问 TB PB
  • high scalability && high Availability 高可扩展和高可用性
  1. 社交朋友圈 地理位置 附近的人
  2. 游戏场景 装备 积分
  3. 物流 业务状态的不断变更
  4. 物联网 日志信息
  5. 视频直播 用户信息 点赞等

mysql & mongo

SQL术语 Mongo术语 说明
database database 数据库
table collection 数据库表/集合
row document 数据库行/文档
column field 字段/域
index index 索引
table join 表连接 mongo不支持
嵌入文档 mongo利用嵌入式文档代替表连接
primary key primary key Mongo自动将_id设置为主键

mongo 中的数据类型

数据类型 描述
String 字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。
Integer 整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。
Boolean 布尔值。用于存储布尔值(真/假)。
Double 双精度浮点值。用于存储浮点值。
Min/Max keys 将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。
Array 用于将数组或列表或多个值存储为一个键。
Timestamp 时间戳。记录文档修改或添加的具体时间。
Object 用于内嵌文档。
Null 用于创建空值。
Symbol 符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。
Date 日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。
Object ID 对象 ID。用于创建文档的 ID。
Binary Data 二进制数据。用于存储二进制数据。
Code 代码类型。用于在文档中存储 JavaScript 代码。
Regular expression 正则表达式类型。用于存储正则表达式。

mongo windows 单体安装

下载并安装Mongodb(可以在MongoDB官网下载安装包:https://www.mongodb.com/download-center#community


mongo linux 安装

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.5.tgz

tar -zxvf mongodb-linux-x86_64-rhel70-4.4.5.tgz -C /usr/local

mv mongodb-linux-x86_64-rhel70-4.4.5 /usr/local/mongodb

mkdir data logs conf

cd logs/

touch mongodb.logs

mongodb.conf

port=27017
bind_ip=0.0.0.0
logpath=/usr/local/mongodb/myrs_17017/logs/mongod.logs
dbpath=/usr/local/mongodb/myrs_27017/data/db
logappend=true
pidfilepath=/usr/local/mongodb/myrs_27017/bin/mongod.pid
fork=true
oplogSize=1024
replSet=myrs

/etc/systemd/system/mongodb.service

[Unit]
Description=mongodb  
After=network.target remote-fs.target nss-lookup.target  
  
[Service]  
Type=forking  
RuntimeDirectory=mongodb
RuntimeDirectoryMode=0751
PIDFile=/usr/local/mongodb/bin/mongodb.pid
ExecStart=/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/conf/mongodb.conf 
ExecStop=/usr/local/mongodb/bin/mongod --shutdown --config /usr/local/mongodb/conf/mongodb.conf 
PrivateTmp=false  
  
[Install]  
WantedBy=multi-user.target

启动

./mongod --bind_ip_all -dbpath=/usr/local/mongodb/data -logpath=/usr/local/mongodb/logs/mongodb.log -logappend -port=27017 -fork

systemctl start mongodb.service     #启动服务

systemctl stop mongodb.service      #停止服务

systemctl restart mongodb.service   #重新启动服务

systemctl status mongodb.service    #查看服务当前状态

systemctl enable mongodb.service    #设置开机自启动

systemctl disable mongodb.service   #停止开机自启动

mongo 创建用户

use admin
db.createUser({
user:'admin',
pwd:'123456',
roles:[{role:'root',db:'admin'}]
})


mongo 增删改查

# 创建数据库
use runoob;
# 插入内容
db.runoob.insert({"name":"菜鸟教程"});
# 删除数据库
db.dropDatabase();
# 创建集合
db.createCollection("集合名");
# 删除集合
db.collection.drop();
# 插入集合
db.comment.insert(集合);
# 插入多个
db.comment.insertmany(集合);
# 查询一条
db.collection.findOne();
# 投影查询
db.collection.find({条件},{展示字段:1, 不展示字段:0});
# 查询集合 and
db.collection.find({key1:value1, key2:value2}).pretty();
# 查询集合 or
db.col.find({$or:[{"by":"菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty();
# 查询范围 $gt $gte $lt $lte 
db.col.find({likes : {$gt : 100}});
# limit
db.col.find({},{"title":1,_id:0}).limit(2);
# sort 1 升序 -1 降序
db.COLLECTION_NAME.find().sort({KEY:1});
# skip 跳过
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER);
# 覆盖修改
db.comment.update({_id:1}, {likenum:NumberInt(1001)});
# 局部修改
db.comment.update({_id:1}, {$set: {likenum:NumberInt(1001)}});
# 删除
db.comment.remove({_id:1});

mongo 索引

#索引创建
db.collection.createIndex(keys, options);
#查询索引
db.col.getIndexes()
#删除集合所有索引
db.col.dropIndexes()
#删除索引
db.col.dropIndex("索引名称")


mongo 聚合函数

MongoDB 中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。

求和
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}]);
求平均
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}]);
最小值
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}]);
在结果文档中插入值到一个数组中。
db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])


mongo 集群搭建


mongo 事务的支持

mongo 从4.0版本后支持事务处理

事务只能在复制集下才能生效,并不支持在单点模式下!

事务操作 事务作用在session上

session=db.getMongo().startSession();

session.startTransaction();

coll_2=session.getDatabase("test").coll_2;

coll_2.insert({xy:"syz"})

use test

//未查到

db.coll_2.find({});

session.commitTransaction();

//成功插入

db.coll_2.find({});

//回滚事务操作

session.abortTransaction();


mongo 命令

https://www.cnblogs.com/phpzhou/articles/5390042.html


mongo 复制(副本集) 数据一致

mongodb的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。
主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。


replication.png

搭建副本集
一主一从一仲裁

启动

./mongod --bind_ip_all --replSet 'myrs' -dbpath=/usr/local/mongodb/myrs_27017/data/ -logpath=/usr/local/mongodb/myrs_27017/logs/mongodb.logs -logappend -port=27017 -fork

./mongod --bind_ip_all --replSet 'myrs' -dbpath=/usr/local/mongodb/myrs_27018/data/ -logpath=/usr/local/mongodb/myrs_27018/logs/mongodb.logs -logappend -port=27018 -fork

./mongod --bind_ip_all --replSet 'myrs' -dbpath=/usr/local/mongodb/myrs_27019/data/ -logpath=/usr/local/mongodb/myrs_27019/logs/mongodb.logs -logappend -port=27019 -fork

配置

#数据存放目录
dbpath=/usr/local/mongodb/myrs_27017/data/db
#日志存放目录
logpath=/usr/local/mongodb/myrs_27017/logs/mongod.logs
#进程文件,方便停止mongodb
pidfilepath=/usr/local/mongodb/myrs_27017/bin/mongod.pid
#为每一个数据库按照数据库名建立文件夹存放
directoryperdb=true
#以追加的方式记录日志
logappend=true
# 设置副本集名称id与replSet:rs0 要一致,rs0可以是自定义的名称
replSet=myrs
#mongodb所绑定的ip地址
bind_ip=0.0.0.0
#mongodb进程所使用的端口号,默认为27017
port=27017
#mongodb操作日志文件的最大大小。单位为Mb,默认为硬盘剩余空间的5%
oplogSize=10000
#以后台方式运行进程
fork=true
#不预先分配存储
noprealloc=true
#数据存放目录
dbpath=/usr/local/mongodb/myrs_27018/data/db
#日志存放目录
logpath=/usr/local/mongodb/myrs_27018/logs/mongod.logs
#进程文件,方便停止mongodb
pidfilepath=/usr/local/mongodb/myrs_27018/bin/mongod.pid
#为每一个数据库按照数据库名建立文件夹存放
directoryperdb=true
#以追加的方式记录日志
logappend=true
# 设置副本集名称id与replSet:rs0 要一致,rs0可以是自定义的名称
replSet=myrs
#mongodb所绑定的ip地址
bind_ip=0.0.0.0
#mongodb进程所使用的端口号,默认为27018
port=27018
#mongodb操作日志文件的最大大小。单位为Mb,默认为硬盘剩余空间的5%
oplogSize=10000
#以后台方式运行进程
fork=true
#不预先分配存储
noprealloc=true
#数据存放目录
dbpath=/usr/local/mongodb/myrs_27019/data/db
#日志存放目录
logpath=/usr/local/mongodb/myrs_27019/logs/mongod.logs
#进程文件,方便停止mongodb
pidfilepath=/usr/local/mongodb/myrs_27019/bin/mongod.pid
#为每一个数据库按照数据库名建立文件夹存放
directoryperdb=true
#以追加的方式记录日志
logappend=true
# 设置副本集名称id与replSet:rs0 要一致,rs0可以是自定义的名称
replSet=myrs
#mongodb所绑定的ip地址
bind_ip=0.0.0.0
#mongodb进程所使用的端口号,默认为27019
port=27019
#mongodb操作日志文件的最大大小。单位为Mb,默认为硬盘剩余空间的5%
oplogSize=10000
#以后台方式运行进程
fork=true
#不预先分配存储
noprealloc=true

连接节点

config = {_id: 'myrs', members: [
{_id: 0, host: '192.168.139.129:27017'},
{_id: 1, host: '192.168.139.129:27018'},
{_id: 2, host: '192.168.139.129:27019',"arbiterOnly":true}]
}

config = {_id: 'myshardrs01', members: [
{_id: 0, host: '192.168.139.129:27018'},
{_id: 1, host: '192.168.139.129:27118'},
{_id: 2, host: '192.168.139.129:27218',"arbiterOnly":true}]
}

rs.initiate(config);

rs.status();

主节点添加数据后 从节点可以进行数据同步

登陆主节点27017

db.comment.insert({"articleid":"100002","content":"今天天气真好,阳光明媚","userid":"1003","nickname":"jack","createdatetime":new Date()})

mongo --host localhost --port 27018

rs.slaveOk(true)

rs方法


image.png

主节点选举原则

触发条件:
主节点宕机、主节点网络不可达、人工干预

1) 票数最高
2) 大多数成员支持


mongo 分片 数据不一致

在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求。

使用分片场景

  • 复制所有的写入操作到主节点
  • 延迟的敏感数据会在主节点查询
  • 单个副本集限制在12个节点
  • 当请求量巨大时会出现内存不足。
  • 本地磁盘不足
  • 垂直扩展价格昂贵

组成结构:

分片 路由 配置
负责存储数据库数据。 负责将查询和写操作路由到对应Shard节点中 用于存储集群和Shard节点的元数据,即各Shard节点中包含哪些数据的信息。
分片集群.png

mongo Java


mongo 整合 spring cloud

pom

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

yml

server:
  port: 8080

spring:
  application:
    name: yzl-mongo
  #数据源配置
  data:
    mongodb:
      #主机地址
      host: 192.168.32.137
      #默认端口时27017
      #也可以使用url连接
      #url: mongodb://192.168.32.137:27017/comment
      port: 27017
      database: comment

相关文章

网友评论

      本文标题:2021-04-20

      本文链接:https://www.haomeiwen.com/subject/bhkolltx.html