Henrique Lobo Weissmann是一位来自于巴西的软件开发者,他是itexto公司的联合创始人,这是一家咨询公司。近日,Henrique在博客上撰文谈到了关于MongoDB的一些内容,其中有些观点值得我们,特别是正在和打算使用MongoDB的开发者关注。
到目前为止,MongoDB在巴西是最为流行的NoSQL数据库(至少根据关于MongoDB的博客数量以及文章所判断)。MongoDB是个非常棒的解决方案,不过困扰我们的是很少有人了解过关于它的一些限制。这样的事情正在不断上演:人们看到MongoDB的限制,心里却认为这些是它的Bug。
本文列举了颇让作者困惑的一些MongoDB限制,如果你也打算使用MongoDB,那么至少要提前了解这些限制,以免遇到的时候措手不及。
消耗磁盘空间
这是我的第一个困惑:MongoDB会消耗太多的磁盘空间了。当然了,这与它的编码方式有关,因为MongoDB会通过预分配大文件空间来避免磁盘碎片问题。它的工作方式是这样的:在创建数据库时,系统会创建一个名为[db name].0的文件,当该文件有一半以上被使用时,系统会再次创建一个名为[db name].1的文件,该文件的大小是方才的两倍。这个情况会持续不断的发生,因此256、512、1024、2048大小的文件会被写到磁盘上。最后,再次创建文件时大小都将为2048Mb。如果存储空间是项目的一个限制,那么你必须要考虑这个情况。该问题有个商业解决方案,名字叫做TokuMX,使用后存储消耗将会减少90%。此外,从长远来看,repairDatabase与compact命令也会在一定程度上帮到你。
通过复制集实现的数据复制效果非常棒,不过也有限制
MongoDB中数据复制的复制集策略非常棒,很容易配置并且使用起来确实不错。但如果集群的节点有12个以上,那么你就会遇到问题。MongoDB中的复制集有12个节点的限制,这里是问题的描述,你可以追踪这个问题看看是否已经被解决了。
主从复制不会确保高可用性
尽管已经不建议被使用了,不过MongoDB还是提供了另外一种复制策略,即主从复制。它解决了12个节点限制问题,不过却产生了新的问题:如果需要改变集群的主节点,那么你必须得手工完成,感到惊讶?看看这个链接吧。
不要使用32位版本
MongoDB的32位版本也是不建议被使用的,因为你只能处理2GB大小的数据。还记得第一个限制么?这是MongoDB关于该限制的说明。
咨询费非常非常昂贵(至少对于巴西的开发者与公司来说如此)
我不清楚其他国家的情况,不过至少在巴西MongoDB的咨询费是个天价。对于“Lightning Consult”计划来说,每小时的价格是450美金,而你至少需要购买两个小时的,换句话说,对于任何一家公司来说,每次咨询的价格至少是900美金。相比于RedHat和Oracle来说,这个价格太高了。
差劲的管理工具
这对于初学者来说依然是个让人头疼的问题,MongoDB的管理控制台太差劲了。我所知道的最好的工具是RoboMongo,它对于那些初次使用的开发者来说非常趁手。
了解官方的限制
让我感到惊讶的是,很少有人会查询关于他们将要使用的工具的限制。幸好,MongoDB的开发人员发布了一篇MongoDB所有限制的博客,你可以提前了解相关信息,避免在使用过程中难堪。
各位读者,现在使用MongoDB的公司也越来越多了,不妨与大家分享你在使用这个NoSQL数据库时的一些经验与教训。
相关推荐
6. **数据库管理**:如MySQL、MongoDB等,用于存储和管理网站的数据。了解SQL(结构化查询语言)是管理数据库的关键。 7. **Web服务器**:如Apache、Nginx等,它们接收来自用户的请求,并将响应发送回浏览器。...
这里的五件事是每个开发人员应该知道的: 1) MongoDB是一个独立的服务器; 如MySQL或PostreSQL 一样,MongoDB提供侦听端口以便接入。它提供了用于查询,创建,更新和删除的工具。从理论上讲,你使用它的工作方式...
MongoDB中的发件箱模式 这是应用程序如何通过发件箱模式使用MongoDB创建transactional outbox的演示。 在生产中,我建议使用传统的消息代理/发布订阅服务(例如Kafka,RabbitMQ等),但是为了简单起见,我使用...
mongodb.org NoSQL 数据库NOSQL 数据库解释nosql-database.org 关于 NoSQL 数据库你应该知道的 10 件事MongoDB的优势何时使用 MongoDB,何时不使用mongoDB 的最佳应用使用 MongoDB 的组织#MongoDB 数据模型MongoDB ...
一件事情必须知道,MongoDB C++ driver必须用-fPIC选项编译。 首先,创建db.h文件 extern "C" void CheckOnline(); extern "C" void Init(char * mongo_uri); 然后编辑db.cc文件 #include "db.h
【网站开发人员应该知道的62件事】 在网站开发领域,了解并掌握一系列关键知识点是至关重要的。以下是一些核心要点: 1. **界面和用户体验**: - 测试跨浏览器兼容性,确保网站在Firefox(Gecko引擎)、Safari/...
4. **安装与配置**:首先,你需要通过Composer安装`laravel-messenger-mongo`包。然后,在`config/app.php`中注册服务提供者和门面,最后配置MongoDB的连接信息,让Laravel知道如何与MongoDB通信。 5. **使用方法**...
在使用这个源码时,你需要解压文件,其中"使用须知.txt"可能包含了关于如何导入和使用这些源码的说明,以及任何许可信息。另一个文件"132689847100916413"可能是一个HTML、CSS或JavaScript文件,是源码的一部分。...
您需要在您的PC上安装MongoDB。 在任何IDE中打开项目(我使用Intellij IDEA)。 然后打开“终端/控制台提示符”,然后键入:mongod --dbpath = path_to_db(例如:mongod --dbpath = C:\ GitPals \ DB)。默认地址...
简历追踪器这是一个在 node 和 javascript/html (jQuery) 中使用 MongoDB 的... 由于链接是共享的,因此每次下载都很重要 - 基本上你知道什么时候有人要求你的简历以及那个人是谁(或者,至少,与什么工作申请有关)。
nodejs与typescript介绍,使用与转换案例nodejs与typescript介绍,使用与转换案例我使用nodejs的经验我在出现之前就开始使用在...调整资料结构后会知道某些程序需要对应修改改用typescript后的坏处写逻辑前要先定义资料
在这里,我们称它为NextFeathers的后端:-)我真正喜欢的一件事是feathers-cli,通过它我可以在几分钟内创建一个API。 了解更多信息: : 什么是NextFeathers? 您可能现在知道:这就是nextJS + FeathersJS! 不仅...