Ruby Rails 中的跟踪活动最佳实践
Tracking activities best practice in Ruby on Rails
我想在数据库中保存产品或帖子的浏览量以及其他元数据,例如谁查看了对象、推荐、时间等。
所有活动都将用于推荐引擎、更新表和更多后台工作。
对于用户体验和 SEO 来说,主要关注的是速度。
我提出了 3 种方法:
- 从数据库中读取记录,写入activity(2
交易)。
- 不是读取,而是更新视图的记录(1 个事务)。
- 读取记录并将activity对象发送到Redis或RabbitMQ。
我在 Rails 上使用 Ruby 和 PostgreSQL。
第一种方法比第二种方法快吗?
对于小型 Web 应用程序,第三个选项是否有点矫枉过正?
为了其他可扩展性的性能,使用选项 #3 中的 redis 或 rabbitmq。
应用程序大小在确定何时使用消息队列时并不重要。相反,系统需求决定了这一点。
为用户存储视图和活动是一个很好的例子,说明何时应该使用队列来保持原始 http 请求的速度。
进行一次网络调用以将事件数据发布到 rabbitmq,并根据需要拥有尽可能多的消费者,以在后台记录数据库中的所有事件数据。
与此同时,用户已经在愉快地查看您的网页,而所有这些都发生在另一台服务器上,在其他地方。
我想在数据库中保存产品或帖子的浏览量以及其他元数据,例如谁查看了对象、推荐、时间等。
所有活动都将用于推荐引擎、更新表和更多后台工作。
对于用户体验和 SEO 来说,主要关注的是速度。
我提出了 3 种方法:
- 从数据库中读取记录,写入activity(2 交易)。
- 不是读取,而是更新视图的记录(1 个事务)。
- 读取记录并将activity对象发送到Redis或RabbitMQ。
我在 Rails 上使用 Ruby 和 PostgreSQL。
第一种方法比第二种方法快吗? 对于小型 Web 应用程序,第三个选项是否有点矫枉过正?
为了其他可扩展性的性能,使用选项 #3 中的 redis 或 rabbitmq。
应用程序大小在确定何时使用消息队列时并不重要。相反,系统需求决定了这一点。
为用户存储视图和活动是一个很好的例子,说明何时应该使用队列来保持原始 http 请求的速度。
进行一次网络调用以将事件数据发布到 rabbitmq,并根据需要拥有尽可能多的消费者,以在后台记录数据库中的所有事件数据。
与此同时,用户已经在愉快地查看您的网页,而所有这些都发生在另一台服务器上,在其他地方。