簡體   English   中英

Postgres HStore與HABTM

[英]Postgres HStore vs HABTM

我正在構建一個應用程序,該應用程序的模型可以用另一個模型的條目進行標記,類似於Stackoverflow的標記功能。

例如:

class Question < ActiveRecord::Base
    has_and_belongs_to_many :tags
end

class Tag < ActiveRecord::Base
    has_and_belongs_to_many :questions
end

我正在爭論只是通過聯接表設置has_and_belongs_to_many關系,還是使用Postgres的hstore功能將標簽添加到哈希中。

尋找具有相似經驗的人,他們可以說出性能差異,障礙或任何其他可以說服我的方式。

編輯:

我想我還應該提到,這將是一個使用AngularJS前端的API。

您正在描述一個大辯論的主題:)規范化與非規范化。 使用多對多可以使您以非常簡單的方式進行出色的查詢,例如“有多少人使用某個標簽”。 HStore也非常好,但是到處都會有成千上萬個相同的標簽。 我在不同的項目中都使用了這兩種方法,但是真正的問題出在當您決定移動數據庫的一天時。 使用Hstore時,您將陷於postgresql或不得不重寫代碼。 如果超高速非常重要,而且要查詢不同的方式,並且您通常希望盡快將用戶記錄加載到其他同伴中,並顯示所有使用的標簽,那么我通常都會做這兩個事情:創建多對多關系,因為標簽也通常也是連接到更多對象的用戶,例如用戶在標簽表中有許多標簽,並且標簽已連接到與產品相關的品牌等。

然后,我在用戶表上創建一個帶有hstore或json對象的附加字段,該字段將添加每個標簽或在多對多關系被破壞時將其刪除。

舉個例子:在我的項目中,我有一些公司(將近1000萬個)對某些關鍵字及其在Google上的排名感興趣。 該表具有數百萬行,但僅與連接搜索結果的200萬個關鍵字相關。 這樣,我可以快速查詢按多少人及其身份搜索的結果。

如果客戶打開他們的關鍵字搜索頁面,我將從帶有json的文本列中加載他們的關鍵字,這比通過表格快。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM