2017-02-15 18 views
0

我有一個「目錄」,我試圖顯示信息。這些信息將從幾個不同的表格中提取出來,以便用戶能夠設置一個首選項來隱藏他們「目錄」上相應表格中的記錄。我運行一個Postgres數據庫現有Postgres表中的Json列與新表

所以,我的問題是:

它會更好(性能明智),以創建一個新表(table_a_to_catalog),其中,將存儲table_a_id和catalog_id從表-A記錄用戶想要隱藏該目錄。然後有另一個表(table_b_to_catalog)持有該連接...等等...

OR

它會更好存儲隱藏偏好在目錄中的記錄中的JSON值?所以它會像{「table_a」=> [id1,id2,id3],「table_b」=> [id1,id2,id3]}

回答

1

這真的取決於這個目錄的用例...如果信息是隻讀的,而且你每天運行一次工作來更新上述目錄,那麼json會更好。但是,如果您想要更新現場類別的信息並允許它可編輯,那麼有一個單獨的表格將是最好的。

至於個人喜好,我認爲在表保存數據允許更多的靈活性,當你要使用的數據對其他功能

+0

謝謝!目錄將是隻讀的。 – cal1801

+0

如果你有一個單獨的工作或功能,批量更新信息,然後JSON應該是你最好的選擇 – lifejuggler

1

有非常大的負面表性能的影響。在postgres表中保留「隱藏」視圖數據意味着每個目錄中的每個隱藏條目都有一個DB條目。每個客戶端應用程序都需要過濾該表以獲取與其用戶相關的信息,而對於許多用戶來說,這可能需要相當長的時間。

如果一個簡單地增加一個字段到用戶表,含有視數據(例如隱藏偏好)的hstore,JSON或CSV,這將減少在初始加載時間輕微。如果「隱藏」意味着不顯示客戶端,JSON會更有意義,如果您希望不將數據發送到客戶端,hstore更有意義。

我稍微說了一點,因爲許多其他因素(緩存)會比此更影響性能。您可能需要考慮使用Redis作爲應用程序運行時,使用Postgres作爲數據倉庫。

+0

我不認爲它需要每個目錄的每個隱藏字段有一個數據庫條目。使用JSON(而不是hstore),您可以爲要隱藏的每個「類別」創建一個ID數組。因此,目錄表的記錄可能是 catalog_id:1 name:Catalog Test user_id:5 hide:{「models」:[1,2,3,4,5],「equipment」:[3, 6,10,39,53]}那麼當生成一個目錄時,它只需要獲取group_by,然後將這些值存儲在@variables中。我也說JSON而不是hstore,因爲使用哈希值時,如果不進行字符串轉換(這可能很麻煩),您無法保存數組。 – cal1801