mysql一般不會死鎖,除非程序有問題。性能優(yōu)先事務不優(yōu)先的數(shù)據(jù)庫(設(shè)置)不要追求可靠性萬無一失。
網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序、集團企業(yè)網(wǎng)站建設(shè)等服務項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了三沙免費建站歡迎大家使用!
網(wǎng)站性能問題主要是數(shù)據(jù)庫量大了以后,查詢掃描硬盤而產(chǎn)生的。其它性能不要太在意。編寫代碼的時候不要堅持性能原則,而是堅持可用性原則。初學者編寫代碼通常容易面向性能,但是一個項目的一個頁面幾百、幾千行代碼是很常見的。要面向可用性、可維護性、可讀性。這是項目原則。你看看java語言。對于網(wǎng)站,除了查詢掃描硬盤而產(chǎn)生的時間延遲,其它是不管的,只要不算有問題就可以。
連接方式是否為永久連接,在訪問量未達到高并發(fā)之前,還是非永久鏈接更好。非永久連接的資源消耗是不大于永久連接的,因為mysql是把連接權(quán)限緩存的,不會多次掃描硬盤,性能是可執(zhí)行級別的而不是查找數(shù)據(jù)級別的。在訪問量達到高并發(fā)之后,性能問題的原因是多方面的,多環(huán)節(jié)的,是否為永久連接不是主要原因。
sql中并發(fā)控制采用的樂觀鎖就是在記錄中增加版本號或timestamp,那么MongoDB中如何實現(xiàn)呢?
Mongodb不善于處理事務,但提供了findAndModify命令。該命令允許對文檔進行原子性更新,并在同一次調(diào)用中返回:
代碼如如:
db.collection_yown.findAndModify(
{
query:{"name":"yown"},update:{"version":2},new:true or false
}
)
默認情況下,findAndModify命令會返回更新前的文檔,要是返回修改后的文檔,就把new設(shè)置為false.
Mongodb同時也提供update命令,這兩者的區(qū)別如下:
update和findAndModify都可以用做更新操作;
區(qū)別
findAndModify是有返回值的,輸出中的value字段即返回修改之前的文檔,使用 new:true選項返回修改后的文檔。 update是更新操作,是沒有返回值的。
findAndModify 強調(diào)操作的原子性(atomically),比如用來實現(xiàn)自增1的操作或者操作隊列。屬于 get-and-set 式的操作,一般來講,findAndModify 比update操作稍慢,因為需要等待數(shù)據(jù)庫的響應。
另外findAndModify ,其中modify可以是update,還可以是remove
{
findAndModify: string,
query: document,
sort: document,
remove: boolean,
update: document,
new: boolean,
fields: document,
upsert: boolean
}
有表鎖,行鎖,頁鎖
頁級:引擎 BDB。
表級:引擎 MyISAM , 理解為鎖住整個表,可以同時讀,寫不行
行級:引擎 INNODB , 單獨的一行記錄加鎖
1) 表級鎖:開銷小,加鎖快;不會出現(xiàn)死鎖;鎖定粒度大,發(fā)生鎖沖突的概率最高,并發(fā)度最低。
2) 行級鎖:開銷大,加鎖慢;會出現(xiàn)死鎖;鎖定粒度最小,發(fā)生鎖沖突的概率最低,并發(fā)度也最高。
3) 頁面鎖:開銷和加鎖時間界于表鎖和行鎖之間;會出現(xiàn)死鎖;鎖定粒度界于表鎖和行鎖之間,并發(fā)度一般。
一般不在PHP中使用鎖操作,因為如果鎖了庫,如果遇到錯誤沒有及時的解鎖,就會導致不能訪問數(shù)據(jù)的情況。
可以使用MYSQL的事務,就是定義事務開始,然后有幾個語句要執(zhí)行,然后根據(jù)情況,如果有一個語句沒有執(zhí)行成功,可以回滾(取消這幾個語句的執(zhí)行),從而達到幾個語句都執(zhí)行成功或者都不執(zhí)行的效果,在強事務型的應用中一般使用這個方式
你可以去后盾人平臺看看,里面的東西不錯