2013-04-01 33 views
0

我想從mysql轉移到nosql。 目前我在我的數據庫中有2個表格。文件和目錄。NoSQL中的表關係

在我的文件表中的字段{寫到FileID,文件名,ParentDirID,FileAttributes} 在我的目錄表中的字段是{DIRID,目錄名,ParentDirID,FileAttributes}

如果我使用任何的NoSQL數據庫(蒙戈/ Couch/AmazonSimpleDB)我將不得不維護兩個類似的結構文件和目錄,否則會有不同的東西。

另外我讀到你可以使用Json在nosql數據庫中插入數據。

所以是下列插入可能在那裏我可以添加一個目錄,並使用單JSON

{dirid:"101", 
dirName:"C", 
ParentID:"100", 
Files:{ 
[FileID:"201", 
FileName:"a.txt"], 
[FileID:"202", 
FileName:"b.txt"] 
} 
} 

如果是,那麼如何創建更新查詢在它的文件,

回答

1

從關係走向(MySQL)到NoSQL需要一些快速背景。

在關係世界中,我們想要規範化數據。目標是讓數據只存在於一個地方。這迫使我們製作相當多的表格來表示數據。

在NoSQL世界(或至少它的某些部分)中,關鍵詞是反規範化。這意味着現在可以在數據庫的不同部分使用相同的數據。例如,我們可能會將用戶名存儲在10個不同的結構中。如果你想改變用戶名,你必須去10個地方並改變它(可能)。

由於上述原因,很多NoSQL解決方案不支持關係意義上的聯接。不是單獨存儲結構然後加入,而是將所有內容存儲在一起。

對於您的具體用例,您似乎已經偶然發現了這個想法。您有一個目錄文檔,然後將所有文件信息嵌入到該文檔中。

有關如何使用NoSQL對數據進行非規範化的一些快速建議......如果您嵌入的對象變化很大,請僅存儲對它們的引用並分隔對象。否則,你會最終將它們全部嵌入,實時更新幾乎不可能。

+0

謝謝瑞安。其實我有點困惑。因爲我有一個文件表和一個目錄表完全分開,並且像父母id這樣的小關係。對我來說,遷移到NoSQL是否有意義? – user1875104

+0

是的,遷移到NoSQL可能沒有意義。您仍然可以在NoSQL中分別存儲文件和目錄,然後將它們加入到某個地方。例如,在Mongo中,您可以將每個存儲在不同的集合中。然後你可以在不同的地方「加入」它們。你可以通過Mongo中的map/reduce,通過你的應用程序代碼,在AJAX調用的前端(假設是web應用程序)加入它們。但是用你用MySQL的方式寫一個adhoc查詢......如果你把它們分開,這是不可能的。通常在NoSQL中,你想把它們放在一個對象中。希望有幫助嗎? – ryan1234