高併發的下單 搶票等問題解決方法的原理分析

2022-09-23 16:48:06 字數 1148 閱讀 6167

個人記錄:2023年,工作的第6到7個年頭。

重點研究自己不太擅長的技術:分布式、高併發、大資料量、資料庫優化、高效能、負載均衡等。

個人看法:

不是很贊同。

只看「最優解」、「最佳實踐」,並不是「最佳實踐」。看看不太妥的方法,也能促進思考。

前幾篇文章中,已經有人有類似看法了,難道這批人年齡較大,一直在用mysql的myisam儲存引擎?

之前的文章,已經有「分布式鎖」標準解決方案了,不再贅述。

今後,不會再**類似文章了。

尤其是這篇,標題高大上,在我看來「文不對題」。

準確標題應該是:使用檔案鎖,解決單機併發問題。

高併發的下單、搶票等問題解決方法的原理分析

①為什麼不能用資料庫自帶的表鎖功能?

由於下單、搶票等是要寫入資料庫的,對資料庫進行修改,所以採用的寫鎖,這樣,被鎖定的資料表就無法被其他地方使用,無論修改還是查詢。比如一位使用者購買商品時,鎖定了商品表,另一位使用者在瀏覽商品,則不能再去訪問這張資料表了,不能訪問表,意味著這一段時間載入不出商品,而高併發情況下,有很多的人下單。瀏覽商品,這段很短的鎖表時間被放大化,會拖延整個**的訪問速度。

②如何解決這一問題?

1、首先明確我們需要的只是:在乙個使用者對一張表進行修改、刪除等操作時,不讓其他使用者去對這張表進行修改、刪除等操作。

2、我們可以建立乙個檔案,在使用下單功能等關於資料庫修改、刪除的操作前,開啟這個檔案,然後對這個檔案進行鎖定,在進行完對資料庫的操作之後,關閉這個檔案,再對這個檔案解鎖。

3、這樣就能解決高併發問題的原因是我們相當於把對資料庫操作的**放在鎖檔案和解鎖檔案之間了。這樣相當於乙個標誌位。當使用者a試圖修改資料時,鎖定了這個檔案。而另乙個使用者b也試圖修改資料庫、但是要執行資料庫操作前,先得開啟這個檔案,而檔案鎖定了,這樣使用者b打不這個檔案,只能阻塞在開啟檔案的**處,這樣就不能繼續執行開啟檔案後的**,只能等待開啟這個檔案。而使用者a對資料庫操作完後,解鎖了這個檔案。此時,使用者b可以開啟這個檔案了,則可以繼續對資料庫進行修改、刪除,同時把這個檔案鎖死,其他需要對資料庫進行操作的使用者將一直阻塞在開啟檔案,只能等待檔案解鎖,才能對這個資料庫進行修改、刪除了

4、只是在對資料庫進行修改、刪除時鎖定本地的檔案,而不是鎖定資料表,這樣使用者仍然可以對資料庫進行查詢,新增等不影響使用者瀏覽網頁的訪問,商戶也可以新增新商品,不會拖延**瀏覽等訪問速度。

大資料高併發問題解決方法

大資料高併發的瓶頸一般都是資料庫層面的,機械硬碟承載不起非常快速的讀寫操作,cpu承載不起大量的邏輯運算,所以最基本的解決思路就是 1.換固態硬碟加快硬碟的讀寫效率。2.建立快取中介軟體降低對硬碟的讀寫次數,快取不用多說了,最最最基本和重要的優化策略。3.將硬碟的讀寫或者資料的計算分攤到多台機器上,...

Mysql CPU占用高的問題解決方法小結

通過以前對mysql的操作經驗,先將mysql的配置問題排除了,檢視msyql是否執行正常,通過檢視mysql data目錄裡面的 err檔案 將副檔名改為.txt 記事本檢視即可。如果過大不建議用記事本了,容易死掉,可以用editplus等工具 簡單的分為下面幾個步驟來解決這個問題 1 mysql...

WPF Image問題解決方法

一.image是控制項,source屬性型別是imagesource 二.imagebrush是筆刷,用於填充 1.基本使用,必須指定imagesource源 imagebrush繼承自tilebrush,imagebrush功能比較強大 三.imagedrawing繼承自drawing,用於繪圖 ...