我想你可能會誤解「文檔數據庫」的性質。因此,我會推薦MongoDB,這是一個文檔數據庫,但我認爲你會喜歡它。
MongoDB存儲基本上是JSON記錄的「文檔」。很酷的部分是它瞭解它存儲的文檔的內部。因此,考慮一個文件是這樣的:
{
"name": "Gregg",
"fave-lang": "Scala",
"fave-colors": ["red", "blue"]
}
你可以在「最喜歡的琅」或「最喜歡的 - 色彩」查詢。你甚至可以在這些領域的任何一個上進行索引,甚至是「fave-colors」數組,這就需要在關係土地上有多對多的關係。
Play提供了一個我沒有用過的MongoDB插件。您也可以使用Casbah driver for MongoDB,我已經使用了很多並且非常優秀。如果您喜歡MongoDB,那麼查詢由FourSquare編寫的針對MongoDB的DSL的Rogue也值得一看。
MongoDB速度非常快。另外,你可以節省編寫模式的麻煩,因爲任何記錄都可以有你想要的任何字段,而且它們仍然可以搜索和索引。您的數據模型可能看起來很像現在的樣子,具有用戶「集合」(如表格)和其他具有根據需要引用用戶標識的記錄的集合。但是,如果您需要爲某個集合添加字段,則可以隨時執行此操作,而無需擔心較舊的記錄或數據遷移。技術上MongoDB記錄沒有模式,但最終會將類似的記錄組織到集合中。
MongoDB是我在過去幾年遇到的最有趣的技術之一。在那個愉快的星期六,我決定檢查一下,在15分鐘之內是有成效的,感覺就像我「明白了」。我經常在演示中演示如何在15分鐘內開始使用MongoDB和Scala,包括安裝MongoDB。這裏無恥的插頭,如果你到Web服務,是我在開始使用的MongoDB和Scalatra的使用卡斯巴博客文章:http://janxspirit.blogspot.com/2011/01/quick-webb-app-with-scala-mongodb.html
你應該至少是去http://try.mongodb.org
這就是讓我開始。
祝你好運!
您在混淆NoSql和鍵值數據存儲。像Graph數據庫(Neo4J)和OO數據庫(db4o)這樣的NoSql數據庫不是鍵值數據存儲。他們提供強大的關係機制。 – 2011-06-10 23:32:49
@Vagif:老實說,我真的不喜歡NoSQL這個名字(或者非關係型),因爲它定義了它不是什麼,而是它是什麼。按照相同的推理,我猜這個老式的文件系統可能被稱爲NoSQL,因爲它不是SQL或關係型的。 OTOH,你對圖形數據存儲是正確的,我沒有想到這一點。 – 2011-06-11 16:55:23
那麼,我們有無神論者,他們沒有什麼,而不是他們擁有什麼。在一個由宗教無神論主宰的世界裏,這是一個有效的定義。在由SQL數據庫支配的世界中,我猜NoSql確實有意義。 – 2011-06-11 22:28:06