2012-08-06 189 views
2

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

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

因此,任何人知道如何进行更新,数据库每秒钟有更快的性能或任何其他解决方案如何更新资源的游戏(金,木,食品,.. 。)?

我的配置:

Intel酷睿i5 M520 2.40GHz的

6 GB RAM

+3

你应该让我们决定,如果查询很简单。如何在问题中发布它? – Matt 2012-08-06 14:07:45

+0

我们需要更多信息。让我们从创建更新的Java代码开始(包括如何获得连接)并让我们看看表格定义 – jeff 2012-08-06 14:08:52

+1

@huMptyduMpty您是否回答了这个问题? – Matt 2012-08-06 14:08:59

回答

6

你可能会更新各行seperatly,你需要,如果你使用batch update

+0

是的。我正在用for语句更新行。 – Klemenko 2012-08-06 14:13:56

+2

每次执行它提交的更新并且需要时间时,使用批量更新将只提交一次并为您节省大量时间。 – Tomer 2012-08-06 14:15:02

+0

Tnx男子,从11k毫秒到200ms :) – Klemenko 2012-08-06 14:35:32

2

切换到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(); 
+0

Tnx,我会尝试PDO并了解更多关于交易的信息。是的,我使用InnoDB。 – Klemenko 2012-08-06 14:36:27