【问题标题】:Updating MySQL Database every second每秒更新 MySQL 数据库
【发布时间】:2012-08-06 14:06:28
【问题描述】:

我正在制作一个在线游戏。我现在正在用 300 名玩家测试游戏,但我遇到了问题。我必须每秒更新大约 300 行数据库,但更新时间太长。大约需要 11143 毫秒(11 秒),这对于必须在 1 秒内完成的任务来说已经足够了。我正在从 JAVA 对数据库进行这些更新。我已经尝试过使用 PHP,但它是一样的。更新SQL查询很简单……

 String query5 = "UPDATE naselje SET zelezo = " + zelezo + ", zlato = " + zlato + ", les = " + les + ", hrana = " + hrana + " WHERE ID =" + ID;

所以任何人都知道如何以更快的性能每秒更新数据库或任何其他解决方案如何更新游戏资源(黄金、木材、食物……)?

我的配置:

英特尔酷睿 i5 M520 2.40GHz

6 GB 内存

【问题讨论】:

  • 您应该让我们决定查询是否简单。在问题中发布如何?
  • 我们需要更多信息。让我们从进行更新的 Java 代码开始(包括如何获得连接),让我们也看看表定义
  • @huMptyduMpty 你读过这个问题吗?
  • 您使用的是哪个 MySQL 引擎?你试过改变它吗?因为 MISAM 有表级锁,而 innodb 有行级锁,这可能会对你不断更新的 web 应用程序产生影响。
  • 更新查询的性能主要取决于该表中的行数和索引的存在(对于要更新的​​字段是集群和非集群)和更新字段的数据类型。在调整更新脚本时尝试考虑这些参数

标签: java php mysql database sql-update


【解决方案1】:

您可能正在单独更新每一行,您需要使用batch update

【讨论】:

  • 是的。我正在使用 for 语句更新行。
  • 每次执行更新时它都会提交,这需要时间,使用批量更新只会提交一次,从而节省大量时间。
【解决方案2】:

如果您还没有使用 PDO,请切换到 PDO,并使用transactions。此外,重组您的表以使用 InnoDB 与 MyISAM。

InnoDB 更适用于经常读/写的大型表。

这是它旨在处理的事情之一。多个SELECT/UPDATE/INSERT 风格非常相似的语句。

在处理上述类型的多个连续调用时使用事务也是一种很好的编码习惯。

使用此Google Search 了解有关 PHP PDO 和 MySQL 事务的更多信息。

例子:

有交易

$pdo = new PDO(...);
$pdo->beginTransaction();

for ( $i = 0; $i < 1001; $i++) {
    $pdo->query("UPDATE table SET column='$var' WHERE ID = $i");
}

$pdo->commit();

【讨论】:

  • Tnx,我将尝试 PDO 并了解有关交易的更多信息。是的,我正在使用 InnoDB。
猜你喜欢
  • 2018-12-23
  • 1970-01-01
  • 1970-01-01
  • 2017-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-08
  • 2011-09-23
相关资源
最近更新 更多