【问题标题】:Ruby On Rails - best way to implement Tinder behaviorRuby On Rails - 实现 Tinder 行为的最佳方式
【发布时间】:2016-03-10 22:43:30
【问题描述】:

我正在为移动客户端构建一个 Rails Api,它的工作方式与 Tinder 几乎相同。移动用户将收到一些图像,并会喜欢、不喜欢或给图像打中性标记。

我想知道实施这样一个系统的最佳方式是什么不会收到相同的图像。

我正在寻找一种强大的技术或模型来提高我的服务器性能。

仅供参考,我目前有 10K 用户和 100K 图像。所以让sur性能保持良好非常重要。

我正在使用 Ruby-on-Rails 4 和 Postgresql。

【问题讨论】:

  • 如何保存用户选择的价值?你不能在显示图像之前检查记录的存在或喜欢/不喜欢/中性的存在吗?
  • 我正在考虑在我的 Image 模型中添加一个列,其中将包含所有喜欢、dislked 或对图像给予中性标记的用户 ID。此列将是一个字符串数组(这在 postgres 中是可能的)。
  • 解析该字符串会很快变慢。我认为连接表会更好。我将添加一个答案:我在想什么。

标签: ruby-on-rails postgresql


【解决方案1】:
 class ViewedImage
   belongs_to :user
   belongs_to :image
 end

 class User
   has_many :viewed_images
   has_many :images, through: :viewed_images
 end

 class Image
   has_many :viewed_images
   has_many :users, through: :viewed_images
 end

每当有人对图像执行操作时创建一个 ViewedImage 并将 user_id 和 image_id 保存在 ViewedImage 记录中。然后查看当前图像是否有该 user_id / image_id 的记录。

【讨论】:

  • 这是我坚持的解决方案之一。假设我有一张被查看了 1000 次的图像,我将有 1000 条 ViewedImage 记录与该图像相关联。还说我有大约 100 万条 ViewedImage 记录,并且我在 image_id 上有一个索引,我认为如果我将查看图像的用户 ID 存储在数组中会更好(这是属于 Image 的列)......你怎么办认为?
  • @OmarLahlou 使用这两个外键引用查找该记录仍然比解析一串 1000 个 id 然后遍历它以找到用户要快得多。
  • 您可以对这两种方法进行基准测试,但可以肯定的是。我非常有信心逐个遍历一组 id 不会更快,但我每天都错了,所以对它进行基准测试是一个好方法。如果您决定切换方法,您也可以从字符串开始,然后在最近创建记录……尽管反之亦然。改变并不难。
猜你喜欢
  • 1970-01-01
  • 2018-03-25
  • 1970-01-01
  • 2022-06-11
  • 1970-01-01
  • 1970-01-01
  • 2011-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多