高併發系統中,資料庫相關知識

2021-07-03 18:08:46 字數 786 閱讀 2919

樂觀鎖

假設不會發生併發衝突,只在提交操作時檢查是否違反資料完整性。

樂觀鎖使用乙個自增的字段表示資料的版本號(或者timestamp),更新的時候檢查版本號是否一致,比如資料庫中版本號為4,更新時版本號使用版本號version=5,與資料庫中的版本號version+1=(5)做比較,如果相等,則可以更新,如果不相等,其他程式已更新該記錄,返回錯誤。悲觀鎖

假定會發生併發衝突,遮蔽一切可能違反資料完整行的操作。

一般需要使用資料庫的鎖機制,比如mysqlinnodb引擎的行級鎖。

在實際生產環境中,如果併發量不大且不允許髒讀(原始資料為5,ab兩個事務,b其他事務更新資料為2,事務未提交時,a讀取到的仍然為5),可以使用悲觀鎖。併發訪問量大時,使用悲觀鎖有非常大的效能問題,可以選擇樂觀鎖。

memcached的cas機制

cas,又稱compare-and-swap,代表一種原子操作。

memcached

的cas機制解決的問題及其原理:

1. 實現了check-and-set原子操作功能;

2. 其使用方式為:首先使用gets指令乙個key-value及key對應value的版本號;其次操作產生新的value值;最後使用cas指令重新提交key-value,並附帶剛剛獲得到的版本號;

3. 當服務端判斷cas操作中的版本號不是最新的時,則認為改key的值已經被修改,本次cas操作失敗。程式設計人員通過cas機制可實現自增和自減的原子操作;

可以看到memcache的cas機制和資料庫的樂觀鎖實現原理非常類似。

從這裡搬運來的哦。。。。

資料庫高併發

案例一 訂票系統案例某航班只有一張機票,假定有1w個人開啟你的 來訂票,問你如何解決併發問題 可擴充套件到任何高併發 要考慮的併發讀寫問題 問題 1w個人來訪問,票沒出去前要保證大家都能看到有票,不可能乙個人在看到票的時候別人就不能看了。到底誰能搶到,那得看這個人的 運氣 網路快慢等 其次考慮的問題...

資料庫相關知識

1儲存過程和函式的區別 儲存過程是使用者定義的一系列sql語句的集合,涉及特定表或其它物件的任務,使用者可以呼叫儲存過程,而函式通常是資料庫已定義的方法,它接收引數並返回某種型別的值並且不涉及特定使用者表。1.事務是什麼?事務是作為乙個邏輯單元執行的一系列操作,乙個邏輯工作單元必須有四個屬性,稱為 ...

資料庫相關知識

innodb和myisam資料庫引擎的區別 對比項innodb myisam事務 外來鍵 索引聚集索引,使用b tree作為索引結構,資料檔案是和 主鍵 索引綁在一起,5.7以前的innodb不支援全文索引支援全文索引,在涉及全文索引領域的查詢效率上myisam速度更快高 主鍵必須有主鍵 使用者沒有...