簡體   English   中英

如何確保我的MySQL數據庫中快速變化的數據能夠在PHP腳本中准確表示?

[英]How do I make sure the rapidly changing data from my MySQL DB is accurately represented in php scripts?

我有一個包含大量游戲對象的數據庫,以下3個PHP腳本正在查詢。

  1. 列表對象:獲取包含我需要的所有項目的JSON對象
  2. 添加對象:對象添加到數據庫
  3. 重置:擦除表中的所有對象

他們三個都有所作為。 雖然,時間不匹配。 當游戲調用重置功能時,它會重新啟動。 當游戲重新啟動時,它會自動加載所有對象。 不幸的是,這就是問題,如果游戲剛剛重置,對象仍然會被腳本1拉出。

我知道交易 ,但我從來沒有使用過,我不知道我將如何實現那些在這里,因為我的交易是涉及從在不同時間運行不同的腳本的事情。

獎勵積分:這個設置(AS3> php> MySQL)會讓我遇到重負嗎? 游戲可能會被10,100,1000人接收,有什么我可以讀到的關於這個主題的東西嗎?

編輯:新想法/問題

目前,擦除工作如下:對象表有一個字段'deleted',當調用reset方法時,該字段設置為'1'。 將現有數據復制到存檔表中然后截斷實時表可能更聰明......

編輯:這是我正在使用的(相關)PHP代碼

添加對象:

if ($db_found) {

$x = $_GET['x'];
$y = $_GET['y'];
$type = $_GET['type'];
$name = $_GET['name'];
$text = $_GET['text'];

$SQL = "INSERT INTO bodies  (x,y,type,name,text)
VALUES ('".$x."','".$y."','".$type."','".$name."','".$text."' )";

if (!mysql_query($SQL))
  {
  die('Error: ' . mysql_error());
  }

};

mysql_close($db_handle);

列表/獲取對象:

if ($db_found) {

$SQL = "SELECT * FROM bodies WHERE deleted = 0";
$res = mysql_query($SQL);

    $rows = array();
    while($r = mysql_fetch_assoc($res)) {
        print $r['x'] . ','
        . $r['y']
        . ','
        . $r['type']
        . ','
        . $r['name']
        . ','
        . $r['text']
        .  ';';
    }

};
mysql_close($db_handle);

重置:( 編輯2)

mysql_query("LOCK TABLES bodies WRITE;");

$SQL = " DELETE FROM bodies";

if (!mysql_query($SQL))
  {
  die('Error: ' . mysql_error());
  }
};

mysql_query("UNLOCK TABLES;");

如何在MySQL中進行交易。

在您的情況下,您可能會對事務的原子性和隔離感興趣,這意味着在重新啟動游戲時,您希望確保在重置尚未完全完成之前,沒有人可以獲取任何中間數據。 在事務中執行重置將確保此屬性*。 (*為TRUNCATE見下文)

對於交易中涉及的所有表,您將需要InnoDB作為您的引擎。 MyISAM不支持交易。

在事務內部更改大量數據可能會導致高查詢延遲,因為如果您決定使用ROLLBACK ,則事務使用特殊的撤消/重做日志來撤消您在事務中執行的所有操作。

在開始新游戲時我不會擦桌子。 而是在開始新游戲時為您的數據提供game_id並使用新的game_id 現在空間不應該成為一個問題。 這樣做的好處是,在重置游戲時,您幾乎不需要鎖定表。

如果必須,請務必在清除表格時使用TRUNCATE 據我所知,MySQL中的TRUNCATE無法回滾,因此在事務中執行它不會做任何有用的事情。

我認為如果使用正確,PHP / MySQL將表現良好,即使訪問量較大。 您可以使用xdebugMySQL慢查詢日志等分析工具來跟蹤和刪除性能瓶頸。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM