我与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的改进和发展。

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

  1. mongodb安装&简单使用

    转自Mac下使用brew安装mongodb,按着步骤已成功安装. brew常用命令 1.更新brew本身 brew update 2.使用brew安装软件 1 brew install soft_na ...

  2. 在express中使用Mongoose连接MongoDB

    为何要学Mongoose? Mongoose是MongoDB的一个对象模型工具,封装了MongoDB对文档的的一些增删改查等常用方法,让NodeJS操作Mongodb数据库变得更加灵活简单. 0.安装 ...

  3. [转] mongoDB与mongoose

    mongoDB简介 mongoDB与一些关系型数据库相比,它更显得轻巧.灵活,非常适合在数据规模很大.事务性不强的场合下使用.同时它也是一个对象数据库,没有表.行等概念,也没有固定的模式和结构,所有的 ...

  4. MongoDB学习之mongoose

    MongoDB介绍: MongoDB是基于Javascript语言的数据库,存储格式是JSON,而Node也是基于JavaScript的环境(库),所以node和mongoDB的搭配能减少因为数据转换 ...

  5. 011.MongoDB性能监控

    一 MongoDB 监控 1.1 监控概述 MongoDB自带了mongostat 和 mongotop 这两个命令来监控MongoDB的运行情况.这两个命令用于处理MongoDB数据库变慢等等问题非 ...

  6. MongoDB快速入门教程 (4.2)

    4.2.Mongoose实现增删查改 中文文档地址: https://cn.mongoosedoc.top/docs/guide.html 4.2.1.Mongoose是什么? Mongoose是Mo ...

  7. 《The Evolution of Lua》翻译part 2

    Lua2 1990年的时候,面向对象迈向巅峰,对于Lua没有面向对象的支持,我们受到了很大的压力.我们不想将Lua变成面向对象,因为我们不想“修复”一种编程范式(fix a programming p ...

  8. lecture11-hopfiled网络与玻尔兹曼机

    Hinton课程第11课 这部分的课程算是个知识背景,讲述RBM的来源吧,毕竟是按照hopfield--BM-RBM的路线过来的. 因为水平有限,都是直译,如果纠结某句话,肯定看不懂,所以这些课程只需 ...

  9. mongoose学习笔记1--基础知识1

    今天我们将学习Mongoose,什么是Mongoose呢,它于MongoDB又是什么关系呢,它可以用来做什么呢? MongoDB是一个开源的NoSQL数据库,相比MySQL那样的关系型数据库,它更显得 ...

随机推荐

  1. HDU 2255 奔小康,赚钱(KM算法模板)

    解决问题的思路: 二部图,正确的匹配,卡费用流,使用KM算法. #include <cstring> #include <algorithm> #include <cst ...

  2. poj 动态规划的主题列表和总结

    此文转载别人,希望自己可以做完这些题目. 1.POJ动态规划题目列表 easy:1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, ...

  3. Thrift反序列化导致OOM(转)

    概述 最近线上的日志处理服务偶尔会出现Out Of Memory的问题,从Exception的call stack中顺藤摸瓜,最终定位到是thrift反序列化的问题. 发现问题 先交代一下问题现场: ...

  4. python(abi) RPM DEB Download

    python(abi) RPM DEB Download python(abi) RPM DEB Download

  5. 手机装linux系统

    第一步: 首先 , 你的手机需要获取root权限. 如果不知道如何获取, 可以到电脑上搜索一下安卓手机root教程. 不同品牌的手机root的方法不同. 也可以到机锋论坛上寻找root的具体方法. 第 ...

  6. 浅谈Storm流式处理框架(转)

    Hadoop的高吞吐,海量数据处理的能力使得人们可以方便地处理海量数据.但是,Hadoop的缺点也和它的优点同样鲜明——延迟大,响应缓慢,运维复杂. 有需求也就有创造,在Hadoop基本奠定了大数据霸 ...

  7. python手记(47)

    #!/usr/bin/env python # -*- coding: utf-8 -*- #http://blog.csdn.net/myhaspl #code:myhaspl@qq.com imp ...

  8. ftk学习记(waitbox篇)

    [声明:版权全部.欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 前面说到了脚本.那么就看看ftk中demo与script搭配的效果是什么样的? 上面的效果图就相 ...

  9. LA 3027 Corporative Network 并查集记录点到根的距离

    Corporative Network Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu [S ...

  10. 如何禁止使用teamviwer的使用

    前几天有人问我teamviwer怎么禁止,刚开始做实验的时候过滤了teramviwer.com解析出来的IP,可是还是没有用,其实将teamviwer登陆的服务器地址在路由器上过滤,teramviwe ...