技术开发 频道

MongoDB距“干掉”MySQL登上王位还有多远

  【IT168 资讯】几十年来,关系型数据库已经成为企业应用程序的基础,自从MySQL在1995年发布以来,深受企业的偏爱。然而随着近年来数据量和数据的不断激增,非关系数据库技术如MongoDB应运而生,以满足新应用的需求。 MongoDB用于新的应用程序,以及扩充或替换现有的关系型基础设施(关系型数据库)。

  MongoDB势头正热,不少人要问,MongoDB是不是要“干掉”MySQL,独霸武林了?让我们一起看看数据库之间的恩恩怨怨吧。

MongoDB距“干掉”MySQL登上王位还有多远

  MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

  与关系型数据库相比,MongoDB的优点:

  1. 弱一致性(最终一致),更能保证用户的访问速度。

  2.文档结构的存储方式,能够更便捷的获取数据。 对于一个层级式的数据结构来说,如果要将这样的数据使用扁平式的,表状的结构来保存数据,这无论是在查询还是获取数据时都十分困难。

  3.内置GridFS,支持大容量的存储。GridFS是一个出色的分布式文件系统,可以支持海量的数据存储。内置了GridFS了MongoDB,能够满足对大数据集的快速范围查询。

  4.内置Sharding。提供基于Range的Auto Sharding机制:一个collection可按照记录的范围,分成若干个段,切分到不同的Shard上。 Shards可以和复制结合,配合Replica sets能够实现Sharding+fail-over,不同的Shard之间可以负载均衡。

  5.官方支持,安全有保障。开源文档数据库MongoDB背后有商业公司10gen为其提供供商业培训和支持。而且MongoDB社区非常活跃,很多开发框架都迅速提供了对MongoDB的支持。不少知名大公司和网站也在生产环境中使用MongoDB,越来越多的创新型企业转而使用MongoDB作为和Django,RoR来搭配的技术方案。

  6.性能优越:千万级别的文档对象或近10G的数据,对有索引的ID的查询不会比MySql慢,而对非索引字段的查询,则是全面胜出。MySql实际无法胜任大数据量下任意字段的查询,而Mongodb的查询性能超高。写入性能同样很令人满意。

  与关系型数据库相比,MongoDB的缺点:

  但在很多情况下MongoDB并如MySql。

  1. MongoDB不支持事务,事务要求严格的系统(如果银行系统)不能用它。但在文档级别,具有原子性。

  2. 对于复制环境,有关写入问题的配置注意事项都是以牺牲性能为代价的。写入方面将验证副本是否已写入信息,默认情况下,MongoDB将写请求设置为仅从主计算机请求确认,而不是副本。因为如果副本有问题,就会导致一致性问题。关于其原因,在官方的FAQ中,提到有如下几个方面:

  A. 空间的预分配;

  B. 字段名所占用的空间;

  C. 删除记录不释放空间。

  虽然大多数现代应用程序需要一个灵活的可扩展系统,如MongoDB,但是有一些关系数据库(如MySQL)将更适合使用的情况。需要复杂的多行事务的应用程序(例如双记录bookkeep系统)将是很好的例子。 MongoDB不是围绕关系数据模型和SQL构建的遗留应用程序的替代方法。

  写在最后

  MongoDB能否“干掉”MySQL,这个问题像是在问非关系型数据库能否替代关系型数据库。新的业务需求推动企业采用MongoDB作为其应用程序的下一代组件。许多客户现在享受更高程度的功能和个性化作为一体化的结果。但大多数产品最初建立在MySQL上并继续运行。目前看来,非关系型数据库登上王位的路途既长又险。

0
相关文章