题外话

工作3年,了解的技术颇多,但都是一知半解,了解不是很透澈。用过的技术,就像猴子搬过的包谷,搬一个丢一个。几年风雨,真有点一缕清风过,片叶不沾身的味道。

为强化知识点,提升文档及学习能力,我把以前做过的各种技术点,建成一个分类工具库。在做好每一个技术工具库后,将自己的心得体会写成博客。

正文

一、简介

  • 什么是MongoDB

MongoDB是一种非关系型的基于分布式文档存储的数据库(系统)。支持的数据结构是类似json的BSON格式,而BSON格式本身就支持保存二进制格式的数据,

所以可以存储比较复杂的数据类型。主要解决海量数据访问效率问题和海量计算问题,达到高扩展性、高性能、灵活数据模型、高可用性。

  • 特点

  1. 安装部署简单,支持多种编程语言。
  2. 使用二进制存储数据,适合存储各种大型媒体(音频)对象。
  3. 无完整性约束,支持内嵌文档和数组,随时可以存储自定义的数据格式,支持运行时横向扩展、运行时索引操作。
  4. 无对SQL语言解析过程和对表的锁定与解锁过程,减少很多额外开销。
  5. 支持索引,又是基于键值对存储,使用内存映射访问数据库,有利于提高查询速度。
  6. 支持分配预处理,其中就有提前给每个数据库分配增长大小的文件集,可避免潜在的文件碎片。
  7. 支持复制,分片。
  • 缺陷

  1. 虽然支持内嵌和数组,但是在多表复杂关联情况下就会力不从心。
  2. 无完整性约束,较难保证数据可靠性。
  3. 预分配数据库空间可能造成存储浪费。
  • 实用场景

  1. 做缓存用:由于MongoDB是文件存储,可以保证数据不丢失;使用内存映射访问数据库,访问速度很高;单独服务,不会想IIS被GC自动回收。
  2. 低成本:需快速开发,成本估计较低的项目。
  3. 采集数据:适合存储用于统计功能的高并发采集数据。
  4. 网站数据:MongoDB非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。

二、安装MongoDB

  • 下载安装包

下载地址:https://www.mongodb.com/download-center,根据自己的电脑配置下载相应的安装包。

我下载的是:mongodb-win32-x86_64-2008plus-ssl-3.4.2-signed.msi 这个Windows功能增强“插件”。不用解压,方便直接安装。

  • 建立安装文件夹

在安装磁盘建立文件夹,我是安装在D盘,所以在D盘建立D:\mongodb。内部手动再建立3个文件夹。D:\mongodb\data\db,用于放数据库文件;

D:\mongodb\log,用于放日志文件;D:\mongodb\conf,用于存放配置文件。

  • 正式安装

点击安装,将数据库安装到D:\mongodb文件夹下面,最终安装效果如图:

  • 再在D盘建立两个文件夹,为副本集做准备(不做副本集,可以不管这一步)

在D盘在新建2个文件夹,分别是mongodb1,mongodb2,再将mongodb文件夹中的信息复制粘贴到这2个文件夹里面。

  • CMD将MongoDB安装为安装多个windows服务,并启动

分别在CMD中执行下面3个命令,生成windows服务。

D:\mongodb\bin\mongod --port 27018 --dbpath D:\mongodb\data\db --logpath d:\mongodb\log\mongodb.log --replSet test

--logappend --serviceDisplayName "MongoDB"  --serviceName "MongoDB" --install

D:\mongodb1\bin\mongod --port 27019 --dbpath D:\mongodb1\data\db --logpath d:\mongodb1\log\mongodb.log --replSet test

--logappend --serviceDisplayName "MongoDB1" --serviceName "MongoDB1" --install

D:\mongodb2\bin\mongod --port 27020 --dbpath D:\mongodb2\data\db --logpath d:\mongodb2\log\mongodb.log --replSet test

--logappend --serviceDisplayName "MongoDB2" --serviceName "MongoDB2" --install

      (replSet 是为了后面做副本集做准备,如果只是单服务,只需要执行第一个就可以了

       下表为mongodb启动的参数说明

启动服务

net start MongoDB

net start MongoDB1。。。

三、可视化工具操作

在网上找了一圈,找到很多工具强大的可视化工具。MongoDB Cloud ManagerMongoDB compassMongoDB Atlas

MongoClientmongo-expressadminMongoNoSQL Manager for MongoDBrobomongo都是比较好的工具,我选择使用

robomongo,原因就是网上说这款比较稳定,其他的没有具体试过,后期把每个拿来用用,看看他们的优缺点。

  • 链接数据库

如图所示,打开robomongo,点击file->connection,在MongoDB Connections 中可以操作链接设置。新建链接,点击create,

出现设置窗口,输入安装时配置的IP:Port,点击save即可。

  • 数据库操作

具体操作我看的 MongoDB查询文档,这个上面对MongoDB讲解比较全面,总结一句话,除了关键字与特殊操作符,其他都是JSON操作

四、MongoDB副本集模式

用多个节点进行同一数据的同步操作,使多个节点上都拥有同一数据的副本,并且在主节点出现故障的时候,通过内部心跳选举机制自动

重新选举一个节点成为主节点。如图所示:

特点

  • 实现故障转移,提高容灾率(提高数据安全性和数据可用性)
  • 可实现灾难恢复
  • 无停机维护(如备份,索引重建,压实)
  • 可实现读写分离。
  • 副本集对应用程序是透明

串联数据库,实现副本集

  • 连接主节点

     D:\mongodb\bin\mongo --port 27018

     

  • 加节点配置   

config = { _id:"test", members:[
... {_id:0,host:"127.0.0.1:27018"},
... {_id:1,host:"127.0.0.1:27019"},
... {_id:2,host:"127.0.0.1:27020"}]
... }

输出:

  • 初始化配置

rs.initiate(config);

        

  • 查看集群节点状态

      rs.status();

  • 测试:

操作数据库之前是没有数据的,当想住节点插入数据以后,副节点异步同步数据成功。当更新主节点信息时,副节点信息也跟着更新。

        

  • 故障转移测试

        将主节点停掉,连接副节点D:\mongodb\bin\mongo --port 27019,查看状态rs.status();可以看到主节点已经转移了。

五、补充

1、实现读写分离还未实现,后续需要测试。

2、持久化中间件:MongoDB.Bson

2、推荐一篇文章,深入副本集:http://www.lanceyan.com/tech/mongodb_repset2.html

功能总结之MongDB初探的更多相关文章

  1. 关于 vue-cli v2.8.2

    我在撰写<Vue2实践揭秘>时采用的 vue-cli 版本是 v2.5.1,由于实体书的出版周期比电子书的要长,所以到全书出版vue-cli已经更新到 v2.8.2 了,我在书中曾经对 v ...

  2. 《Spring实战》学习笔记-第五章:构建Spring web应用

    之前一直在看<Spring实战>第三版,看到第五章时发现很多东西已经过时被废弃了,于是现在开始读<Spring实战>第四版了,章节安排与之前不同了,里面应用的应该是最新的技术. ...

  3. Bash 实例,第一部分

    您可能要问:为什么要学习 Bash 编程?好,以下是几条令人信服的理由: 已经在运行它 如果查看一下,可能会发现:您现在正在运行 bash.因为 bash 是标准 Linux shell,并用于各种目 ...

  4. Scrapy 框架进阶笔记

    上一篇简单了解了scrapy各个模块的功能:Scrapy框架初探 -- Dapianzi卡夫卡 在这篇通过一些实例来深入理解 scrapy 的各个对象以及它们是怎么相互协作的 settings.py ...

  5. vue学习之vue基本功能初探

    vue学习之vue基本功能初探: 采用简洁的模板语法将声明式的将数据渲染进 DOM: <div id="app"> {{ message }} </div> ...

  6. Azure中国CDN全球覆盖功能初探

    在不久前的4月初,Azure中国官网上简短地发布了其CDN中“标准版 Zone 2”功能.一开始笔者尚有些摸不着头脑,这个“Zone 2”具体指的是什么呢?好在后来官网更新了信息描述如下: 这下就比较 ...

  7. Team Foundation Server 15 功能初探

    1. 系统安装 1.1. 系统需求 新版的TFS的系统要求发生了很大的变化,主要包含: - 不再支持32位的操作系统,只支持64位操作系统 - 只支持SQL 2014和SQL Server 2016, ...

  8. UE4高级功能--初探超大无缝地图的实现LevelStream

    转自:http://blog.csdn.net/u011707076/article/details/44903223 LevelStream 实现超大无缝地图--官方文档学习 The Level S ...

  9. 优秀个人免费私有云OwnCloud 8.0终于发布 - 亮眼新功能初探简介

    OwnCloud是一个基于Linux的私有云开源项目,用户可以免费使用它来搭建自己的私有云来进行文件和多媒体等的分享. 本人有幸在大概一年多前因为项目需要而接触和使用到OwnCloud,但不幸的是当时 ...

随机推荐

  1. localStorage , sessionStorage ,cookie 使用介绍

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. arcpy.mapping常用四大件-StyleItem

    arcpy.mapping常用四大件-StyleItem by 李远祥 StyleItem 笔者将其归类到arcpy.mapping的四大件当中,主要是因为它的独特之处,就是其能力是直接读取.styl ...

  3. ArcGIS制图表达Representation-符号制作

    ArcGIS制图表达Representation-符号制作 by 李远祥 在ArcGIS的符号里面,存在着两种符号体系,一种是传统的标准符号体系,一种是制图表达符号体系.标准符号几乎被绝大部分ArcG ...

  4. 二叉搜索树Java实现(查找、插入、删除、遍历)

    由于最近想要阅读下 JDK1.8 中 HashMap 的具体实现,但是由于 HashMap 的实现中用到了红黑树,所以我觉得有必要先复习下红黑树的相关知识,所以写下这篇随笔备忘,有不对的地方请指出- ...

  5. CTR预估中的贝叶斯平滑方法及其代码实现

    1. 背景介绍 广告形式: 互联网广告可以分为以下三种: 1)展示广告(display ad) 2)搜索广告(sponsored search ad) 3)上下文广告(contextual ad)   ...

  6. Dynamics CRM 2015-Form之控制Ribbon Button

    在上一篇中,我用一个例子,简单介绍了如何添加Ribbon Button,以及如何理解RibbonDiffXml,对这方面还不清楚的,可以先看看这篇博文:Dynamics CRM 2015-Form之添 ...

  7. Spring DM所提供的Bundle监听接口OsgiBundleApplicationContextListener

    通过使用Spring DM提供的监听接口,我们可以更好的对服务进行管控,其实该接口也非常简单就能使用上,只要自定义一个类实现OsgiBundleApplicationContextListener接口 ...

  8. SpringMVC中404错误解决方法总结

    在新手配置Spring MVC的时候,感觉都弄好了之后,运行起来却显示404错误. 网上对出现404的问题不同情况,都有了解决方法,前几天我也遇到了这个问题,顺便把这些问题总结一下. 解决问题最重要的 ...

  9. Docker网络代理设置

    背景 在一些实验室环境,服务器没有直接连接外网的权限,需要通过网络代理.我们通常会将网络代理直接配置在/etc/environment./etc/profile之类的配置文件中,这对于大部分操作都是可 ...

  10. 原生js实现轮播图

    原生js实现轮播图 很多网站上都有轮播图,但找到一个系统讲解的却很难,因此这里做一个简单的介绍,希望大家都能有所收获,如果有哪些不正确的地方,希望大家可以指出. 原理: 将一些图片在一行中平铺,然后计 ...