2013-10-09 22 views
0

我想在NoSQL中存儲文章。每篇文章都有一個標題,摘要和章節。這沒什麼大不了的。我也想標籤文章,又容易做到。我還想存儲除名稱之外的標籤信息,比如說定義和圖標。每次使用標籤時,我都不想存儲額外的標籤信息。這讓我把額外的信息放在一個單獨的集合中。那麼在NoSQL中接受的方式是什麼呢?存儲和檢索?在NoSQL中存儲鏈接數據的可接受方式是什麼?

例如,在SQL我想有一個文章,標籤和article_tags表,我可以做類似SELECT * FROM article_tags INNER JOIN tags on tags.id=article_tags.tag_id WHERE article_tags.art_id=##

在NoSQL的我想是這樣的:

article = { 
    title : 'The article', 
    tags  : ['tag1', 'tag2', ... ], 
    summary : 'paragraph summary', 
    sections : ['section 1', 'section 2', ... ] 
} 
tags = { 
    tag  : 'tag1', 
    definition : 'The meaning of the tag', 
    icon  : 'URL' 
} 

但據我知道在NoSQL中沒有與JOIN相當的功能,所以我將不得不爲每個標記單獨調用以查找其信息。

回答

-2

您必須單獨撥打電話 - 具體取決於您使用的是哪種NoSQL解決方案。您必須以最有效地利用NoSQL解決方案優勢的方式編寫應用程序。

我最熟悉的Redis和Python這樣在你的例子我可能會做這樣的事的結構:

articles = {   
       title: 'The article.', 
       tags  : ['tag1','tag2','tag3'], 
       summary : 'paragraph summary', 
       sections : ['section 1', 'section 2', ... ] 
      } 

,然後檢索(在適當的Python客戶端的設置等)

... client setup and connection stuff 
key = 'article_id_value' 
data = rclient.hget('articles',key) 
tags = data['tags'] 
... 

NoSQL的目標是速度,不一定是關係,ACID或消除更新異常的可能性。最後一個原因是爲什麼不重視規範化並且不將數據存儲在多個位置。但是,如果您reallyreallyreallyreallyreally要正常化,你可以這樣做:

articles = {   
       title: 'The article.', 
       tags  : [tag_key,tag_key,tag_key ], 
       summary : 'paragraph summary', 
       sections : ['section 1', 'section 2', ... ] 
      } 


tags = { 
    tag  : 'tag1', 
    definition : 'The meaning of the tag', 
    icon  : 'URL' 
} 

,然後你會喜歡檢索:

... client setup and connection stuff 
key = 'article_id_value' 
data = rclient.hget('articles',key) 
tags = data['tags'] 
tagnames = [] 
for tag in tags: 
    tagnames.append(rclient.hget('tags',tag)) 
data['tagnames'] = tagnames 
... 

請注意 - 我從內存中,而這樣做看着Python和Redis文檔。我是SQL Server DBA,所以我傾向於傾向於關係數據建模。

+0

@TheOptimusPrimus ...感謝報復downvote,除了我沒有downvote你...所以享受你孤獨的苦澀 – swasheck

相關問題