此架构听起来更适合面向文档的数据存储或关系吗?

时间:2010-03-24 07:07:00

标签: mysql couchdb nosql document-oriented-db schemaless

免责声明:如果此问题更适合serverfault.com,请与我们联系


我想存储有关音乐的信息,特别是:

  • 流派
  • 艺术家
  • 相册
  • 歌曲

此信息将用于网络应用程序,我希望人们能够看到与相册相关的所有歌曲,以及与艺术家相关联的专辑以及与某种类型相关联的艺术家。

我目前正在使用MySQL,但在我决定切换之前我想知道:

  1. 水平缩放有多容易?
  2. 管理比基于SQL的解决方案更容易吗?
  3. 我想存储的上述数据是否太难以完成无架构?
  4. 当我想到联想时,我立即想到RDBMS;数据可以存储在像CouchDB这样的东西中,但仍然有如上所述的某种关联吗?
  5. 我的Web应用程序需要复制,CouchDB或其他人处理这个问题的程度如何?

2 个答案:

答案 0 :(得分:3)

您的数据似乎是面向文档的数据库的理想选择 文件示例:
{
"type":"Album",
"artist":"ArtistName",
"album_name":"AlbumName",
"songs" : [
{"title":"SongTitle","duration":4.5}
],
"genres":["rock","indie"]
}

复制是couchDB最酷的功能之一(http://blog.couch.io/post/468392274/whats-new-in-apache-couchdb-0-11-part-three-new
您可能还想看看Riak。

答案 1 :(得分:2)

此类信息非常适合文档数据库。与许多真实世界的数据一样,它本身并不是关系型的,因此将它变成关系模式会让人头疼(甚至使用ORM - 我从经验中说话)。 Ubuntu已经使用CouchDB在One product中存储音乐元数据以及其他内容。

逐一解答剩余的问题:

  1. 水平扩展 WAY 比使用RDBMS更容易。这是Facebook,Digg和LinkedIn等大型网站正在使用或正在积极调查无架构数据库的众多原因之一。例如,由于名为Eventual Consistency的概念,分片(在系统中的不同节点之间划分数据)可以很好地工作;即,数据可能在一段时间内在节点上不一致,但最终会解析为一致状态。
  2. 这取决于你的意思“管理”...安装通常快速,容易完成。没有用户帐户可以配置和保护(这通常在应用程序的业务逻辑层中完成)。实时使用文档数据库可能很有趣:例如,在CouchDB中没有临时查询;你必须使用Futon UI或通过HTTP请求与它通信。但是,MongoDB确实支持临时查询。
  3. 我不应这么认为。 Bastien的答案提供了一个JSON文档序列化一些数据的好例子。无模式数据库的优点在于,一个文档中可能缺少字段而另一个文档中存在字段,或者文档可能彼此完全不同。这消除了RDBMS'null值所涉及的许多问题,这些问题很多且各不相同。
  4. 是;关联存储为嵌套文档,在应用程序中将其解析为对象引用,集合等。在Bastien的答案中,“songs”键标识了一组歌曲文档。
  5. 这与您关于水平缩放的第一个问题非常类似(水平缩放和复制是交织在一起的)。正如CouchIO博客文章Bastien提到的那样,“复制......从一开始就融入了CouchDB。”我的理解是所有文档数据库都能很好地处理复制,并且比在RDBMS中设置它更容易。
  6. 如果您决定要将歌曲文件本身与元数据一起存储,您也可以在CouchDB中通过提供歌曲文件作为文档的附件来实现;此外,由于没有架构,因此不会出现任何架构不一致的情况!

    我希望我没有在这里犯过太多错误;我自己很难记录数据库。