2014-09-22 90 views
-1

我是MongoDB的新手。我有兩個系列,StoriesUsers。除了object_id之外,故事只包含兩個鍵,標題和網址。對於Users集合,我記住了以下模式,在這裏顯示爲Python字典/ json。MongoDB,這是深層嵌套的數據模型好嗎?

users = { 
    "username": { 
     "stories_liked": [], # array of story object_id's 
     "stories_disliked": [], # array of story object_id's 
     "bag_of_words": { 
      "word1": {"pos": 0,"neg":0}, 
      "word2": {"pos": 0,"neg":0}, 
      # hundreds of thousands of words... 
     } 
    } 
} 

我意識到,雖然有重複了很多這裏。我以這種方式設計了原子性和快速查找。我想知道如果不同的事情會更好。

回答

0

這裏的重複究竟在哪裏?你的模式的好壞取決於你將如何使用它。如果你不提供你是否要修改/使用它,那麼這些數據幾乎沒有用處。

所以如果你只是存儲你的數據,然後只檢索它,你的模式可能是好的。另一方面,如果您要用多種方式修改元素(添加/刪除用戶喜歡/不喜歡的故事,修改一大堆單詞),那麼您的模式就會變得非常糟糕。如果你會有一些(甚至更糟糕的)超級活躍用戶開始喜歡/不喜歡幾乎所有東西,情況也是如此。

不是真正相關的,但如果你談論mongo,沒有必要寫python字典 - 你可以發佈一個json。

+0

重複是每個用戶都有自己的單詞包,這是一個包含數千個單詞的字典。 我是這樣設計的,因爲我需要真正快速的查找 - 這個用戶的這個單詞的位置是什麼 - 以及原子性 - 如果一個新故事被添加到stories_liked,那麼這個故事的單詞必須被添加到病房在同一個交易中。這是一個分類器。 – pad 2014-09-22 12:27:01

0

我覺得模型還行。

首先,它沒有深度嵌套。只有4層

二,似乎你有故事和用戶,單詞和用戶之間的多對多關係。此外,你需要在「單詞」上快速查找和原子性。使用這種結構似乎很合理。

U可以也許使用下面的結構作爲替代:

"username": { 
    "stories_liked": [], # array of story object_id's 
    "stories_disliked": [], # array of story object_id's 
    "POS":{word1 : 3, word2 : 4, ...} # hundreds of thousands of words... 
    "NEG":{word1 : 5, word2 : 6, ...} # hundreds of thousands of words... 
} 

這改變某些查詢和索引的性能。待測。無論如何,如果你需要插入和更新的原子性,你應該使用嵌入模型,這就是你現在正在做的事情。

相關問題