【发布时间】:2010-12-26 22:54:46
【问题描述】:
假设我有这些表/模型:
Product
- id
- last_updated_date
- name
- price
User
- id
- name
WishlistItem
- id
- user_id
- product_id
Product 表有几百万条记录,每晚通过数据导入自动更新(插入新表,删除旧表)。我基本上对该表/模型具有只读访问权限。
如果产品在用户的心愿单上并且价格下降,我希望能够通知该用户。有哪些方法可以做到这一点?
我有几个想法:
跟踪愿望清单模型中的 Product.last_updated_date 并定期轮询产品表以查看它是否已更新。这听起来像是一个可怕的/不可扩展的解决方案。
在产品表更新时触发的某种 Postgres 视图或函数?我是 postgres 的新手,所以我还不确定这是否可能。
你会建议我没想到的令人惊奇的事情:)
非常感谢任何正确方向的帮助!
更新: 提出的一个想法是将当前价格缓存在愿望清单条目本身中,即:
WishlistItem
- id
- user_id
- product_id
- price
...然后,在导入之后,我可以将 WishlistItem.price 与 Product.price 进行比较并相应地通知。虽然可行,但这种方法似乎有点浪费,因为每个用户的每个 WishlistItem 基本上都将具有相同的价格数据缓存副本,如果有更新,我将不得不用新价格更新每个列表。不过,我不确定是否有解决方法。
更新: 最后我决定我应该只跟踪所有版本的数据,以便我可以在更新触发器上使用标准。这也让我可以记录所有价格变化,以便跟踪定价趋势等。
【问题讨论】:
-
您的更新符合我下面的建议,非规范化价格。由于您替换了产品表,因此您需要在其他表中记录原始价格。正如您所说,需要通过更新愿望清单表来标记通知,还有其他解决方案,例如,拥有一个通知表并且每个用户/产品只允许一个通知(只需添加愿望清单的 id 并使其唯一) .
标签: ruby-on-rails postgresql triggers notifications ruby-on-rails-3