2010-10-21 47 views
2

我想弄清楚如何在文檔存儲系統(如CouchDBMongoDB)中設計數據存儲。將SQL結構移植到NoSQL MongoDB或CouchDB

我不再在我的查詢中使用JOIN,只是堅持搜索具有符合我的標準的特定索引的行。例如,我可能會查找最近的評論(ORDER BY date)或所有活動用戶(WHERE status = 1)。換句話說,我的搜索邏輯全部基於存儲在RAM中的索引int列。

移到NoSQL,似乎沒有任何索引 - 所以我試圖找出這些數據庫篩選結果,而不需要手動查看每一行。 更新:不知何故,我錯過了這一點:http://vivu.tv/portal/archive.jsp?flow=783-586-4282&id=1270584002677

至於設計,採用存儲與所有評論作爲一個文檔後似乎並不像它的邏輯聲音的例子。你如何找到最近的評論?或者如何找到某個用戶的評論?

我在哪裏可以學習如何轉換模式(以及我的思維方式),以便使用這些文檔數據庫構建應用程序?

更新: 我只是沒有花費足夠的時間通過MongoDB網站我猜。 The documentation似乎涵蓋了大部分需要的東西,例如使用索引來篩選結果,就像在sql中一樣。 http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Charthttp://rickosborne.org/download/SQL-to-MongoDB.pdf正是我所需要的。

回答

2

事實上,沒有索引,因爲沒有默認索引。如果您不創建索引搜索,則使用SQL將會很慢。對於大多數NoSQL系統,如果您不創建索引,搜索將不會發生。用於建立索引的方法取決於您正在使用的特定系統 - 有時您使用搜索引擎來索引文檔,有時候它會爲每個可能的值存儲一組ID。

我不同意在帖子文檔中存儲評論我自己 - 將評論作爲由帖子ID索引的單獨文檔更靈活。但是,如果您不關心其他查詢(並且您的平臺支持部分更新),則單個文檔是最簡單的解決方案 - 正確的結構完全取決於您想要對其執行的操作。

由於沒有單一的正確答案,您不會發現任何通用的轉換模式。我認爲最好的方法是思考應用程序而不是數據 - 如果您的SQL博客應用程序正在閱讀多個表並創建一個後期對象,那麼您應該知道應該有一個後期文檔。

除了運行查詢以利用NoSQL平臺中的功能之外,您還應該嘗試思考解決方案 - 例如,使用redis我會將最新評論實現爲每次添加評論時更新和修剪的列表。實際上,它是一個非常專業化的索引 - 比檢查系統中每條評論的日期效率更高,並且當您不需要擔心更新模式時,添加更多的鍵/數據類型不是問題。