最近的工作需要頻繁的讀寫資料庫,即使我們用了 redis做快取,這樣的話,我們減少了對資料庫的讀,但沒有減少對資料庫的寫。我想要減少對資料庫的寫操作,這樣可以減少對資料庫的壓力。所以決定實現乙個dbcache.主要作用:
快取部分資料
根據需求,我們可以按照lru演算法,來在dbcache快取活躍使用者資料,這樣有兩個作用:
第一,當使用者來讀資料的話,我們可以直接,從dbcache的記憶體快取區讀給他,如果這個使用者只要沒有在記憶體時,那我們去db中讀取使用者資料,同時快取後,把這個資料傳給請求者。
第二,當使用者來update 資料的時間,我們只改變快取中的資料,此時使用者的請求操作結束,以最快的速度返回給應用程式,不用等待dbcache的處理結果,這樣可以增加應用層 server吞吐量。然後,我在dbcache中按照某一種粗略來update db。這裡我注釋一下 ,不會當使用者的請求到了,我們就去更新db,如果這樣的話,我們是沒有減少對db的寫的次數,當然我們會按照某種策略,來最大限度的減少對db的寫操作。例外情況是:當使用者的更新頻率比我們dbcache的頻率還低的話,這個時間,dbcache可能就不能減少對db的寫的次數了 ,但這個種請求,db基本上沒有壓力。當然非要減少對db的寫的次數的話,我們也是可以做到的,換一種事件驅動的模式來做dbcache的寫策略。
總之,要做併發高效的server,非同步、非阻塞的處理是必不可少,個人認為。
高效檔案流讀寫
filechannel,是記憶體與磁碟檔案的通道。優勢 io讀寫效能提高 os負責 也可引做共享記憶體,減少io操作,提公升併發性 應用crash,保證這部分內容還能寫的進去檔案。在我們呼叫channel.write bytebuffer 之後,具體何時寫入磁碟 bytebuffer中內容暫存於 o...
kafka高效讀寫的原因
1.順序寫磁碟 kafka的producer在生產資料的時候會將資料順序追加到log檔案的末端,這樣減少了大量的磁頭定址時間,比隨機寫要快很多 2.零拷貝技術 kafka中的消費者在讀取服務端的資料時,需要將伺服器端的磁碟檔案通過網路傳送到kafka程序,網路傳送需要經過幾種網路節點。如圖所示 傳統...
DB2中的高效查詢
1 確保在連線謂詞中使用等號 2 同時應盡可能使用not exists來代替not in,儘管二者都使用了not 不能使用索引而降低速度 not exists要比not in查詢效率更高。索引而降低速度 not exists要比not in查詢效率更高。3 同時應盡可能使用exists來代替in,儘...