您永遠(yuǎn)無法保證順序(或隱式獨(dú)占訪問)。嘗試一下,你就會(huì)把自己挖掘得越來越深。
正如 Matt 和 KIKO 在評(píng)論中提到的,您可以使用約束和事務(wù),這些應(yīng)該會(huì)有很大幫助,因?yàn)槟臄?shù)據(jù)庫(kù)將保持干凈,但請(qǐng)記住您的應(yīng)用程序需要能夠捕獲數(shù)據(jù)庫(kù)層產(chǎn)生的錯(cuò)誤。 絕對(duì)值得首先嘗試。
處理此問題的另一種方法是強(qiáng)制數(shù)據(jù)庫(kù)/應(yīng)用程序級(jí)別鎖定。
數(shù)據(jù)庫(kù)級(jí)鎖定更加粗糙,如果您在某個(gè)地方忘記釋放鎖定(在長(zhǎng)時(shí)間運(yùn)行的腳本中),則非常不可原諒。
MySQL 文檔:
鎖定整個(gè)表通常是一個(gè)壞主意,但它是可行的。這很大程度上取決于應(yīng)用程序。
一些開箱即用的 ORM 支持對(duì)象版本控制,如果版本在執(zhí)行過程中發(fā)生更改,則會(huì)拋出異常。理論上,您的應(yīng)用程序會(huì)遇到異常,重試時(shí)會(huì)發(fā)現(xiàn)其他人已經(jīng)填充了該字段,并且不再是更新的候選者。
應(yīng)用程序級(jí)鎖定更加細(xì)粒度,但代碼中的所有點(diǎn)都需要遵守鎖定,否則,您將回到方#1。如果您的應(yīng)用程序是分布式的(比如 K8S,或者只是部署在多個(gè)服務(wù)器上),那么您的鎖定機(jī)制也必須是分布式的(不是實(shí)例本地的)
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://m.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)