我剛剛從MyISAM表切換到InnoDB,因爲行鎖定似乎比表鎖定更好。PHP&MySQL InnoDB:在插入或更新後數據不可用
問題是,現在我之前做的很多事情都不起作用。
例如,我有一個腳本根據用戶的瀏覽歷史向用戶推薦項目。這是通過將行插入或更新到建議表中完成的。建議的實際計算是通過SQL語句完成的。所以有時我會執行推薦聲明,然後立即(在相同的PHP腳本中)請求結果,以便它可以顯示給用戶。有了MyISAM,這個工作非常完美,但有了InnoDB,它有時會返回舊的結果,或者沒有結果(如果以前沒有的話)。
此外,我有一個表,作爲一個隊列的東西。要使用它,我執行並更新,然後選擇此更新的結果。它再次適用於MyISAM,但不適用於InnoDB。
如何確保在某些情況下行可以立即插入或更新?在其他情況下,如果它加快查詢速度,我會很滿意延遲插入或更新。但是在我所述的特殊情況下,我需要立即採取行動。有沒有一個PHP命令來做到這一點?或者它是否使用MySQL設置?
您是否在多個節點上覆制數據庫? – decden 2013-04-06 06:26:58
數據庫被複制到同一服務器上的另一個驅動器。爲什麼? – Alasdair 2013-04-06 07:06:03
由於可能會將更改寫入主節點,因此與其他節點同步之前可能會查詢從節點(尚未收到更改)。但是,據我所知,你正在使用一個服務器實例,這不應該是問題。 – decden 2013-04-06 07:46:24