官术网_书友最值得收藏!

讀寫鎖

從電子表格中讀取數據不會有什么麻煩,即使很多人同時讀取也不會有問題。因為讀取操作不會修改數據,所以不太可能出錯。如果有人試圖刪除A25單元格中的內容,而其他人正在讀取電子表格,會發生什么情況?這要視情況而定,讀取者可能遇到報錯退出,也可能得到不一致的數據視圖。為安全起見,即使是從電子表格中讀取數據也需要特別小心。

如果把上述電子表格看作數據庫中的表,很容易發現也會有同樣的問題。從很多方面來說,電子表格就是一張簡單的數據庫表。修改數據庫表中的記錄,和刪除或者修改電子表格文件中的單元格內容十分類似。

并發控制這一經典問題的解決方案相當簡單。處理并發讀/寫訪問的系統通常實現一個由兩種鎖類型組成的鎖系統。這兩種鎖通常被稱為共享鎖(shared lock)和排他鎖(exclusive lock),也叫讀鎖(read lock)和寫鎖(write lock)。

先不考慮具體的鎖定機制,鎖的概念可以如下描述:資源上的讀鎖是共享的,或者說是相互不阻塞的。多個客戶端可以同時讀取同一個資源而互不干擾。寫鎖則是排他的,也就是說,一個寫鎖既會阻塞讀鎖也會阻塞其他的寫鎖,這是出于安全策略的考慮,只有這樣才能確保在特定的時間點只有一個客戶端能執行寫入,并防止其他客戶端讀取正在寫入的資源。

在實際的數據庫系統中,每時每刻都在發生鎖定:當某個客戶端在修改某一部分數據時,MySQL會通過鎖定防止其他客戶端讀取同一數據。如果數據庫服務器以可接受的方式執行,鎖的管理速度足夠快,那么不會引起客戶端的感知。我們將在第8章中討論如何調整查詢以避免鎖引起的性能問題。

主站蜘蛛池模板: 濉溪县| 勐海县| 贵溪市| 互助| 白玉县| 南乐县| 修水县| 疏附县| 彭阳县| 开远市| 深水埗区| 丹江口市| 阿拉善左旗| 芮城县| 安新县| 铜山县| 大悟县| 长岭县| 邢台市| 北辰区| 临泽县| 义马市| 梧州市| 盐源县| 常宁市| 鄂州市| 汪清县| 防城港市| 张家界市| 军事| 宜兰市| 合水县| 英山县| 黄山市| 东乌珠穆沁旗| 克拉玛依市| 扎赉特旗| 博乐市| 南郑县| 通化市| 巴马|