mysql– 更新大量记录 -​​ 性能优化

mysql– 更新大量记录 -​​ 性能优化,第1张

概述我有一个棒球工具,允许用户分析球员的历史击球统计数据.例如,在夜间条件下,A-Rod在过去7天内有多少次点击?我想扩展时间范围,以便用户可以将玩家的击球统计数据分析到365天.但是,这样做需要一些严格的性能优化.这是我目前的一套模型:class AtBat < ActiveRecord::Base belongs_to :batter belo

我有一个棒球工具,允许用户分析球员的历史击球统计数据.例如,在夜间条件下,A-Rod在过去7天内有多少次点击?我想扩展时间范围,以便用户可以将玩家的击球统计数据分析到365天.但是,这样做需要一些严格的性能优化.这是我目前的一套模型:

class AtBat < ActiveRecord::Base  belongs_to :batter  belongs_to :pitcher  belongs_to :weather_condition  ### DATA MODEL ###  # ID  # batter_ID  # pitcher_ID  # weather_condition_ID  # hit (boolean)  ##################endclass BattingStat < ActiveRecord::Base  belongs_to :batter  belongs_to :recordable,:polymorphic => true # e.g.,Batter,Pitcher,WeatherCondition  ### DATA MODEL ###  # ID  # batter_ID  # recordable_ID  # recordable_type  # hits7  # outs7  # at_bats7  # batting_avg7  # ...  # hits365  # outs365  # at_bats365  # batting_avg365  ##################endclass Batter < ActiveRecord::Base  has_many :batting_stats,:as => :recordable,:dependent => :destroy  has_many :at_bats,:dependent => :destroyendclass Pitcher < ActiveRecord::Base  has_many :batting_stats,:dependent => :destroyendclass WeatherCondition < ActiveRecord::Base  has_many :batting_stats,:dependent => :destroyend

为了使我的问题保持合理的长度,让我讲述我正在做什么来更新batting_stats表而不是复制一堆代码.让我们从7天开始吧.

>检索过去7天内的所有at_bat记录.
>迭代每个at_bat记录……
>给定at_bat记录,获取相关的batter和相关的weather_condition,找到正确的batting_stat记录(BattingStat.find_or_create_by_batter_and_recordable(batter,weather_condition)),然后更新batting_stat记录.
>对击球手和投手(可录音)重复步骤3.

步骤1-4也重复其他时间段–15天,30天等.

现在我想象如果我将时间段从可管理的7/15/30扩展到7/15/30/45/60/90/180/365,那么每天运行脚本来进行这些更新是多么费力. .

所以我的问题是你如何让这个以最高水平的性能运行?

最佳答案AR并不是真正意味着像这样进行批量处理.通过直接进入sql并执行INSERT FROM SELECT(或者可能使用为您执行此 *** 作的gem),您可能最好不要进行批量更新. 总结

以上是内存溢出为你收集整理的mysql – 更新大量记录 -​​ 性能优化全部内容,希望文章能够帮你解决mysql – 更新大量记录 -​​ 性能优化所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1168131.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存