繁体   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