非同步提交資料庫,縮短請求的響應時間。

2021-09-30 05:34:23 字數 1215 閱讀 9488

我想眾多專案的瓶頸應該是資料庫的瓶頸。從資料庫角度講,

sql語句的優化、資料庫配置優化、讀寫分離等此類的技巧估計並不新鮮,我只從架構角度上來給大家分享一些經驗。

在如今眾多高併發的專案中,快取是不可缺少的部分。眾所周知,快取可以有效的緩解資料庫的壓力,所以就有了快取資料庫的概念。據我了解,目前為止市面上高效的快取資料庫軟體都是收費的,例如電信的資料庫就是類似於快取資料庫這種。

如何構建自己的快取資料庫?

這裡有乙個核心的問題就是非同步提交。我們拿目前為止最流行的組合

php+memcache+mysql

來說,通常寫的操作都是

php來接收請求,然後用

php來執行

sql語句,向資料庫寫入資料,完成之後資料庫向

php反饋,

php向客戶端返回結果,當寫入量很大的時候資料庫的

io就會成為整個過程的瓶頸。再此我們引入乙個概念「

update server

」,這個模組的作用就是接受乙個請求,然後向資料庫寫入資料。由此,以上的過程就可以變為,

php接收請求,然後

php非同步通知

update server

,然後php

向客戶端返回結果,此時

update server

接收到請求之後再向資料庫來寫入資料。這樣就會大大減輕

php端處理請求的時間。

到這裡,我們可能又遇到乙個問題,如果

update server

寫入mysql

時間過長,而此時

php又要執行查詢操作,最後就會出現髒讀的問題。這時快取伺服器就可以輕鬆解決這個問題,首先我們把資料先寫入

memcache

,然後再去通知

update server

來提交到資料庫,而

php執行查詢的之後會先去讀

memcache

裡面的資料,如果沒有,再去資料庫查詢,這樣就解決了髒讀的問題。

總結以上幾點,我們得出乙個部署方案,

php直接讀寫

memcache,update server

負責向mysql

寫入資料。關於

update server

上執行什麼指令碼,這個可以隨意,

php或者

c++等都可以,當然

c++要好一些。這個方案雖然增加了伺服器記憶體的成本,但是大大縮短了了請求的響應時間,提生了使用者的體驗。

資料庫PostrageSQL 非同步提交

非同步提交是乙個允許事務能更快完成的選項,代價是在資料庫崩潰時最近的事務會丟失。在很多應用中這是乙個可接受的交換。如前一節所述,事務提交通常是同步的 伺服器等到事務的wal記錄被刷寫到持久儲存之後才向客戶端返回成功指示。因此客戶端可以確保那些報告已被提交的事務確會被儲存,即便隨後馬上發生了一次伺服器...

非同步處理並不能減少單次請求的響應時間

對於單次請求,需要進行的操作是固定的。如果這個請求需要查詢資料庫,或者呼叫另乙個web service,那麼非同步處理並不能縮短總時間 node採用事件驅動的非同步處理,當然縮短的也不是單次請求的響應時長。而是從整個server的角度看,執行緒不需要等待阻塞操作返回,而是可以繼續去響應另乙個請求,因...

非同步的方式連線資料庫

主要內容 python中同步的方式連線資料庫 步驟安裝客戶端 pip install pymysql redis 配置連線資訊 建立連線 執行命令 python中 非同步 的方式連線資料庫 步驟安裝客戶端 pip install pymysql redis aioredis aiomysql 配置連...