ruby-on-rails - 跟踪用户愿望 list 上产品 Markdown 的方法?

标签 ruby-on-rails postgresql triggers notifications ruby-on-rails-3

假设我有这些表/模型:

Product
- id
- last_updated_date
- name
- price

User
- id
- name

WishlistItem
- id
- user_id
- product_id

Product 表有几百万条记录,每晚通过数据导入自动更新(插入新表,删除旧表)。我基本上对该表/模型具有只读访问权限。

如果某个产品在用户的愿望 list 上并且价格下降,我希望能够通知该用户。有哪些方法可以做到这一点?

我有几个想法:

  1. 跟踪愿望 list 模型中的 Product.last_updated_date 并定期轮询产品表以查看它是否已更新。这听起来像是一个可怕的/不可扩展的解决方案。

  2. 更新产品表时触发的某种 Postgres View 或函数?我是 postgres 的新手,所以我不确定这是否可行。

  3. 你会提出一些我没想到的令人惊奇的事情:)

非常感谢任何正确方向的帮助!


更新: 出现的一个想法是将当前价格缓存在心愿单条目本身中,即:

WishlistItem
- id
- user_id
- product_id
- price

...然后,在导入之后,我可以将 WishlistItem.price 与 Product.price 进行比较并相应地进行通知。虽然它可行,但这种方法似乎有点浪费,因为每个用户的每个 WishlistItem 基本上都具有相同的价格数据缓存副本,如果有更新,我将不得不用新价格更新每个列表。不过,我不确定是否有解决方法。


更新: 最后我决定我应该只跟踪所有版本的数据,这样我就可以在更新触发器上使用标准。这也使我能够记录所有价格变化,以便跟踪价格趋势等。

最佳答案

您可以在 Product 上使用更新触发器,但听起来 Product 表实际上并没有被更新,而是被替换了;如果是这种情况,则没有更新来触发触发器,因此您必须通过在 Wishlist 中缓存价格(如 user247245 注释)并扫描 Product 价格变动。

如果 Products 正在更新而不是批发替换,则可以使用更新触发器来记录价格何时发生变化并安排通知相关方。触发器可能会通过将通知插入一个单独的表(以避免锁定 Products 更新)来排队通知,例如 Product_price_changes;然后,当 Products 更新完成时,一个单独的任务可以将 Product_price_changesWishlist 进行比较,通知感兴趣的用户,并通过删除所有内容来完成在 Product_price_changes 中。

请注意,在最新版本的 PostgreSQL 中,您可以将更新触发器限制为仅在列更改时触发,而不是在每行更改时触发。

关于ruby-on-rails - 跟踪用户愿望 list 上产品 Markdown 的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4535748/

相关文章:

ruby-on-rails - Rails cancan :manage all Offers as moderator which belong to the same Department

python-3.x - 使用 PostgreSQL copy_from、psycopg2 和 StringIO 批量插入

node.js - 基于时间的通知服务

mysql - 转换 '1|2|India' 此管道分隔字符串设置为列

javascript - 如何获取 JQuery.trigger ('click' );启动鼠标点击

ruby-on-rails - #<Rails::Application::Configuration> 的未定义方法 `assets'

ruby-on-rails - !!some_object 是做什么的?

ruby-on-rails - 嵌套(同时未嵌套)资源更好的方法

database - 如何判断数据库中索引的类型?

postgresql - 将 unix 时间戳转换为日期格式,按它分组并计数