2012-08-06 185 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