美文网首页
为什么是MongoDB

为什么是MongoDB

作者: 五月笙 | 来源:发表于2020-12-06 21:34 被阅读0次

MongoDB是一个面向文档(document-oriented)的数据库,同时汲取了组合键值对存储和关系数据库出处的最佳特性。因为键值对格式简单,所以存储速度非常快,而且容易伸缩。关系型数据库在水平方向上难以伸缩,但是拥有更加丰富的数据模型和查询语言。MongoDB在两者之间做了部分妥协,具备了两者优势的能力。它的最终目标就是易于伸缩,出处丰富的数据结果,提供负责的查询语言。

MongoDB与其他数据库对比

示例 数据模型 伸缩性模型 使用场景
简单键值存储 memcached 键值对,其中值是一个二进制对象 Memcached能跨多个节点伸缩,把所有可用内存变为一个存储库 缓存、Web网站等
复杂键值存储 HBase、Cassandra、Riak KV、Redis、CouchDB 多种模型。Cassandra使用名为列(column)的键值结构。Voldemort存储二进制大字段 最终一致性,多节点部署以获得高可用性和简单的故障转移 高吞吐量垂直内容(活动feed、消息队列)、缓存、Web操作
关系型数据库 Oracle、DB2、SQL Server、MySQL、PostgreSQL 数据表 垂直伸缩。对集群和手动分区支持有限 要求事务(银行、金融)或SQL的系统、正规化数据模型
  • 简单键值存储
    索引值是基于提供的Key键,常用于数据缓存。举例来说,假设需要缓存一个由HTML页面,此时可以用页面的URL作为键,值是HTML本身。另外需要注意,对键值存储而言,值就是一个不透明的字节数组。没有强加关系型数据库中的Schema,也没有任何数据类型的概念。通过键值其找出指定数据用于后续操作。如此简单逻辑的系统通常很快,而且具有可伸缩性。
    最著名的简单键值存储是memcached(发音是mem-cash-dee)。memcached仅在内存里存储数据,是以牺牲持久性来换取速度。它也是分布式的。memcached节点运行在多个服务器上,也作为单个存储库,去除了跨机器节点保持高速缓存状态的复杂性。
    与MongoDB相比,memcached这样的简单键值存储通常读写会更快。但与MongoDB不同,这些系统很少能充当主要数据存储。简单键值存储的最佳用途是附加存储,既可以作为传统数据库之上的缓存层,也可以作为任务队列之类的短暂服务的简单持久层。
  • 复杂键值存储
    改进简单键值模型来处理复杂的读写Schema或提供更丰富的数据模型后,就有了复杂键值存储。
    MongoDB提供了强一致性、(每个分片)一个主节点、更丰富的数据模型,还有二级索引,最后两项特性总是一起出现的。如果一个系统允许跨多个域建模,例如构建完整Web应用程序时就会有此要求,那么查询就需要跨整个数据模型,这时就要用到二级索引了。
    因为有丰富的数据模型,可以考虑把MongoDB作为更通用的大型、可伸缩Web应用程序的解决方案。
  • 关系型数据库
    流行的关系型数据库管理系统(RDBMS)包括MySQL、PostgreSQL、MicrosoftSQL Server、Oracle Database、IBM DB2等。在这里以MySQL为例,尽管MySQL 使用固定Schema的数据表,MongoDB使用无Schema的文档,但两者都能表示丰富的数据模型。MySQL和MongoDB都支持B树索引,那些适用于MySQL索引的经验也同样适用于MongoDB。MySQL支持联结和事务,因此如果你必须使用SQL或者要求有事务,那么只能选择MySQL或其他RDBMS。也就是说,MongoDB的文档模型足以在不用联结查询的情况下表示对象。MongoDB中对单独文档的更新也是原子的,这提供了传统事务的一个子集。MongoDB和MySQL都支持复制。就可伸缩性而言,MongoDB设计成能水平扩展,能自动分片并处理故障转移。MySQL上的分片都需要手动管理,有一定的复杂性,更常见的是垂直扩展的MySQL系统。
  • 文档型数据库
    除了MongoDB之外,其他的著名文档型数据库就是Apache CouchDB。尽管CouchDB的数据是使用JSON格式的纯文本存储的,而MongoDB是使用BSON二进制格式,但两者的文档模型是相似的。与MongoDB一样,CouchDB也支持二级索引,不同之处是CouchDB中的索引是通过编写MapReduce函数来定义的,这比MySQL和MongoDB使用的声明式语法更复杂一些。两者伸缩的方式也有所不同,CouchDB不会把数据分散到多台服务器上,每个CouchDB节点都是其他节点的完整副本。

相关文章

网友评论

      本文标题:为什么是MongoDB

      本文链接:https://www.haomeiwen.com/subject/rlrawktx.html