MongoDB与RDBMS概念对比

  1. 数据库:MongoDB中的database有着和你熟知的”数据库”一样的概念 (对Oracle来说就是schema,对MySQL来说也是database)。一个 MongoDB 实例中,可以有零个或多个数据库,每个都作为一个高等容器,用于存储数据。
  2. 集合:数据库中可以有零个或多个collections(集合)。集合和传统意义上的table基本一致,你可以简单的把两者看成是一样的东西。
  3. 文档:集合是由零个或多个documents(文档)组成。同样,一个文档可以看成是一row
  4. 字段:文档是由零个或多个fields(字段)组成。对应的是columns
  5. 索引:Indexes(索引)在MongoDB中扮演着和它们在RDBMS中一样的角色。
  6. 游标:Cursors(游标)和上面的五个概念都不一样,但是它非常重要,并且经常被忽视,因此我觉得它们值得单独讨论一下。其中最重要的你要理解的一点是,游标是当你问MongoDB拿数据的时候,它返回的一个结果集的指针,而不是真正的数据,我们可以拿游标做我们任何想做的事,比如说计数或者跨行之类的,而无需把真正的数据拖下来,在真正的数据上操作。

MongoDB的特点

主要特点

  • MongoDB面向文档存储,操作起来比较简单和容易
  • 你可以在MongoDB记录中设置任何属性的索引(如:FirstName=”Sameer”,Address=”8 Gandhi Road”)来实现更快的排序
  • 你可以通过本地或网络创建数据镜像,这使得MongoDB有更强的扩展性
  • 如果负载的增加(需要更多的存储空间和更强的处理能力),它可以分布在计算机网络中的其他节点上,这就是所谓的分片
  • Mongo支持丰富的查询表达式,查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数据
  • MongoDB使用的update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段
  • MongoDB中的Map/reduce主要是用来对数据进行批量处理和聚合操作
  • Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理
  • Map函数和Reduce函数是使用Javascript所编写,并可以通过db.runCommand或mapreduce命令来执行
  • GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件
  • MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可
  • MongoDB支持各种编程语言:ruby,python,java,c++,php,c#等多种语言
  • MongoDB安装简单

RDBMS vs NoSQL

RDBMS

  • 高度组织化结构数据
  • 结构化查询语言(SQL)
  • 数据和关系都存储在单独的表中
  • 数据操纵语言,数据定义语言
  • 严格的一致性
  • 基础事务

NoSQL

  • 代表着不仅仅是SQL
  • 没有声明性查询语言
  • 没有预定义的模式
  • 键-值对存储,列存储,文档存储,图形数据库
  • 最终一致性,而非ACID属性
  • CAP定理
  • 高性能,高可用性和可伸缩性

NoSQL优缺点

优点

  • 高可扩展性
  • 分布式计算
  • 低成本
  • 架构的灵活性,半结构化数据
  • 没有复杂的关系

缺点

  • 没有标准化
  • 有限的查询功能(到目前为止)
  • 最终一致是不直观的程序