介绍:Mongo是非关系型数据库,是一个面向文档存储的数据库,操作简单和容易
Mongo里以集合对应mysql里的表,以文件对应mysql的表的一行记录,mongodb还支持对字段建立索引
|
数据类型 | 描述 |
---|---|
String | 字符串,存储数据常用的数据类型 |
– | – |
Integer | 整型数值,用于存储数值 |
Boolean | 布尔值,用于存储布尔值 |
– | – |
Double | 双精度浮点值,用于存储 |
Array | 用于将数组或列表或多个值存储为一个键 |
– | – |
TimeStamp | 时间戳,记录文档修改或添加的具体 |
Object | 用于内嵌文档 |
– | – |
Null | 用于创建空值 |
Object ID | 对象ID,用于创建文档的ID |
– | – |
Binary Data | 二进制数据,用于存储二进制数据 |
Date | 日期时间,用UNIX时间格式来存储当前日期或事件, |
安装与集群搭建:
mongo与redis一样,启动时都是依据配置文件进行启动的
mongod:服务端命令
mongo :客户端命令
mongos :分片群集的控制器和查询路由器,分片和路由使用的
config.conf配置文件:
dbpath=./data #数据文件存放位置
logpath=./logs/config.log # 日志文件存放路径
port=28017 #mongod服务使用的端口
bind_ip=0.0.0.0 #这里我设置公网ip启动报错,使用127.0.0.1外部又无法访问mongdb,设置为0.0.0.0这样外网就能访问了
logappend=true
maxConns=5000
启服务:
mongod -f config.conf
登陆:
mongo -port 28017
常用命令:
show dbs #查看数据库列表
use databaseName #若databaseName数据库存在,连接该数据库,不存在新建数据库
db.stats() #统计数据库信息
db #查看当前数据库
show roles #查看数据库用户角色权限
db.createCollection('要新建的表名') #新建一个表
show collections #查看当前数据库下的表
db.表名.drop() #删除当前数据库指定表
db.dropDatabase():删除当前数据库
1:掺入数据:_id作为表里的数据的唯一标识
每插入一个数据时,若没有设置“_id”,mongodb会自动生成一个,可自己设置。
db.表名.insert(数据);表名没有时自动创建,对数据的插入会自动生成一个_id,若是插入重复时,会报错。
db.sss.insert("_id":1,"name":"wgg","age":"35");
db.表名.save(数据):表不存在时会创建,对重复的_id插入时不会报错,会覆盖之前的内容
db.sss.save({"_id":1,"name":"wgg","age":"38"});
2:查询数据
db.表名.find() :查询表中的所有数据
db.表名.find(条件) :按条件查询
db.sss.find({"name":"chen"});
db.表名.findOne :查询第一条
db.sss.findOne({"name":"chen"})
db.表名.find.limit(数量):限制数量
db.表名.find.skip(数量):跳过指定数量
db.collectionName.find().count():查询数量
db.sss.find().count();
3:修改数据:
db.表名.update({“条件字段名”:“字段值”},{$set:{“要修改的字段名”:“修改后的字段值”}})
db.sss.update({"name":"wgg"},{$set:{"age":"39"}});
4:删除数据
db.表名.remove(条件)
db.sss.remove({"_id":2});
mongodb集群搭建:
要存储的数据分在不同的分片服务器上,从而提高存储容量和提高服务器的并发性能
Replica Set:由一个Primary主节点,一个Arbiter仲裁节点,多个Secondary节点组成,主节点提供读写服务,Secondary一直从Primary节点同步数据,而Arbiter时不存储数据的,他是在主节点故障时,投票选出主节点的(就是一个主从结构外加Arbiter)。
Shard:分片服务器,用于存储实际的数据块,也可理解为是一个Replica Set,
Config Server :配置服务器,存储了整个分片集群的配置信息,包括chunk信息。
Routers :前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用
配置说明 | 路由服务器 | 配置服务器 | 分片服务器(shard1) | 分片服务器(shard2) |
---|---|---|---|---|
127.0.0.1 | Port:27001 | Port:27002 | Port:27003 | |
127.0.0.1 | Port:37001 | Port:37002 | Port:37003 | |
127.0.0.1 | Port:27017 | Port:47001 | Port:47002 | Port:47004 |
注:此处ip为127.0.0.1,若想让外部能访问mongdb,可将127.0.0.1修改为0.0.0.0,
原理:外部通过路由服务器连接到集群,配置服务器则配置集群的相关属性,如数据块的大小(chunk),而分片服务器1,2则是我们通过路由服务器实际进行数据操作的地方。
步骤1:配置服务器config
dbpath=/data/mongodb/config //数据文件存放位置
logpath=/data/logs/config.log //日志文件
port=27001 //端口号
bind_ip=127.0.0.1
logappend=true
fork=true #是否以后台的方式运行
maxConns=5000
replSet=configs //很重要,这是复制集的名称
configsvr=true //设置参数为true
mongod -f 27001.conf
启动三台配置服务器后,配置config服务器的复制集
mongo --host 127.0.0.1 --port 27001
config={_id:"configs",members:[{_id:0,host:"127.0.0.1:27001"},{_id:1,host:"127.0.0.1:37001"},{_id:2,host:"127.0.0.1:47001"}]} //创建复制集
rs.initiate(config) //初始化复制集
或者
rs.initiate() //设置本机30.23.8.189为主节点
rs.add('127.0.0.1:37001') //添加备份机
rs.add('127.0.0.1:47001') //添加备份机
rs.status() //查看状态
步骤2:配置分片服务器
dbpath=/data/mongodb/shard1
logpath=/data/logs/shard1.log
port=27002
logappend=true
fork=true
maxConns=5000
bind_ip=127.0.0.1
shardsvr=true
replSet=shard1 #很重要,分片路由器复制集的名称
启动三台服务器后,配置主节点、从节点、仲裁节点
mongo --host 127.0.0.1 --port 27002
rs.initiate() //设置本机27002为主节点
rs.add('30.23.8.182:27001') //添加备份机
rs.addArb('30.23.8.189:27001') //添加仲裁节点
rs.status()
步骤3:同理配置第三台分片服务器,
复制集名称要改,端口,dbpath,logpath需要修改
然后配置主节点、从节点、仲裁节点
步骤4:配置路由服务器
1:配置文件
vim mongos.conf
logpath=/data/mongodb/logs/mongos.log
logappend = true
port = 27017
bind_ip=127.0.0.1
fork = true
configdb = configs/127.0.0.1:17001,127.0.0.1:27001,127.0.0.1:37001
maxConns=20000
启配置服务器用mongos不用mongod
mongs -f mongos.conf
启用分片功能:
mongo --host 127.0.0.1 --port 27017
mongos> use gateway
mongos> sh.addShard("shard1/127.0.0.1:27002,127.0.0.1:37002,127.0.0.1:47002")
mongos> sh.addShard("shard2/127.0.0.1:27003,127.0.0.1:37003,127.0.0.1:47003")
mongos> sh.status() //查看群集状态
#此处为添加两台分片服务器,后续添加的也会均匀分配分片数据
相关属性配置:
设置分片chunk大小
mongos> use config
mongos> db.settings.save({"_id":"chunksize","value":1})