mongodb關聯數據的設計

  之前接觸的都是MySQL這種關係型數據庫的設計,很多數據庫方面的思維已經被結構化查詢語言束縛了。
  最近在寫一個類似論壇的一個小項目,前端用的是React,後端用node.js和mongodb。在寫獲取發帖列表接口的時候,需求是獲取一個帖子數組,每個數組成員就是一個帖子對象,帖子對象裏包括文章標題、文章內容,同時還有發帖的作者。而作者我原本存的是一個id,取自user集合。原本的思路是在查詢的時候再通過作者id去user集合中找到作者的姓名和頭像,但在mongodb中,這需要在paper集合進行find操作後,再寫一個for循環,有多少帖子就要去user集合查多少次id。這種操作方法,顯然性能會非常差,想想都覺得恐怖。
  通過id去另外一個表裏查詳細數據,這是典型的MySQL查詢的思路,我在網上查了很久,mongodb貌似天生就不支持這種關聯查詢,實現起來都要繞很大的彎子。
  最後,我想明白一個事情,作者的姓名和頭像就應該直接存在paper集合中,在存單條帖子的時候,就直接存進去,這樣取的時候只做一次find查詢,那性能將是非常棒的。
  查詢的性能提升了,但其他方面就要多花費一些。首先是數據出現了冗餘,作者的姓名在user集合和paper集合中重複出現,並在paper集合中重複多次,mongodb實際上是在拿空間換時間。其次,數據維護更復雜,當要修改作者姓名時,要做得操作就非常多了,不過,在數據庫的增刪改查中,查的操作是最頻繁的。改的操作並不是那麼頻繁,而且對性能的要求也並不高。
  綜上所述,mongodb這種在一個集合中存儲所有所需數據的方法是可取的,於是我決定直接在帖子集合中存作者信息,這樣一來,很多問題就迎刃而解了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章