2017-10-12 72 views
2

我必須建立一個網站。我正在問一些關於模型的問題。我有Postgres和MongoDB之間的選擇。Postgres或MongoDB

案例1:Postgres的

  • 每一頁都有一個表,每個表只有一個排,一個頁面(每個頁面不規整像另一個)
  • 我有一個timelined頁媒體(專輯和視頻)
  • 所以我有多個媒體(圖片,視頻),我也通過圖片頁面和視頻頁面的專輯顯示它。
  • 因此,我有一個媒體表,與專輯表(多對多)和一個類型列鏈接,以確定它是圖片還是視頻。

案例2:MongoDB的

  • 我完全新的NoSQL,我不知道如何來存儲數據。

問題,我看到

  • 只有一行的表,擾亂我
  • 在媒體表,我可以有視頻專輯,我想,以避免它。但是,如果我在圖片表格和視頻表格中剪切此表格,我如何才能進行一次調用以獲得時間頁面的所有媒體。

這就是爲什麼我覺得用MongoDB製作網站更好​​。但我不確定,我是NoSQL的新手。

我想知道您的想法,Postgres或MongoDB的最佳解決方案是什麼?我需要知道它是否是MongoDB?或者也許有什麼東西讓我逃離Postgres。

謝謝您的回覆。

我希望你能理解我所有的問題。我很抱歉我的英語,我正在努力做到最好。

+1

儘管是PostgreSQL開發人員,但我並沒有對此發表意見。我將指出PostgreSQL對JSON對象存儲的支持,包括'json'和'jsonb'數據類型,操作符和索引支持。這對混合數據存儲非常有用。但最終,使用適合你的東西。我建議你*不要*用一個創建大量表的模型來處理它,每個表有一行,這會很笨拙並且性能很差。 –

回答

1

這將取決於時間,如果你沒有時間去學習另一項技術,答案就是直接與你所知道的並且解決它的問題。 如果可擴展性更重要,那麼您必須更深入地瞭解您的架構,並且非常清楚如何擴展postgresql。

Postgresql可以處理非結構化數據的json列,我使用它,它很棒。我將在列名稱page_structure中使用包含非結構化數據的單個表,因此您將只有一個大型索引表,而不是大量行表。

查詢圖片和視頻不需要單獨的表格,爲了更具體一些,您需要提供一些方案。

1

我想你會得出正確的結論使用NoSql數據庫,因爲你不確定一個頁面的表中的列,這就是你爲不同的頁面創建不同的表的原因。我仍然會說在記錄上使列有點一致。無論如何,通過使用MongoDB,您可以根據單個集合中的頁面屬性(SQL中的表)使用不同的列具有不同的記錄(在MongoDB中稱爲文檔)。如果需要,您可以分別創建圖片和視頻集合,並使用外鍵(如page_id)將它們與頁面集合關聯起來。或者,你可以調用頁面集合把所有的屬性,包括含有的所有視頻或圖片,通過它可以檢索對應一個特定頁面的視頻和圖片如下面所示的ID的數組,

集合

Pages [{id, name, ...., [video1, video2,..], [pic1, pic2, pic78,...]}, id, name, ...., [video1_id, video2_id,..], [pic1_id, pic2_id, pic78_id,...]},...] 

Videos [{video1_id, content,... }, {video2_id, content,...}] 

Pictures [{pic1_id, content,... }, {pic2_id, content,...}]