MongoDB:逐渐变得无关紧要

摘要:与 TokuMX 和 PostgreSQL 相比较使得 MongoDB 处于劣势。但它仍然是一款很好的产品,而且会继续改进来与这些替代产品竞争,然而目前来看它最多只能排在第三名。2015年MongoDB的改进和发展,我们拭目以待。

【编者按】Henrique Lobo Weissmann 是一位来自于巴西的软件开发者,他是 itexto 公司的联合创始人,这是一家咨询公司。Henrique 在博客上会谈很多数据库方面的内容,日前他撰文称:非关系式数据库MongoDB正逐渐变得无关紧要,值得大家关注,特别是正在和打算使用 MongoDB 的开发者关注。

以下为译文:

我与MongoDB的关系可分为三个阶段。对于目前处于第三阶段的我来说,这款产品似乎变得无关紧要了。很快你就会明白为什么我这么说。

阶段一:痴迷

我与MongoDB的第一次接触十分神奇:一个poliglot持久性架构用它来处理部分系统,而框架的关系模型却不是很适合。然而它运行得十分漂亮:快速、易于安装和使用,并且运转良好。不得不说,MongoDB很适合应用于此类情况。

它的表现震惊了我:事实上,我主要的查询语言是JavaScript,这已经十分了不起。我从未奢望类似的东西能运行得如此出色。在那段时间里,我详细了解了这款产品以及如何管理它配给的文档模型。

阶段二:现实

也许这个阶段更好的名字应该是成熟。在这个阶段,我知道在什么情况下该使用MongoDB,更重要的是,什么时候不该使用MongoDB。这时,你会发现MongoDB是一款很好却需要谨慎使用的产品。它提供的文档模型强大到能帮你解决很多但却不是全部问题:实际上,只是相当多而已。

我是从自己和别人的失败上意识到了这个问题。很多人非常兴奋的想要把世界简化成一个模式,于是MongoDB就可以成为所有问题最完美的解决方法。但每当这些时刻,一些不符合想象却真实存在的事实就会砸到你脸上证明你的想法是错误的:

  • 关系模型并没有它们表现的那么糟糕。事实上,这种模式目前十分流行,而且在未来很长一段时间内它的地位都不会改变,究其原因:它管用。并且与NoSQL相反,我们手里有各种适用于此模式的好的或者坏的的实践方法。
  • ACID事务。MongoDB有一点恼人的地方:不能创建一个事务处理多个文档。于是问题来了:多数情况下,你必须同时进行多文档处理。
  • 在你知道你的系统需要什么之前,所有以上谈到的强大性能,都和你关系不大。

在这个阶段,所有的激动人心和相见恨晚都消失了,这是所有人都会有的。这时,你会知道这款工具可以做什么以及不能做什么。这是最好的阶段。

阶段三:无关紧要

现在MongoDB对于我来说已经变得无关紧要了。当然不是指文档模型,而是产品。有一天早上我醒来,突然意识到我不再需要MongoDB了,因为对于我的项目来说,其替代品更具吸引力。它们是分批来的。

第一波:TokuMX

TokuMX是MongoDB的一个分支,我喜欢称之为“MongoDB迷人的双胞胎兄弟”。它与MongoDB使用同样的通信协议,采用基本相同的命令,并可与MongoDB 100%兼容。但它具有一些MongoDB没有的强大优势:

  • 可以进行多文档ACID处理。
  • 快于MongoDB(快50倍速)。
  • 存储消耗比MongoDB少90%。
  • 与MongoDB 100%兼容。所有你需要做的就是将MongoDB实例更换成TokuMX,然后转移数据(这是相当容易的),这样你就大功告成了。

是的,与MongoDB一样,它也是开源的,而且有运行非常好的免费版本。当然,它也不是完全无懈可击。它有两个局限:

  • 没有Windows发布(Distribution )。
  • 目前Java库还不能提供MongoDB ACID执行的本地支持。它可以使用,但仍需要一些样板代码。

TokuMX第一次让我意识到MongoDB对我来说似乎无关紧要。当然,这可能只是暂时的:在日后版本发布后,MongoDB仍有可能击败TokuMX。但是,也只能寄希望于日后版本。目前为止,它做不到。

第二波:PostgreSQL

如果说TokuMX让我觉得MongoDB无关紧要,那么PostgreSQL 9.2则强化了这一印象。自9.2版本,PosetgreSQL开始对JSON和JSONB数据类型提供支持。这是一个有意思的解决方案,因为它,我可以得到关系模型中具有文档灵活性的好的部分。而所有这一切都基于同样的产品。太好了!

但是MongoDB曾比PostgreSQL的具有更高性能。我说“曾”是因为PostgreSQL 9.4版本使其变成了历史:最近的基准显示,PostgreSQL在处理JSON数据类型上比MongoDB更快。我没有想要比较PostgreSQL和TokuMX,但鉴于两者现在都比MongoDB拥有更好的性能,我想大家已经清楚我的观点了。

结论

与 TokuMX 和 PostgreSQL 相比较使得 MongoDB 处于劣势。但它仍然是一款很好的产品,而且会继续改进来与这些替代产品竞争,然而目前来看它最多只能排在第三名。不过资本市场对 MongoDB 非常认可,最新消息显示,2015年MongoDB获8000万美元融资,估值超过15亿美元。期待MongoDB的改进和发展。

时间: 2024-10-06 23:50:43

MongoDB:逐渐变得无关紧要的相关文章

微服务是否使SOA变得无关紧要?

服务导向架构(简称SOA,service-oriented architecture)已经死亡?你可能会这么想. 但其实不然.的确,随着新技术的出现,SOA本身的价值可能已经大不如前,但是SOA的遗产仍在推动微服务市场发展. 将SOA原则纳入微服务的设计和构建是确保您的产品或服务长期处于有利地位的最佳方式.从此意义上讲,理解SOA,对于在微服务世界中取得成功至关重要. 在本文中,我将解释设计微服务应用程序时应采用哪些SOA原则. 介绍 如今,在移动终端开发环境中,代码为王,构建具有RESTful

MongoDB学习之mongoose

MongoDB介绍: MongoDB是基于Javascript语言的数据库,存储格式是JSON,而Node也是基于JavaScript的环境(库),所以node和mongoDB的搭配能减少因为数据转换带来的时间空间开销. Mongoose介绍: 是MongoDB的一个对象模型工具,它将数据库中的数据转换为JavaScript对象以供你在应用中使用,封装了MongoDB对文档的的一些增删改查等常用方法, 让NodeJS操作Mongodb数据库变得更加灵活简单. 预备: 一定要先开启mongodb服

Nodejs和Mongodb的连接器Mongoose

简介 今天我们将学习Mongoose,什么是Mongoose呢,它于MongoDB又是什么关系呢,它可以用来做什么呢,介绍Mongoose之前,我们先简单了解一下MongoDB. MongoDB是一个开源的NoSQL数据库,相比MySQL那样的关系型数据库,它更显得轻巧.灵活,非常适合在数据规模很大.事务性不强的场合下使用.同时它也是一个对象数据库,没有表.行等概念,也没有固定的模式和结构,所有的数据以文档的形式存储(文档,就是一个关联数组式的对象,它的内部由属性组成,一个属性对应的值可能是一个

[转] mongoDB与mongoose

mongoDB简介 mongoDB与一些关系型数据库相比,它更显得轻巧.灵活,非常适合在数据规模很大.事务性不强的场合下使用.同时它也是一个对象数据库,没有表.行等概念,也没有固定的模式和结构,所有的数据以文档的形式存储. ·由c++语言编写,是一个分布式文件存储的开源NoSQL数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能. · mongoDB旨在为web应用提供可扩展的高性能数据存储解决方案 · mongoDB将数据存储为一个文档,数据结构由键值对组成.mongoDB文档类

011.MongoDB性能监控

一 MongoDB 监控 1.1 监控概述 MongoDB自带了mongostat 和 mongotop 这两个命令来监控MongoDB的运行情况.这两个命令用于处理MongoDB数据库变慢等等问题非常有用,能详细的统计MongoDB当前的状态信息.除此之外,还可以用db.serverStatus().db.stats().开启profile功能通过查看日志进行监控分析. 1.2 模拟插入数据 1 [[email protected] ~]# mongo --host 172.24.8.71 -

MongoDB快速入门教程 (4.2)

4.2.Mongoose实现增删查改 中文文档地址: https://cn.mongoosedoc.top/docs/guide.html 4.2.1.Mongoose是什么? Mongoose是MongoDB的一个对象模型工具,封装了MongoDB对文档的的一些增删改查等常用方法,让NodeJS操作Mongodb数据库变得更加灵活简单,换句话说就是Mongoose是一个工具,这个工具可以让nodejs操作MongoDB更加方便 在学习之前我们需要注意Mongoose的一个特点,那就是通过关系型

【网络流问题·我就想建好模】

·列出一些以做的题目,来积累网络流建模型经验. [1]星际转移问题◤ ·特色:你不知道是在哪一天可以使全部人到达月球. (误区:二分答案.不是这样做,因为最大流随时都处于最优解状态,所以我们只需要轻轻地枚举天数[T++]) ·建图思路: (1)创建源点汇点,即地球和月球. (2)飞船从地球接人,在月球放人,所以把在此位置的飞船与源点(汇点)建边. (3)飞船昨天的状态,今天的飞船继承,这两个飞船之间建边. (4)昨天空间站里面可能会有人,所以还要让昨天停靠在那里的飞船将他们运走(早运晚运,早晚都

Raft算法国际论文全翻译

最近在开发强一致性的分布式算法,因此需要深入理解下Raft算法,这里对Raft论文进行了翻译,留以备用 - Sunface. 英文版论文:https://ramcloud.atlassian.net/wiki/download/attachments/6586375/raft.pdf Raft 是一种通过日志复制来实现的一致性算法,提供了和(多重)Paxos 算法相同的功能和性能,但是它的算法结构和 Paxos 是不同的,因此Raft 算法更容易理解和应用.Raft 有几个关键模块:领导人选举.

为什么函数式编程在Java中很危险?

摘要:函数式编程这个不温不火的语言由来已久.有人说,这一年它会很火,尽管它很难,这也正是你需要学习的理由.那么,为什么函数式编程在Java中很危险呢?也许这个疑问普遍存在于很多程序员的脑中,作者Elliotte对此发表了一些见解,我们一起来看看他是怎么说的. 在我的日常工作中,我身边的开发者大多是毕业于CS编程顶级院校比如MIT.CMU以及Chicago,他们初次涉及的语言是Haskell.Scheme及Lisp.他们认为函数式编程是一种自然的.直观的.美丽的且高效的编程样式.但奇怪的是,我和我