文件數據緩存(key-Value)

爲了解決大量數據緩存,消耗內存過多的問題,特別實現了文件緩存;該緩存主要是應用於多存少讀的狀況,通常咱們作緩存是實現將數據放在內存中或者數據庫中;放在內存中就會消耗很大內存,尤爲在高併發大數據緩存時,更容易形成內存溢出,數據庫在很大程度可以知足咱們需求,可是在極端狀況,每秒產生很大數據時,數據庫速度就是問題;git

  基於內存和數據庫緣由,測試將數據直接放在文件中,是很快的,通常的機械硬盤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配置寫的,若是沒有把握不要亂改

相關文章
相關標籤/搜索