我还没有弄脏CouchDB和MongoDB,但我想尽快这样做......我也读过一些关于这两个系统的内容,在我看来它们涵盖了相同的情况......或者是我错过了一个关键的区别特征?
我想在我的下一个项目中使用基于文档的存储而不是传统的 RDBMS。我还需要数据存储
- 处理大型二进制对象(图像和视频)
- 自动将自身复制到物理上独立的节点
- 不需要额外的 RDBMS
两者都同样适合这些要求吗?
谢谢!
I've actually used both pretty extensively, both for very different projects.
I'd say they are equally well suited for the requirements you list, however there are quite a lot of differences between the two. IMO the biggest is their query-ability. CouchDB doesn't have 'queries' in the RDBMS sense (select * from ...) but instead uses 'views' which are more like stored procedures (essentially, static queries defined in the database (1)). MongoDB has much more 'usual' querying.
Essentially it comes down to your application requirements. If you give more information I might be able to shed some more light on what might matter in that situation.
(1): you can have temporarily, non-static queries in CouchDB but they aren't recommended for production use
Mongo 使用更多“传统”查询。您基于每个键打开索引并使用 SQLish 查询语法。
CouchDB 的视图可以做更深层次的索引和关系,但需要你做更多的工作并理解键排序的工作方式来进行查询。
复制系统也有很大的不同。Mongo 的复制看起来很像大多数带有 master 和 slave 的 RDBMS 解决方案等等。CouchDB 的复制更多的是点对点,没有主/从,每个 CouchDB 都是一个节点。
CouchDB 的复制是为了使地理位置不同的站点保持同步。它通过从中断的地方重新启动复制来优雅地处理网络和其他错误。参与节点甚至可以故意下线。
在使用 MongoDB 之前,我建议您查看以下内容:http ://groups.google.com/group/mongodb-user/browse_thread/thread/460dbd49a5b6b267 。由于每次写入都缺少 fsync,MongoDB 损坏数据的可能性很小。
从开发人员的角度来看,最大的区别是 mongo 实时查询与沙发视图(必须“编译”)。从操作的角度来看,couch 完全是在 http-rest 上工作的。如果您能够配置 http 服务器,您就知道如何设置 Coach。而使用 Mongo,您必须学习如何设置配置服务器、副本集和 mongos(一种平衡器)。