2016-11-14 163 views
0

我目前正在研究一個腳本,它有一個大的數據庫,所以爲了減少負載我建立了一個包含每分鐘更新的數據的表(CRON PHP FILE)。所以它工作得很好,但我很好現在有一個問題。 我使用的代碼:截斷並插入問題

$conn->query("TRUNCATE tempo"); 
$conn->query("INSERT INTO ...."); 

和PHP文件,我從節奏表中獲取數據的問題,現在的問題是,當PHP運行,每分鐘有短暫的延遲,如數據刪除和數據之間1秒在這1秒內插入錶速度是空的,所以每一分鐘我都有1秒的時間,網站只返回0個數據(因爲延遲)。我怎麼解決這個問題 ?

+1

將整件事包裝在一個交易中。但這聽起來像是一個更適合redis的工作。 – e4c5

+0

截斷表導致隱式提交,因此您無法將其封裝到單個事務中。 – Shadow

+0

@Shadow hm,是的,錯過了 – e4c5

回答

1

如果你在訪問數據時不能有任何停機時間,那麼有兩個具有相同結構的表格,我將其稱爲table_Atable_B。在任何時候,只有其中一個應該是「現場」,這意味着將爲所有數據請求提供服務。現在假設它是table_A。

當您從cron導入時,然後截斷table_B並將數據插入到table_B中。當插入到table_B中時,然後將table_B標記爲活動標記,並且下一個導入的目標應該是table_A。

這樣你就不會有任何停機時間訪問你的數據。

+0

如果這是不可能的(這是沒有停機時間我能想到的唯一方法),爲了減少數據延遲,您可以嘗試以下操作: 將所有內容插入到特殊的插入表中(與節奏相同的結構)。然後截斷速度並將特殊表中的每一個插入節奏。取決於應該快得多的行數,因爲everyhing直接發生在服務器上(INSERT INTO速度SELECT * FROM tempo_special_import;)。 – Seb