MongoDB配置及使用
- MongoDB软件下载
下载网址:https://www.mongodb.com/download-center#community
Windows系统下载:
Linux系统下载:
- Windows环境下安装
双击这个软件,
点击Next
选择I accept Next
选择Custom进行个人配置
选择Next
选择Next
Next
不用操作等着安装完成
安装完成后桌面出现这个图标
- MongoDB启动配置
首先找到MongoDB安装路径,找到bin目录下找到文件,双击运行文件,一般都会出现闪退现象。
出现闪退问题解决:
首先在D:\mongodb创建一个mongod.cfg文件内容为:
systemLog:
destination: file
path: d:\data\log\mongod.log
storage:
dbPath: d:\data\db
在MongoDB所在盘下的根目录创建一个data文件夹,并在data文件夹里创建一个db文件夹(例如,我的MongoDB在C盘的一个文件里,就在C盘根目录下创建data)
然后打开cmd,进入到MongoDB的bin目录下,输入mongod --dbpath c:/data
会出现图一所示情况,即修复成功,按上述步骤继续运行即可。
然后双击
出现这样的情况说明正常启动双击进行测试
测试2+2出现4说明安装启动成功
查看数据库中有几个表
双击
点击CONNECT
这个界面相当于MongoDB的图形化界面可以对数据库进行操作。
- Linux系统安装
- Java语言实现对MongoDB增删改查
数据库连接:
添加信息:
修改信息:
删除信息:
查询信息:
- MongoDB建立唯一索引
建立唯一索引的作用:如果建立唯一索引的时候,有数据重复,则会报错。
建立唯一索引的方式:db.集合名称.ensureIndex({"msg.MsgId":1},{unique:true});
- MongoDB主存分离
作用:避免数据库单点部署,以防止数据遭到毁灭性破坏。
一:主从复制
1: 首先看看模型图
3:下面我们就一一实践
第一步:我们把mongodb文件夹放在D盘和E盘,模拟放在多服务器上。
第二步:启动D盘上的mongodb,把该数据库指定为主数据库,其实命令很简单:>mongodb --dbpath='XXX' --master,
端口还是默认的27017
第三步:同样的方式启动E盘上的mongodb,指定该数据库为从属数据库,命令也很简单,当然我们要换一个端口,比如:8888。
source 表示主数据库的地址。
>mongod --dbpath=xxxx --port=8888 --slave --source=127.0.0.1:27017
第四步:从图中的红色区域我们发现了一条:“applied 1 operations"这样的语句,并且发生的时间相隔10s,也就说明从属数据库每10s
就向主数据库同步数据,同步依据也就是寻找主数据库的”OpLog“日志,可以在图中红色区域内发现”sync_pullOpLog“字样。
接下来我们要做的就是测试,惊讶的发现数据已经同步更新
4: 如果我还想增加一台从属数据库,但是我不想在启动时就指定,而是后期指定,那么mongodb可否做的到呢?答案肯定是可以的。
我们的主或者从属数据库中都有一个叫做local的集合,主要是用于存放内部复制信息。
看上面的log,提示没有主数据库,没关系,某一天我们良心发现,给他后期补贴一下,哈哈,再开一个cmd窗口,语句也就是
在sources中add一个host地址,最后发现数据也同步到127.0.0.1:5555这台从属数据库中....
5: 读写分离
这种手段在大一点的架构中都有实现,在mongodb中其实很简单,在默认的情况下,从属数据库不支持数据的读取,但是没关系,
在驱动中给我们提供了一个叫做“slaveOkay"来让我们可以显示的读取从属数据库来减轻主数据库的性能压力。
- MongoDB分片技术
一:分片
mongodb采用将集合进行拆分,然后将拆分的数据均摊到几个片上的一种解决方案。
下面我对这张图解释一下:
人脸:代表客户端,客户端肯定说,你数据库分片不分片跟我没关系,我叫你干啥就干啥,没什么好商量的。
mongos:首先我们要了解”片键“的概念,也就是说拆分集合的依据是什么?按照什么键值进行拆分集合....好了,mongos就是一个路由服务器,它会根据管理员设置的“片键”将数据分摊到自己管理的mongod集群,数据和片的对应关系以及相应的配置信息保存在"config服务器"上。
mongod:一个普通的数据库实例,如果不分片的话,我们会直接连上mongod。
二: 实战
首先我们准备4个mongodb程序,我这里是均摊在C,D,E,F盘上,当然你也可以做多个文件夹的形式。
1:开启config服务器
先前也说了,mongos要把mongod之间的配置放到config服务器里面,理所当然首先开启它,我这里就建立2222端口。
2: 开启mongos服务器
这里要注意的是我们开启的是mongos,不是mongod,同时指定下config服务器,这里我就开启D盘上的mongodb,端口3333。
3:启动mongod服务器
对分片来说,也就是要添加片了,这里开启E,F盘的mongodb,端口为:4444,5555。
4: 服务配置
哈哈,是不是很兴奋,还差最后一点配置我们就可以大功告成。
<1> 先前图中也可以看到,我们client直接跟mongos打交道,也就说明我们要连接mongos服务器,然后将4444,5555的mongod交给mongos,添加分片也就是addshard()。
这里要注意的是,在addshard中,我们也可以添加副本集,这样能达到更高的稳定性。
<2>片已经集群了,但是mongos不知道该如何切分数据,也就是我们先前所说的片键,在mongodb中设置片键要做两步
①:开启数据库分片功能,命令很简单 enablesharding(),这里我就开启test数据库。
②:指定集合中分片的片键,这里我就指定为person.name字段。
5: 查看效果
好了,至此我们的分片操作全部结束,接下来我们通过mongos向mongodb插入10w记录,然后通过printShardingStatus命令查看mongodb的数据分片情况。
这里主要看三点信息:
① shards:我们清楚的看到已经别分为两个片了,shard0000和shard0001。
② databases:这里有个partitioned字段表示是否分区,这里清楚的看到test已经分区。
③ chunks:这个很有意思,我们发现集合被砍成四段:无穷小 —— jack0,jack0 ——jack234813,jack234813——jack9999,jack9999——无穷大。分区情况为:3:1,从后面的 on shardXXXX也能看得出。