Rails 4.1-为大量记录保存friendly_id slug



我有一个数据库,其中有几百万个实体需要一个friendly_id slug。有没有办法加快保存实体的过程?CCD_ 1非常慢。以每秒6-10的速度,我期待着一周多的全天候跑步。

我只是想知道friendly_id或并行处理技巧中是否有一种方法可以大大加快这个过程。

目前,我正在运行大约10个控制台,在每个控制台中,值为+1000k:

Model.where(slug: nil).find_each(start: value) do |e|
  puts e.id
  e.save
end

编辑

导致更新速度如此之慢的最大原因之一是实体的初始查找查询,而不是记录的实际保存。前几天我把这个网站上线了,看到服务器数据库请求不断达到2000毫秒,罪魁祸首是@entity = Entity.find(params[:id]),它导致了500多万条记录的最大问题。我没有意识到在slug列上没有索引,活动记录正在slug列中执行SELECT语句。在正确索引后,我得到了20ms的响应时间,运行上面的查询从每秒1-2个实体增加到每秒1k个。做多次手术很快就完成了一次性手术。

我认为最快的方法是直接进入数据库,而不是使用Active Record。如果你有一个类似Sequel Pro的GUI,请连接到你的数据库(详细信息在你的database.yml中)并在那里执行查询。如果您对命令行感到满意,可以直接在数据库控制台窗口中运行它。Ruby和Active Record只会让你慢下来做这样的事情。

要更新一个名为"users"的假设表的所有slug,其中slug将是他们的名字和姓氏的串联,您可以在MySQL中这样做:

UPDATE users SET slug = CONCAT(first_name, "-", last_name) WHERE slug IS NULL

最新更新