[英]How do I make a clickable url in my php page after getting data from MySQL DB?
[英]How do I make sure the rapidly changing data from my MySQL DB is accurately represented in php scripts?
我有一個包含大量游戲對象的數據庫,以下3個PHP腳本正在查詢。
他們三個都有所作為。 雖然,時間不匹配。 當游戲調用重置功能時,它會重新啟動。 當游戲重新啟動時,它會自動加載所有對象。 不幸的是,這就是問題,如果游戲剛剛重置,對象仍然會被腳本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;");
在您的情況下,您可能會對事務的原子性和隔離感興趣,這意味着在重新啟動游戲時,您希望確保在重置尚未完全完成之前,沒有人可以獲取任何中間數據。 在事務中執行重置將確保此屬性*。 (*為TRUNCATE見下文)
對於交易中涉及的所有表,您將需要InnoDB作為您的引擎。 MyISAM不支持交易。
在事務內部更改大量數據可能會導致高查詢延遲,因為如果您決定使用ROLLBACK
,則事務使用特殊的撤消/重做日志來撤消您在事務中執行的所有操作。
在開始新游戲時我不會擦桌子。 而是在開始新游戲時為您的數據提供game_id
並使用新的game_id
。 現在空間不應該成為一個問題。 這樣做的好處是,在重置游戲時,您幾乎不需要鎖定表。
如果必須,請務必在清除表格時使用TRUNCATE
。 據我所知,MySQL中的TRUNCATE
無法回滾,因此在事務中執行它不會做任何有用的事情。
我認為如果使用正確,PHP / MySQL將表現良好,即使訪問量較大。 您可以使用xdebug或MySQL慢查詢日志等分析工具來跟蹤和刪除性能瓶頸。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.