3

我正在通过 Heroku 在 Postgres 上运行 Rails 应用程序。

我想在我的网站上为各种项目(例如用户评论)实现类似于 Facebook 的“喜欢”。将这些存储在我的数据库中的最聪明的方法是什么?

显而易见的就是在用户和项目之间有一个类似的连接表,如下所示:

user_id int
item_id int
item_type string
created_at datettime

但是,在显示时,这意味着每次我拉一个项目时,我都必须在整个类似表中拉一个连接,这可能会变得非常大。

对此的明显反应是在项目中存储一个计数器,用于他们正在进行的类似计数。但是,这不起作用,因为谁喜欢一个项目很重要,既可以显示在该项目旁边,也可以隐藏用户已经喜欢的事物的“喜欢”按钮。

我的计划是为所有喜欢的项目添加一个文本字段,我将在其中存储一个序列化数组。这样,每一个项目的拉动都会附带完整的谁喜欢它的列表。有没有更好的方法来做到这一点,或者这是推荐的方法?

4

1 回答 1

8

您是否有理由相信您的数据集将如此之大以至于连接成本太高?Postgres 虽然不如目前最快的 RDBMS 快,但现在已经相当快了。我曾经运营过一个每天获得数百万浏览量的网站,并且需要一些非常复杂的查询来生成每个页面。通过做一些简单的缓存,我们能够在非常普通的硬件上运行它。

当您进行非规范化时,您放弃了使用 RDBMS 的许多好处。如果我知道我必须这样做,我只会这样做。如果是这种情况,我会考虑为该数据使用其他东西,例如简单的键/值数据库。但我认为,只有当你拥有大量数据时,才会出现这种情况

于 2010-07-24T20:11:02.680 回答