允许用户订阅关键字的好方法是什么?

时间:2014-11-05 16:42:22

标签: ruby-on-rails postgresql heroku solr redis

我有一个使用Rails 4,PostgreSQL并在Heroku上托管的rails应用程序。 该应用程序围绕以下模型:用户和文章。 用户可以创建文章。一篇文章包含标题,描述,位置(纬度,经度)和图像。

我想添加一个如下工作的通知系统:

  • 用户可以设置他们希望订阅的关键字列表。
  • 如果添加了包含其中一个关键字的文章(在标题中,但可能在描述中及时),则用户会收到通知。

以可扩展的方式实现这一目标的最佳方法是什么?

在最简单的形式中,我可以创建一个名为Keyword的模型,用于存储用户想要通知的关键字。 然后在文章的创建操作中,检查标题(或描述)是否包含任何已保存的关键字。

这听起来不错,但一旦添加了合理数量的用户,可能会失败。

显然,后台任务可以解决这个问题,但直接在数据库中包含基本字符串仍然听起来不对。

也许我可以将标题和描述标记为索引并使用后台进程来处理繁重的工作?我听说Postgres有一些内置的文本搜索 - 这可行吗? 我可以使用像Solr或Redis这样的Heroku附加组件来处理所有这些或者它是否过度杀伤? (无需支付附加费是一个优势)。 也许某人对同一功能有更好的实现。

我知道我可以快速实现它,我只是想确保它的实现能够实现。

谢谢, 布赖恩

1 个答案:

答案 0 :(得分:0)

我遇到过类似的问题。最慢的是进行不区分大小写的搜索。我建议你采用以下方法:让TID成为你存储标题的行的id;然后创建一个表,其中标题中的每个单词都有一行,小写,并带有相应的TID。比你需要的是单词和给定用户的关键字之间的连接。您可以使用哈希索引加速此查询。

就我而言,没有任何一个postgres文本功能可用,因为它们的性能都很差。

PS我们对大约60000个文档进行了全文搜索,因此您的情况可能会有所不同。