MongoDB或CouchDB - 适合生产环境吗?

485

我想知道是否有人能告诉我 MongoDB 或者 CouchDB 是否适合用于生产环境

我正在研究这些存储解决方案(目前我更喜欢MongoDB),但由于这些项目相当年轻,因此我预见我需要非常努力说服我的经理采用这项新技术。

我想了解的是:

  1. 谁在今天的生产环境中使用MongoDB或CouchDB?

  2. 你如何使用MongoDB/CouchDB?

  3. 在采用这种新的存储机制时,您遇到了哪些问题(如果有的话),您是如何克服它们的?

  4. 您如何处理必须处理的任何迁移问题?

  5. 您是否对这些解决方案有任何好的/不好的经验分享?


2
浏览了答案,我并没有找到我想要的。由于这两个数据库非常相似,我应该选择哪一个?它们各自有什么好处? 对于哪种类型的应用程序,我应该选择哪一个?如果有人能回答这些问题就太好了。 - polemon
这真的取决于它们将如何使用。缺乏事务对许多环境来说令人不安,但对其他环境来说完全没有问题。此外,"备份"分布式数据库在根本上是困难的,尽管有人认为通过跨多个分片进行复制可以确保数据持久性。 - Samuel O'Malley
2
@pauluss86 我认为您应该在pauluss86的链接中添加免责声明,指出作者(Emin)实际上来自MongoDB的竞争对手(Hyperdex),因此存在轻微的偏见。为了真正公正,这里有MongoDB在InfoQ上的相应回应- http://www.infoq.com/news/2013/02/MongoDB-Fault-Tolerance-Broken - victorhooi
@victorhooi 是的,但在我看来,这仍然是一个有效的问题。还有一个对 InfoQ 回应的跟进:链接。就个人而言,我并不太相信 Mongo 的辩护。无论如何,在选择数据库之前,我建议任何人都要了解这个问题(双方观点)。 - pauluss86
这就是全部 http://db-engines.com/en/ranking MongoDB日益壮大,是网络上最受欢迎的文档存储库。 - arkoak
19个回答

267

我是10gen的CTO(MongoDB的开发者),所以我有点偏见,但我也管理着一些正在使用MongoDB的网站。

businessinsider现在已经在生产中使用mongo超过一年了。他们将其用于从用户和博客文章到站点上的每个图像的所有内容。

shopwiki将其用于一些事情,包括实时分析和缓存层。他们每秒执行超过1000次写入到一个相当大的数据库。

如果您访问mongodb Production Deployments page,您会看到一些正在生产中使用mongo的人。

如果您对生产部署的规模或范围有任何问题,请在我们的用户列表上发布,我们将非常乐意帮助您。


6
这是链接:http://www.mongodb.org/display/DOCS/Production+Deployments - mdirolf
1
你介意使用V8作为默认值来运行MongoDB吗?而且对于那些只有512M内存的VPS用户来说,MongoDB占用了太多内存。 - guilin 桂林
你至少可以拥有AC(i)D - 原子性,因为只有单个主写入者;一致性,因为你有每个文档的一致性;持久性,因为你可以指定在ACK写入之前需要多少次写入,例如,在多少其他节点获取数据之前ACK它。 - Henrik
+1 for the links. 真是太神奇了,有多少人在生产中使用MongoDB。 - Michael Malura
好像过去5年间发生了很多变化。那个列表真的很长! :) - async

110

BBCmeebo.com在生产中使用CouchDB,我的一个客户也是如此。 以下是其他使用Couch的人的列表:CouchDB in the wild

主要挑战是知道如何组织您的文档并停止以关系数据的方式思考。


7
对我而言,最大的挑战是需要回到过去。一旦你从思维中移除了"关系约束",回归过去就变得很困难。 :) - johndodo

44

30
他们用它来做什么?或者他们是如何使用它的? - kiwicptn
26
这是一个老问题,但或许有人会再次查看它。这里有一位SourceForge开发者关于他们如何使用MongoDB的演示:http://www.infoq.com/presentations/MongoDB-at-SourceForge - o1iver

34

我们将CouchDB作为MySQL的替代品来运行我们的商店(每个商店有70,000个项目,总共有4百万个所有项目的属性,项目之间存在交叉连接)。

我们的目标是:

  1. 从主数据库轻松复制到具有不同文档的多个客户端。

  2. 快速预计算数据,例如“我拥有多少部件具有这种属性和过滤器,并适合那些条件”

事实是:

  1. 我们的商店现在比使用MySQL时运行得更快(mysql数据库还需要额外1-3天的预计算(因此更新两次),才能准备好进行产品计数和过滤;CouchDB只需要5个小时,所以我们可以每晚更新产品数据)
  2. 设置(经过筛选的)数据分发和备份到商店节点非常快捷。

但也有以下问题:

  1. 理解map/reduce和没有连接的限制相当困难。
  2. 没有“删除where”或“更新where”等数据操作,除非使用外部程序。
  3. 复制工作良好,除非出现问题;否则对于初学者来说很难找出原因。
  4. 如果你不是Linux极客,没有二进制文件的CouchDB安装可能很困难。但是CouchDB社区很有帮助(#couchdb),幸运的是,市场上有一些公司(cloudant,iriscouch)提供从免费到大型企业的服务。
  5. CouchDB在不断发展,因此正在进行很多变化(改进),这可能会改变你的工作方式。但基本事物保持稳定。

因此,MySQL作为数据创建和维护的数据库是可靠且易于理解和处理的。 我认为我们不会更改这种使用方式。但我也不想错过CouchDB视图的功能和复制设置的便利性。

生产机器有时会因为配置不当和忘记进行日志轮换(视图构建时间过长或挂起、复制停止)而出现问题,但从未丢失数据,并且总是可以轻松重置。


每家商店是70,000还是700,000个物品?另外,自您撰写帖子以来是否有任何更改?可能实现了一些缺失的功能吗? - Erik Kaplun

27

我正在生产环境中使用CouchDB。目前它存储了所有那些不属于原始数据库模式的“可选”字段。现在,我正在考虑将所有数据移动到CouchDB。

我承认这是一个相当冒险的步骤。首先,因为它还没有达到v1.0版本。其次,因为它需要占用很多磁盘空间。根据我的计算,具有相同行数的MySQL数据库与CouchDB文件(带索引)相比,后者大约大30倍。

但我非常确信这会完美地解决问题。


1
嗯,这完全行不通。我在使用了几个月后放弃了CouchDB。 - Sergio Tulentsev
@aetheria:它无法处理负载。此外,我们有很多写入操作,每小时都需要进行压缩。CouchDB 不适合写入密集的应用程序。 - Sergio Tulentsev
谢谢。我理解的是,更新现有文档是问题所在,对吗?也就是说,编写新文档没有问题,但更新会在文件中留下未使用的垃圾。这样对吗? - ᴇʟᴇvᴀтᴇ
如果我没记错的话,即使是新的写入操作性能也不太好。这种双头处理方式会导致过多的磁盘寻址。 - Sergio Tulentsev
啊,选择哪个数据库真的很难!你是回到了MySQL还是转向了其他NoSQL? - ᴇʟᴇvᴀтᴇ
2
@aetheria:先回到MySQL,然后再转到MongoDB。在这两个地方都遇到了不少问题。 :) - Sergio Tulentsev

18

17

这是旧闻:现在链接显示“是的,请参阅InTheWild以获取使用CouchDB的项目的部分列表。另一个很好的概述是CouchDB案例研究。” - J Chris A
14
@J Chris A: 当然很老了,我一年半前发布的。 :) - Sasha Chedygov

16

我们在生产中使用couchdb,自从该项目被列入Apache之前就一直使用。

我们将所有可能使用DBMS以及各种非结构化数据存储在其中。个人而言,我很喜欢你可以将各种数据放进去,并使用视图根据情况筛选不需要的内容的方式。

最困难的部分是摆脱DBMS的思维方式。当存储格式更改时,为了安全起见,我们编写了自己的迁移工具,因此这并不是一个问题。

我们还没有遇到任何负面经验,但是也没有在任何重负载下运行设置。我认为,由于我们拥有两个从单个主服务器复制所有写入的从服务器类型,所以事情应该会很顺利。我相当确定我们不必这样做才能正确复制,但这是我们在开始时设置的方式,一直沿用至今。


13
我们使用CouchDB存储移动入站和出站信息,并通过我编写的一些自定义视图报告这些流量。前端使用Python编写。我们没有遇到任何实际的技术问题,它自去年12月底以来一直在运行。唯一的障碍是最初考虑MapReduce,但学会如何做后,其他事情就很顺利了。

9

我们目前在生产环境中使用MongoDB作为缓存层和产品导入及操纵产品数据的存储引擎。我们是一家电子商务公司,管理着超过200万个产品(1亿多个属性),涉及10多个分销商,如果没有MongoDB,这个任务将几近不可能。


2
MongoDB对你来说有多可靠?实际应用中复制效果如何? - Industrial
4
我们采用运行版本为1.6的复制集拓扑结构(不确定小版本号是多少)。目前我们遇到的唯一问题似乎是当磁盘空间耗尽时,即使启用了保存写入,也没有引发任何标志。因此,请确保您有足够的空间! - Joshua Burns
1
可靠性一直非常出色,令人惊讶的是,它与我们的期望一样好。目前还没有崩溃的问题-尽管这是一个比较新的实现。 - Joshua Burns

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接