1. 程式人生 > >文件數據緩存(key-Value)

文件數據緩存(key-Value)

最新 再次 直接 開始 大數據 現場 過程 long 字節

為了解決大量數據緩存,消耗內存過多的問題,特別實現了文件緩存;該緩存主要是應用於多存少讀的情況,一般我們做緩存是實現將數據放在內存中或者數據庫中;放在內存中就會消耗很大內存,尤其在高並發大數據緩存時,更容易造成內存溢出,數據庫在很大程度能夠滿足我們需求,但是在極端情況,每秒產生很大數據時,數據庫速度就是問題;

基於內存和數據庫原因,測試將數據直接放在文件中,是很快的,一般的機械硬盤30-45M/s,一次寫入速度很快;

整個緩存過程:提高接口,數據緩存50M左右,將數據寫入特定的DB文件中,每次10M寫入,這樣做只是為了平衡硬盤寫入,防止影響其它寫入;

緩存將數據byte字節(value值寫入DB文件),同時形成數據索引將位置放在在索引文件中(csv文件),保存key對應的數據文件名稱,對應文件中的位置;每20000個key形成一個文件,再次把該索引文件名稱及生產時間寫入一個全局索引文件中;

在緩存中需要設置key的緩存個數和緩存時間,默認大小是long的最大值,時間是30分鐘(因為我的需要設置);後臺現場會在一定環境下啟動線程,刪除索引文件和DB文件,主要是按照時間,key個數,文件大小來決定啟動;

重新讀取值時,先檢索全局索引,從後往前讀取,或者最新生成的數據索引文件,索引文件都分割的很小,所以一次讀入到內存,查找key,找到對應的數據位置,在讀取具體的值;

整個控制並不是100%精確,這是我的需要,如果做精確控制,則要添加很多同步控制,這樣會降低性能和速度,但是也不會影響一般需求使用,肯定比其它方式快;

測試工作已經完成了,是我沒有想到是,剛剛開始做的時候覺得應該簡單,但是在完成時還是花了很多時間;

一開始的緩存,也是使用了數據庫,或者存儲用文件索引用文件,最後改成了全部用文件。程序就在在於摸索吧。

程序同步到git和csdn,歡迎大家一起寫“廢代碼”;

數據大小都是按照硬盤30M/s,一般cpu配置寫的,如果沒有把握不要亂改

文件數據緩存(key-Value)