1.简述
MongDB是一个强大、灵活而可扩展的数据存储系统,其将强大的可扩展特性与关系库最有用的特性进行了整合,像:次级索引,范围查询和排序等特性。而MongDB也内建了类似MapReduce汇聚和地理空间索引等有用特性。
历经艰苦的努力,MongDB也拥有了易操作和用户友好等特性,同时,其还具备开发友好的模型、管理友好的配置选项及用起来感觉轻松自然的API和数据库shell。MongDB尽力让使用者省心,从而可以专注于编程而不用担心数据存储方面的问题。

2.特性
1)丰富的数据模型
MongDB是一个面向文档的数据库,而不是关系数据库。其之所以放弃关系模型的原因是为了易于扩展,当然,还有其他的优势方面的考虑。MongDB的理念是用一个更灵活的模型——“文档”,去替代关系库中行的概念。通过文档中嵌入文档和数组,其可以实现通过一条记录来表示复杂的层级关系,这点非常适合使用现代面向对象语言的开发者考虑数据的方式。
MongDB中没有模式的概念,一个文档的键无需通过任何方式预先定义或固定。通常,没有模式发生改变,就无需进行大量数据的迁移。新增或删除键可以在应用层面进行处理,而无需强制他们都适应固定且同样的格式。这在处理数据模型演化时给予了开发者许多灵活性。
2)易扩展性
现代应用的数据规模正以难以置信的速度增长。高级传感技术、可用带宽的增长以及互联网上手持设备的流行,这都将创建一个场景,其中哪怕小规模的应用都将产生前所未有的大量数据,TB级的数据,是之前闻所未闻的数据量,而现在却随处可见。
开发者数据量增长的同时,导致其将会面临一个困难的决定,他们将如何扩展他们的数据库?如果扩展数据库,将会面临纵向扩展(服务器硬件升级的更为强大)或横向扩展(将数据分布到多台服务器上)。纵向扩展通常是最容易的方法,但它也带来诸多缺陷,比如:更强大的服务器通常会很昂贵,当买不起更强大的服务器时,这种方法将到达一个物理上的硬性限制。对于人们最想建的大型web应用来说,通过一台服务器来实现不太可能,其成本也是难以承受的。
而横向扩展则兼具扩展性和经济性,为了增加存储空间和提升性能,你可以另外购买一台服务器,并将其加入你目前的集群。MongDB一开始就设计为横向扩展,其面向文档的数据模型允许它将数据在多个服务器间自动拆分,数据和负载能在集群内进行平衡,文档可以自动重新分布,这使得开发者专注应用开发,而非扩展数据库。当需要更多容量时,只需将一台新服务器加入现有集群,并让数据库自己想办法完成后续的一切。
3)维持高性能
卓越性能是MongDB的主要目标,并且,这也已经导致了有关它的很多设计决定。MongDB用二进制线性协议作为和服务器交互的主模式,其动态填补文档并预先分配数据文件以额外空间换取稳定的性能。MongDB默认存储引擎中使用内存映射文件,并将内存管理的任务交给操作系统。此外,其还具有动态查询优化器的特点,这使得它能记住执行查询的最快方式。简而言之MongDB几乎每个方面都是为维持高性能而设计。
虽然,MongDB足够强大且尽力试图保留关系库的很多特性,但其并非被设计来完成关系库的所有事情。任何时候,MongDB都尽量将处理和逻辑交给客户端的驱动或代码,保持这种流线设计是MongDB能获得如此高性能的原因之一。
4)易于管理
MongDB通过服务器自我管理来尽可能的简化数据库的管理。除了启动数据库服务器,很少需要人工管理。如果主库宕掉了,MongDB能自动切换到备库并将这个备库提升为主库。分布式环境中,集群只需要被告知一个新节点的加入,然后,MongDB将自动对其进行集成和配置。
5)其他特点
i)索引:MongDB支持通常的次级索引,允许各种快速查询,且支持唯一、复合及地理空间索引等。
ii)存储java脚本:开发者能在服务器端存储和使用java函数,以替代存储过程功能。
iii)汇聚:MongDB支持MapReduce和其他汇聚工具。
iv)固定大小集合:封顶集合大小固定,且其适用于类似日志的某些数据类型。
v)文件存储:MongDB支持存储大文件和文件元数据的易于使用的协议。
此外,MongDB并不支持关系库的某些常见特点,特别是连接(join)和复杂的多行事务。这些也是允许强大扩展特性的架构所决定的,因为分布式系统中难以支持关系库的那些特点。
3.架构
1)单库:如果单个MongDB库能承担所有数据和负载,且不考虑数据冗余和高可用,单节点没问题,研发和测试环境,这个架构比较常见,也比较容易部署,这里就不再多说了。
2)主从复制:主从复制架构是MongDB支持的最常见的复制环境。这种架构非常灵活,且能被用于备份、故障切换、读扩展及更多其他用途,这种架构至少需要两台服务器配置成一主一备,也可以用多台服务器配置成一主多备,当然,也可以通过同一服务器上的多个实例配置成一主一备或一主多备,结果就是,同一服务器上的多个实例实现的这种架构,无论在其灵活性、备份、高可用还是读扩展等方面,其作用都会大打折扣,生产环境中还是多个硬件服务器配置成的主备库架构更常见。
3)复制集:复制集基本就是一个可以自动故障切换的主备库集群。其和前述的主备库架构之间的最大差别就是复制集并没有一个固定的主库,而是由集群选出一个主库,当前的主库宕掉后,另外一个服务器上的备库会转变为主库。另外,两种架构都总是有一个主库和一个或多个从库。复制集的好处是一切都是自动的,集群自己会自己完成很多管理任务,将从库提升为主库并确保数据的一致性。对开发者来说,这种架构的易用性也很好,只需确定集群中的服务器,驱动程序将自动发现所有的服务器,如果当前服务器宕掉后会自动完成故障切换。
4)分片:所谓分片,就是将数据拆分并将拆分后的不同部分数据存储到不同的服务器,这样,在没有升级为更强大硬件服务器的情况下,才可能存储更多数据和处理更多负载。分片分为手工分片和自动分片。
i)手工分片:几乎针对任何数据库系统,都可以进行手工分片。其中,每个应用都保持到几个不同数据库服务器的连接,这些数据库服务器是相互完全独立的,应用代码负责管理将不同的数据存储到不同的服务器上,以及查询相应的服务器以获取到正确的结果数据。手工分片会运行的很好,但服务器的增减以及数据的分布和负载平衡模式发生改变时,相应工作人工维护起来会越来越困难。
ii)自动分片:MongDB支持自动分片,这消除了人工分片中管理维护工作的困难,MongDB负责维护数据的自动拆分和再平衡,同时,开发者也不用关心数据分布和负载均衡问题。MongDB自动分片时,会将其集合分散成小的数据块,这些数据块分布到不同的分片(服务器),其中的每个分片负责总数据集合中的一部分子集。通过mongos路由进程,MongDB实现了数据分片对用户应用程序的透明,应用程序无需关心什么分片存储什么数据,甚至数据被分散到多个分片服务器上。所有数据分片工作,都是通过所有分片前端的mongos路由进程来完成。应用的工作只是知道mongos进程的连接方式,并像连接MongDB一样成功
连接它就可以了。

浅谈MongoDB基础及架构的更多相关文章

  1. 浅谈HTML5单页面架构(二)——backbone + requirejs + zepto + underscore

    本文转载自:http://www.cnblogs.com/kenkofox/p/4648472.html 上一篇<浅谈HTML5单页面架构(一)--requirejs + angular + a ...

  2. 浅谈大型web系统架构

    动态应用,是相对于网站静态内容而言,是指以c/c++.php.Java.perl..net等服务器端语言开发的网络应用软件,比如论坛.网络相册.交友.BLOG等常见应用.动态应用系统通常与数据库系统. ...

  3. 转:浅谈大型web系统架构

    浅谈大型web系统架构 动态应用,是相对于网站静态内容而言,是指以c/c++.php.Java.perl..net等服务器端语言开发的网络应用软件,比如论坛.网络相册.交友.BLOG等常见应用.动态应 ...

  4. AngularJS进阶(二十五)requirejs + angular + angular-route 浅谈HTML5单页面架构

    requirejs + angular + angular-route 浅谈HTML5单页面架构 众所周知,现在移动Webapp越来越多,例如天猫.京东.国美这些都是很好的例子.而在Webapp中,又 ...

  5. 【ZZ】浅谈大型web系统架构 | 菜鸟教程

    浅谈大型web系统架构 http://www.runoob.com/w3cnote/large-scale-web-system-architecture.html

  6. 五分钟DBA:浅谈伪分布式数据库架构

    [IT168 技术]12月25日消息,2010互联网行业技术研讨峰会今日在上海华东理工大学召开.本次峰会以“互联网行业应用最佳实践”为主题,定位于互联网架构设计.应用开发.应用运维管理,同时,峰会邀请 ...

  7. 开发技术--浅谈python基础知识

    开发|浅谈python基础知识 最近复习一些基础内容,故将Python的基础进行了总结.注意:这篇文章只列出来我觉得重点,并且需要记忆的知识. 前言 目前所有的文章思想格式都是:知识+情感. 知识:对 ...

  8. 浅谈HTML5单页面架构(一)——requirejs + angular + angular-route

    心血来潮,打算结合实际开发的经验,浅谈一下HTML5单页面App或网页的架构. 众所周知,现在移动Webapp越来越多,例如天猫.京东.国美这些都是很好的例子.而在Webapp中,又要数单页面架构体验 ...

  9. 浅谈HTML5单页面架构(三)—— 回归本真:自定义路由 + requirejs + zepto + underscore

    本文转载自:http://www.cnblogs.com/kenkofox/p/4650310.html 不过,这一篇,我想进一步探讨一下这两个框架的优缺点,另外,再进一步,抛开这两个框架,回到本真, ...

随机推荐

  1. redis 在 windows 中的安装

    redis 在 windows 中的安装 redis 官方并没有提供 redis 的 windows 版本.但是微软提供了 redis 的 windows 版本.有2.8和3.0版本.3.0版本支持集 ...

  2. 多个页面进行爬虫 pycharm

    使用requests , lxml  ,xpath进行爬取并写入了TXT(也可以存入数据库).参考博客:https://blog.csdn.net/yexing_cts/article/details ...

  3. Hbase多条件查询数据(FilterList)

    利用Filter进行筛选:HBase的Scan可以通过setFilter方法添加过滤器(Filter),这也是分页.多条件查询的基础.HBase为筛选数据提供了一组过滤器,通过这个过滤器可以在HBas ...

  4. O(n log n)求最长上升子序列与最长不下降子序列

    考虑dp(i)表示新上升子序列第i位数值的最小值.由于dp数组是单调的,所以对于每一个数,我们可以二分出它在dp数组中的位置,然后更新就可以了,最终的答案就是dp数组中第一个出现正无穷的位置. 代码非 ...

  5. requests--请求头设置

    前戏 在我们进行自动化测试的时候,很多网站都会都请求头做个校验,比如验证 User-Agent,看是不是浏览器发送的请求,如果我们不加请求头,使用脚本访问,默认User-Agent是python,这样 ...

  6. Linux性能优化实战学习笔记:第三十五讲

    一.上节回顾 前面内容,我们学习了 Linux 网络的基础原理以及性能观测方法.简单回顾一下,Linux网络基于 TCP/IP 模型,构建了其网络协议栈,把繁杂的网络功能划分为应用层.传输层.网络层. ...

  7. [LeetCode] 69. Sqrt(x) 求平方根

    Implement int sqrt(int x). Compute and return the square root of x, where x is guaranteed to be a no ...

  8. 利用ANSYS进行橡胶坝的静力分析和模态计算

    这个是我一个同学的毕业论文,我也帮了一点小忙,所以征得同学同意,把相关的经验共享一下(当时候做得也很艰难,网上查到的可参考的资料太少了,而且没有具体步骤). 先占一个位子,以前的模型还有命令流文件都找 ...

  9. 2019年上-C语言程序设计-第1次blog作业

    准备工作(20分) 1.在博客园申请个人博客,以真实姓名和学号加入班级博客(链接地址) 2.关注邹欣老师博客(并寻找答案:邹欣老师是谁?是做什么的?).关注任课老师博客 3.注册登录中国大学MOOC网 ...

  10. kubernetes实战(九):k8s集群动态存储管理GlusterFS及使用Heketi扩容GlusterFS集群

    1.准备工作 所有节点安装GFS客户端 yum install glusterfs glusterfs-fuse -y 如果不是所有节点要部署GFS管理服务,就在需要部署的节点上打上标签 [root@ ...