我目前正在编写一个应用程序,在不同的层上有相当多的不同数据持久性需求,我一直在想......什么时候它适当,什么时候不适合使用couchDB来满足我的持久性需求?
答案 0 :(得分:3)
请参阅:
答案 1 :(得分:3)
在非关系数据库之上实现两个生产系统之后,我得出结论,非关系数据库需要更接近sql才能真正“替代”它。我理解替代方案是“你可以获得相同的功能而不会在质量,工作量或成本方面产生巨大差异。”
简短回答:不是经常
答案很长。非关系数据库的主要优点是高可用性,无模式和可伸缩性。所有这一切都带来了巨大的代价。如果您的应用程序需要查询灵活性(和/或排序顺序,...)并且doest具有大量数据或性能要求,那么您最好使用传统数据库(如mysql或更好的postgres)。非关系数据库面临的主要挑战是,如果您需要新方法来组合数据(如按时间顺序的用户喜欢的所有帖子),您需要插入新文档并查看以实现查询。 Couchdb是基于文档的,有利于灵活性,因为您不需要在数据库中维护模式,只能“忘记”缺少新字段的旧数据。尽管您无论如何都需要或多或少地修复代码中的数据结构,但文档数据库并不具备静态类型语言的全部潜力。
非关系数据库需要推送架构。插入或更新数据时,需要推送所有可能查询的所有数据(甚至是罕见的管理员)。这需要cpu和磁盘,但你可以快速查询。在基于SQL的数据库中,您只需插入行并以慢查询的价格付费。 CouchDB在第一个查询上构建索引,在插入上构建一些其他数据库(MongoDB,Google App Engine)
Couchdb查询被定义为功能强大但很难编写,维护和调试的javascript视图。查看更改意味着如果您有大量或更多文档,couchdb需要重新索引所有文档,这些文档非常慢。来自couchdb的错误消息无法通过常规管理员解密。
Couchdb maintanance需要一些手动工作来压缩数据文件和索引,但新版本具有自动压缩功能,但使用它需要一些小心。压缩需要安排在非高峰期等。但这可以很容易地编写脚本。 Db转储,备份和此类工具仍然很婴儿。
简而言之,如果您不需要couchdb的性能或可伸缩性,那么这项工作是不值得的。就个人而言,我认为可以通过sql db,redis和memcache堆栈“模拟”大多数非关系数据库性能优势。至少只要没有太多数据。
答案 2 :(得分:2)
你有关系要求吗? CouchDb(如您所知)没有普通数据库的关系结构。
CouchDb的RESTful特性对你正在做的事情很重要吗?
也许最重要的是,谁将支持这一进展,他们是否有能力处理CouchDb?这是一个相当小众的工具,找到有经验的人并不容易。
答案 3 :(得分:1)
这是一个逐案的事情,我会说。 CouchDB只是一种数据库,取决于你的项目,它可能是一个完美的契合,或者它可能是一个痛苦的限制 - 就像一个RDBMS可以是一个完美的适合或噩梦。
更多细节?