首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么不是mongodb呢?

为什么不是mongodb呢?
EN

Stack Overflow用户
提问于 2010-11-27 05:23:09
回答 8查看 18.7K关注 0票数 38

我最近第一次使用MongoDB,发现它特别容易使用和高性能。这就引出了我的问题--为什么不使用MongoDB?

假设我正在实现一个Q&A应用程序。我的方法是在MySQL数据库中实现用户数据,然后使用MongoDB存储问题和答案-一个存储问题和所有回答的集合。

这种方法有什么问题吗?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-11-27 10:45:51

对于您的问题,MongoDB听起来是一个很好的应用程序,但是您有很多理由不使用它。

MongoDB不太适合需要以下需求的应用程序:

  1. 多对象事务: MongoDB仅支持单个文档的ACID事务。SQL:
  2. 是众所周知的,很多人都知道如何编写非常复杂的查询来做很多事情。
  3. 强ACID保证: MongoDB允许不一致的读取,这在某些应用程序中是可以的,但在MongoDB BI中就不行了:存在许多非常强大的工具,它们允许

和其他强大的BI应用程序以及那些在传统

  1. 数据库上运行的应用程序。
票数 41
EN

Stack Overflow用户

发布于 2013-01-25 15:01:00

MongoDB是一个出色的数据库,我喜欢使用它。这就是说,如果你来自SQL世界,它有一些陷阱。

除了酸和其他有充分记录的东西(在其他答案中也是如此),这些东西让我们大吃一惊:

  • MongoDB要求您拥有内存。大容量内存。如果你不能把你的工作集放到内存中,你可以忘记它。这与大多数只使用内存作为缓存的关系型数据库不同!更具体地说: MongoDB使用内存作为主存储,并将不需要的部分“交换”到磁盘(Mongo将决定哪些部分“交换”到内核)。传统的RDBMS的工作方式正好相反--它们使用磁盘作为主存储,使用RAM作为缓存机制。因此,一般而言,MongoDB使用更多的内存。这本身并不是一件坏事,但结果是“真正的”内存消耗很难预测,一旦工作集增长超过(难以预测) limit.
  • storage在您删除记录时不自动收缩,这可能会导致严重的和意外的性能下降。在repair DB或删除集合之前,为每个集合分配的空间将一直保持已分配状态。它在DB级别上被分配成巨大的块(数据文件),然后在需要时分配给集合(扩展区)。也就是说,在集合的分配空间内,被删除的文档确实为同一集合中的其他文档释放了空间。这是对概念的一个很好的解释:http://www.10gen.com/presentations/storage-engine-internals
  • as与解析服务器端的SQL形成对比,在Mongo中,你将数据结构传递给查询和CRUD函数。结果是每个驱动程序提供了不同的语法,这有点烦人。例如,PyMongo使用元组列表而不是字典(可能是因为Python不保留键的顺序)来指定find()将返回哪些字段:(公平地说,这可能是唯一合理的方法-但它是不使用基于字符串的语言(如SQL)的结果)
    • MongoDB外壳:db.find({}, fields=[(a,1,)] db.find({}, fields=[(a,1,)]shell

这不应该被看作是对MongoDB的批评--我喜欢使用它,它已经被证明是一个可靠和高效的工具。但要正确使用它,你需要了解它的空间管理。

票数 30
EN

Stack Overflow用户

发布于 2010-11-27 06:03:52

可能的缺点:

SQL

  • 您所在的组织只使用过关系数据库。您尚未获得使用NoSQL数据库的批准或支持。
  1. 您从未管理过MongoDB集群;由于所有的all数据都是真正的关系数据,因此有一个学习曲线(例如,一个用户有许多问题;一个问题有许多答案),而您忽略了这种可能性。

MondoDB是一个很好的解决方案,在适用的情况下是一个很好的替代方案。如果你可以使用它,为什么不呢?

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4288615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档