隨著用戶的日益遞增,日活和高峰的暴漲,資料庫處理效能面臨巨大的挑戰。以下分享下對實際10萬+峰值的平台的資料庫最佳化方案。與大家討論,互相學習進步!
案例:遊戲平台.
1、解決高並發
當客戶端連接數達到峰值的時候,服務端對連接的維護與處理這裡暫時不做討論。當多個寫入請求到資料庫的時候,這時候需要對多張表進行插入,尤其一些表達到每天千萬+的存儲,隨著時間的積累,傳統的同步寫入數據的方式顯然不可取,經過試驗,透過非同步插入的方式改善了許多,但同時,對讀取資料的即時性也需要做一定的犧牲。
非同步的方式有很多,目前採取的方式是透過作業每隔一段時間(5min、10min..看需求設定)將臨時表的資料轉到真實表。
1. 已有原始表A 也是在讀取的時候真正用到的表。
2. 建立與原始表A同結構的B和C,用來作資料的中轉處理,同步流程是C->B->A。
3. 建立同步資料的作業Job1和記錄Job1運行狀態的表,在同步的時候比較關鍵的是需要檢查Job1的當前狀態,如果當前正在將B的資料同步到A,則把服務端過來的資料存到C,然後再把資料匯入到B,等到下一次Job執行的時候再將這批資料轉到A。如圖1:
同時,為保萬無一失和便於排查問題,應該用一個記錄整個資料庫實例的存儲過程,在較短的時間檢查作業執行結果,如果遇到異常失敗的,應該及時通過其他方式通知到相關人員。如寫入到發郵件和簡訊表,讓一個Tcp的通知程式定時讀取發送等等。
註:如果一天的資料達到幾十個G,如果又對這個表有查詢要求(分區下面會提到),下策之一:
可將B同時同步到多台伺服器分擔下查詢壓力,減少資源的競爭。因為整個資料庫的資源是有限的,如插入操作,會先獲得一個共享鎖,然後透過聚集索引定位到某一行數據,再升級為意向鎖,而sqlserver對鎖的維護根據數據的大小需要申請不同的內存,造成了資源的競爭。所以應該盡可能的將讀和寫分開,可根據業務模型分,可根據設定的規則分;在平台性的項目中應該優先保證數據能有效的插入。
在不可避免的查詢大數據肯定會耗用大量的資源,如遇到批量刪除的時候,可以換成以循環分批次(如一次2000條)的方式,這樣不至於這個進程導致整個庫掛掉,衍生出一些無法預期的bug。經過實踐,有效可行,只是犧牲了儲存空間。也可根據查詢需求將表裡資料量大的欄位分割出來到新表,當然這些也要根據每個業務場景結合需求來設定,設計出適合而並不需要華麗的方案即可。
2、解決儲存問題
如果每天單表的資料都達到了幾十個G,改善儲存方案自然迫不及待了。現分享下自有的方案,在暴漲的數據摧殘之下,仍堅守在一線!現舉例對自有環境分享拙見:
現有資料表A,單表每天新增資料30G,在儲存的時候採用非同步將資料同步的方式,有的不能清除資料的表,在分區後還可分文件組,將文件組分配到不同的磁碟中,減少IO資源的競爭,保障現有資源的正常運作。現結合需求保留歷史資料5天:
1. 這時需要透過作業job根據分區函數去產生分區方案,如根據userid或時間字段來分區;
2. 將表格分區後,查詢可以透過對應的索引,快速定位到某一段分區;
3. 透過作業合併分區將不要的分區資料轉移到相同結構和索引的表,然後清除這個表的資料。
如圖2:
透過sql查詢追蹤到查詢耗時長的,以及透過sql自帶的預存程序sp_lock或視圖dm_tran_locks、dblockinfo查看目前實例存在的鎖的類型和粒度。
定位到具體的查詢語句或預存程序之後,對症下藥!藥到病除!
以上就是本文的全部內容,希望本文的內容對大家的學習或是工作能帶來一定的幫助,同時也希望多多支持PHP中文網!
更多Sqlserver高並發和大數據存儲方案相關文章請關注PHP中文網!

PHP仍然流行的原因是其易用性、靈活性和強大的生態系統。 1)易用性和簡單語法使其成為初學者的首選。 2)與web開發緊密結合,處理HTTP請求和數據庫交互出色。 3)龐大的生態系統提供了豐富的工具和庫。 4)活躍的社區和開源性質使其適應新需求和技術趨勢。

PHP和Python都是高層次的編程語言,廣泛應用於Web開發、數據處理和自動化任務。 1.PHP常用於構建動態網站和內容管理系統,而Python常用於構建Web框架和數據科學。 2.PHP使用echo輸出內容,Python使用print。 3.兩者都支持面向對象編程,但語法和關鍵字不同。 4.PHP支持弱類型轉換,Python則更嚴格。 5.PHP性能優化包括使用OPcache和異步編程,Python則使用cProfile和異步編程。

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

PHP在現代化進程中仍然重要,因為它支持大量網站和應用,並通過框架適應開發需求。 1.PHP7提升了性能並引入了新功能。 2.現代框架如Laravel、Symfony和CodeIgniter簡化開發,提高代碼質量。 3.性能優化和最佳實踐進一步提升應用效率。

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SublimeText3 Linux新版
SublimeText3 Linux最新版

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

禪工作室 13.0.1
強大的PHP整合開發環境

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。