2010-03-24 39 views
3

免責聲明:讓我知道,如果這個問題更適合serverfault.com這個模式聽起來更適合面向文檔的數據存儲或關係嗎?


我想存儲的音樂信息,具體包括:

  • 流派
  • 藝術家
  • 專輯
  • 歌曲

此信息將用於Web應用程序,我希望人們能夠看到與專輯關聯的所有歌曲,與藝術家關聯的專輯以及與流派關聯的藝術家。

我目前使用MySQL,但在此之前我做決定改用我想知道:

  1. 多麼容易被水平擴展?
  2. 比基於SQL的解決方案更容易管理嗎?
  3. 我想存儲的上述數據是否太難實現無模式?
  4. 當我想聯想時,我立即想到RDBMSs;可以將數據存儲在類似CouchDB的數據中,但仍然具有上述的某種關聯關係?
  5. 我的web應用程序需要複製,CouchDB或其他人如何處理這個問題?
+0

你只存儲信息或相關文件嗎? – 2010-03-24 07:52:29

+0

只有音樂的元數據,而不是音樂本身。 – 2010-03-24 08:21:50

回答

2

這種信息非常適合文檔數據庫。與許多現實世界的數據一樣,它不是固有的關係數據,因此將它變成關係模式會讓人頭疼(即使使用ORM--我從經驗中講)。 Ubuntu已經在其One product中使用CouchDB來存儲音樂元數據以及其他內容。

服用您的問題一個接一個餘數:

  1. 水平縮放WAY比RDBMS更容易。這是Facebook,Digg和LinkedIn等大型網站正在使用或正在積極調查無模式數據庫的衆多原因之一。例如,分片(將數據劃分到系統中的不同節點上)由於有一個名爲Eventual Consistency的概念,即一段時間內數據可能在節點間不一致,但最終會解析爲一致的狀態。
  2. 這取決於您所說的「管理」......安裝通常快速且易於完成。沒有用戶帳戶可以配置和保護(這通常是在應用程序的業務邏輯層完成的)。實時處理文檔數據庫可能會很有趣:例如,CouchDB中沒有特別的查詢;你必須使用被褥UI或通過HTTP請求與它通信。然而,MongoDB確實支持臨時查詢。
  3. 我不這麼認爲。 Bastien的答案提供了一個JSON文檔序列化一些數據的好例子。無模式數據庫的優點在於,字段可以從一個文檔中丟失並顯示在另一個文檔中,或者文檔可以彼此完全不同。這消除了與RDBMS'null價值有關的許多問題,這些問題是多種多樣的。
  4. 是;這些關聯存儲爲嵌套文檔,這些文檔在應用程序中作爲對象引用,集合等進行分析。在Bastien的回答中,「歌曲」鍵標識一組歌曲文檔。
  5. 這與您關於水平縮放的第一個問題非常相似(水平縮放和複製是交織在一起的)。正如CouchIO博客文章Bastien提到的那樣,「複製…從一開始就已經被嵌入到CouchDB中。」我的理解是,所有文檔數據庫都能很好地處理複製,並且比在RDBMS中設置它更容易。

如果您決定要將歌曲文件本身與元數據一起存儲,那麼您可以在CouchDB中執行此操作,方法是將歌曲文件作爲附件提供給文檔;此外,由於這樣做,您不會有任何模式不一致,因爲沒有模式!

我希望我在這裏沒有犯太多的失誤;我對自己的文檔數據庫很陌生。

3

對於面向文檔的數據庫,您的數據看起來很理想。
文件例如:
{
"type":"Album",
"artist":"ArtistName",
"album_name":"AlbumName",
"songs" : [
{"title":"SongTitle","duration":4.5}
],
"genres":["rock","indie"]
}

和複製是
你也可能想看看了Riak CouchDB的最酷的功能(http://blog.couch.io/post/468392274/whats-new-in-apache-couchdb-0-11-part-three-new)之一。

+0

上面的數據格式是完美的,如果你想按照類型查看所有的藝術家或專輯,那麼你只需發出一個簡單的地圖/縮小函數(),即可爲每個類型:) – mikeal 2010-03-24 16:18:34

相關問題