这种信息非常适合文档数据库。与许多现实世界的数据一样,它本质上不是关系的,因此将其硬塞到关系模式中会让人头疼(即使使用 ORM - 我是根据经验说话的)。Ubuntu 已经在其One 产品中使用 CouchDB 来存储音乐元数据以及其他内容。
一个接一个地回答你剩下的问题:
- 水平缩放比使用RDBMS容易得多。这是 Facebook、Digg 和 LinkedIn 等大型网站正在使用或正在积极调查无模式数据库的众多原因之一。例如,由于称为最终一致性的概念,分片(在系统中的不同节点之间划分数据)工作得很好;即,数据可能会在一段时间内跨节点不一致,但最终会解析为一致状态。
- 这取决于您所说的“管理”......安装通常快速且易于完成。没有需要配置和保护的用户帐户(这通常在应用程序的业务逻辑层中完成)。实时处理文档数据库可能很有趣:例如,CouchDB 中没有临时查询;您必须使用 Futon UI 或通过 HTTP 请求与其通信。然而,MongoDB 确实支持 ad hoc 查询。
- 我不应该这样想。Bastien 的回答提供了一个 JSON 文档序列化一些数据的好例子。无模式数据库的美妙之处在于,一个文档中可能缺少字段而出现在另一个文档中,或者文档之间可能完全不同。这消除了与 RDBMS 的
null
价值相关的许多问题,这些问题多种多样。
- 是的; 关联存储为嵌套文档,在您的应用程序中解析为对象引用、集合等。在 Bastien 的回答中,“songs”键标识歌曲文档数组。
- 这与您关于水平缩放的第一个问题非常相似(水平缩放和复制交织在一起)。正如 CouchIO 博客文章 Bastien 提到的那样,“复制……从一开始就融入了 CouchDB。”。我的理解是,所有文档数据库都可以很好地处理复制,并且比在 RDBMS 中设置它更容易。
如果您决定要将歌曲文件本身与元数据一起存储,您也可以在 CouchDB 中执行此操作,方法是将歌曲文件作为文档的附件提供;此外,这样做不会导致任何模式不一致,因为没有模式!
我希望我在这里没有犯太多错误;我对自己记录数据库很陌生。