为什么我应该使用基于文档的数据库而不是关系数据库?

时间:2009-01-14 00:21:49

标签: database couchdb relational non-relational-database

为什么我应该使用像CouchDB这样的基于文档的数据库而不是使用关系数据库。 是否存在基于文档的数据库比关系数据库更适合的典型应用程序或域?

7 个答案:

答案 0 :(得分:155)

可能你不应该: - )

第二个最明显的答案是,如果您的数据不是关系数据,则应该使用它。这通常表现为没有简单的方法将数据描述为一组列。一个很好的例子是您实际存储纸质文档的数据库,例如通过扫描办公室邮件。数据是扫描的PDF,您有一些元数据始终存在(扫描,扫描,文档类型)和许多可能的元数据字段,有时存在(客户编号,供应商编号,订单编号,存档,直到, OCRed全文等)。通常,您事先不知道将在未来两年内添加哪些元数据字段。 像CouchDB这样的数据比关系数据库更适合那种数据。

我个人也很喜欢这样一个事实:除了HTTP客户端之外,我不需要CouchDB的任何客户端库,现在几乎所有的编程语言都包含它。

可能最不明显的答案:如果你觉得使用RDBMS没有痛苦,那就坚持下去吧。如果您总是需要解决您的RDBMS来完成工作,那么面向文档的数据库可能值得一看。

如需更详细的清单,请检查this posting of Richard Jones

答案 1 :(得分:41)

CouchDB(来自他们的website

  • 可通过RESTful JSON API访问的文档数据库服务器。通常,关系数据库不是通过REST服务简单访问,而是需要更复杂的SQL API。通常这些API(JDBC,ODBC等)非常复杂。 REST非常简单。

  • Ad-hoc和无架构,具有扁平地址空间。关系数据库具有复杂的固定模式。您可以定义表,列,索引,序列,视图和其他内容。 Couch不需要这种复杂,昂贵,脆弱的高级计划。

  • 分布式,具有强大的增量复制功能,具有双向冲突检测和管理功能。一些SQL商业产品提供此功能。由于SQL API和固定模式,这是复杂,困难和昂贵的。对于Couch来说,它看起来既简单又便宜。

  • 可查询和索引,具有使用Javascript作为查询语言的面向表的报告引擎。 SQL和关系数据库也是如此。这里没什么新东西。

因此。为何选择CouchDB?

  • REST比JDBC或ODBC更简单。
  • 没有架构比架构更简单。
  • 以简单而廉价的方式分发。

答案 2 :(得分:22)

用于愚蠢地存储和提供其他服务器数据。

在过去的几周里,我一直在玩一个lifestream应用程序,它可以轮询我的feed(美味,flickr,github,twitter ......)并将它们存储在couchdb中。 couchdb的美妙之处在于它让我可以将原始数据保留在原始结构中而不会产生任何开销。我为每个文档添加了一个“类”字段,存储了源服务器,并为每个源编写了一个javascript渲染类。

概括,只要您的服务器与另一台服务器通信,无模式存储最好,因为您无法控制架构。作为奖励,couchdb使用服务器和客户端的本机协议 - 用于表示的JSON和用于传输的HTTP REST。

答案 3 :(得分:18)

快速应用程序开发浮现在脑海中。

当我不断改进我的架构时,我不得不在MySQL / SQLite中维护架构而感到沮丧。虽然我还没有对CouchDB做太多,但我确实喜欢在RAD过程中发展模式是多么简单。

当您有很多多对多关系时,您可能不想使用非关系数据库的情况;我还没有了解如何围绕这些关系创建良好的MapReduce函数,特别是如果你需要在加入关系中有元数据。我不确定,但我不认为CouchDB Map函数可以在数据库上调用自己的查询,因为这可能会导致无限循环。

答案 4 :(得分:4)

如果不需要在每个记录中具有统一大小字段的表中存储数据,请使用基于文档的数据库。相反,您需要将每个记录存储为具有某些特征的文档。任何长度的任意数量的字段都可以随时动态添加到文档中,而无需首先“修改表格”。基于文档的字段也可以包含多个数据。

答案 5 :(得分:0)

详细介绍smdelfin:灵活性。您可以将数据存储为任何结构(非结构化且全部结构化),并且每个文档都可以完全不同。 CouchDB特别有用,因为有了它们的“视图”索引,您就可以过滤出特定的文档,并在需要数据库的那些子集时仅查询该视图。

文档数据库以JSON格式存储数据的最大优势是:这是JavaScript的本机格式。因此,JavaScript Web应用程序与CouchDB配合得非常好。我最近制作了一个网络应用程序,该应用程序利用CouchDB并迅速发展,同时还能够处理不断变化的数据结构。

答案 6 :(得分:0)

基于文档的数据库相对于关系数据库具有很大的优势,因为它们不需要在输入任何数据之前就先定义架构。

此外,如果数据不是关系数据并且不能存储在表中而是一组图像(例如报纸),则应该使用文档数据库。

另一个优势是易于在Web开发中使用基于文档的数据库。 有关更深入的NoSQL数据库模型比较,请查看以下来源:https://arxiv.org/ftp/arxiv/papers/1509/1509.08035.pdf