在並行系統中併發問題永遠不可忽視。儘管php語言原生沒有提供多執行緒機制,那並不意味著所有的操作都是執行緒安全的。尤其是在操作諸如訂單、支付等業務系統中,更需要注意運算元據庫的併發問題。
接下來我通過乙個案例分析一下php運算元據庫時併發問題的處理問題。
首先,我們有這樣一張資料表:
mysql> select * from counter;
| id | num |
| 1 | 0 |
1 row in set (0.00 sec)
這段**模擬了一次業務操作:
function dummy_business() elseif (!$pid) elseif (!$pid) else elseif (!$pid) else elseif (!$pid) else elseif (!$pid) {
dummy_business();
echo 'quit'.$i.php_eol;
break;
這次,我們也得到了期望的結果:
mysql> select * from counter;
| id | num | version |
| 1 | 100000 | 100000 |
1 row in set (0.01 sec)
由於樂觀鎖最終執行的方式相當於原子化update,因此在效能上要比悲觀鎖好很多。
在高效能系統中處理併發問題,受限於後端資料庫,無論何種方式加鎖效能都無法高效處理如電商秒殺搶購量級的業務。使用nosql資料庫、訊息佇列等方式才能更有效地完成業務的處理。
參考文章
php 資料庫併發處理
在並行系統中併發問題永遠不可忽視。儘管php語言原生沒有提供多執行緒機制,那並不意味著所有的操作都是執行緒安全的。尤其是在操作諸如訂單 支付等業務系統中,更需要注意運算元據庫的併發問題。接下來我通過乙個案例分析一下php運算元據庫時併發問題的處理問題。首先,我們有這樣一張資料表 mysql sele...
PHP使用資料庫的併發問題
摘要 在並行系統中併發問題永遠不可忽視。儘管php語言原生沒有提供多執行緒機制,那並不意味著所有的操作都是執行緒安全的。尤其是在操作諸如訂單 支付等業務系統中,更需要注意運算元據庫的併發問題。接下來我通過乙個案例分析一下php運算元據庫時併發問題的處理問題。原載於我的部落格 在並行系統中併發問題永遠...
PHP使用資料庫的併發問題
在並行系統中併發問題永遠不可忽視。儘管php語言原生沒有提供多執行緒機制,那並不意味著所有的操作都是執行緒安全的。尤其是在操作諸如訂單 支付等業務系統中,更需要注意運算元據庫的併發問題。接下來我通過乙個案例分析一下php運算元據庫時併發問題的處理問題。原載於我的部落格 在並行系統中併發問題永遠不可忽...