【问题标题】:How to increment a Mysql Integer Field on Highload using PHP如何使用 PHP 在 Highload 上增加 Mysql 整数字段
【发布时间】:2015-04-28 19:30:09
【问题描述】:

我遇到了以下问题:当我尝试增加我的 mysql 表的一列时,值在高流量负载时不同步。

任务分为两件事,增加列并添加新行 到另一张桌子。所以如果我添加 100 行,计数器应该保持在 100。

在高负载时,例如100 request/s 它涉及到柜台的问题,我得到了 计数器值为 80,但添加了 120 行。

//This is the current increment routine build with an Yii ActiveRecord Class
$id = 123;
$dataRow = ActiveRecordModel::model()->findByPK($id);
$dataRow->counter +=1;
$dataRow->save();

//Add the row 
$row = new ActiveRecordModelRow();
$row->operatingSystem = 1;
$row->save();

我认为问题在于某些请求的处理速度比其他请求更快,并且可能会覆盖这些值。希望有人可以帮助我指出正确的方向或对如何解决此问题提出建议。

最好, 尼尔斯

【问题讨论】:

  • 你用的是什么数据库引擎?
  • 我在桌子上使用 MyISAM
  • 也许直接查询会修复它 UPDATE table SET counter=counter+1 WHERE id = $id
  • 要么锁定表,要么锁定表进行更新,然后解锁表

标签: php mysql high-load


【解决方案1】:

你不能在 mysql 中使用自动增量字段,以便数据库处理增量而不是 PHP。插入记录时会设置整数,因此处理需要多长时间并不重要。

【讨论】:

    猜你喜欢
    • 2011-01-03
    • 2019-06-12
    • 1970-01-01
    • 2012-05-05
    • 2015-12-30
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多