為了解決大量資料快取,消耗記憶體過多的問題,特別實現了檔案快取;該快取主要是應用於多存少讀的情況,一般我們做快取是實現將資料放在記憶體中或者資料庫中;放在記憶體中就會消耗很大記憶體,尤其在高併發大資料快取時,更容易造成記憶體溢位,資料庫在很大程度能夠滿足我們需求,但是在極端情況,每秒產生很大資料時,資料庫速度就是問題;
基於記憶體和資料庫原因,測試將資料直接放在檔案中,是很快的,一般的機械硬碟30-45m/s,一次寫入速度很快;
整個快取過程:提高介面,資料快取50m左右,將資料寫入特定的db檔案中,每次10m寫入,這樣做只是為了平衡硬碟寫入,防止影響其它寫入;
快取將資料byte位元組(value值寫入db檔案),同時形成資料索引將位置放在在索引檔案中(csv檔案),儲存key對應的資料檔案名稱,對應檔案中的位置;每20000個key形成乙個檔案,再次把該索引檔名稱及生產時間寫入乙個全域性索引檔案中;
在快取中需要設定key的快取個數和快取時間,預設大小是long的最大值,時間是30分鐘(因為我的需要設定);後台現場會在一定環境下啟動執行緒,刪除索引檔案和db檔案,主要是按照時間,key個數,檔案大小來決定啟動;
重新讀取值時,先檢索全域性索引,從後往前讀取,或者最新生成的資料索引檔案,索引檔案都分割的很小,所以一次讀入到記憶體,查詢key,找到對應的資料位置,在讀取具體的值;
整個控制並不是100%精確,這是我的需要,如果做精確控制,則要新增很多同步控制,這樣會降低效能和速度,但是也不會影響一般需求使用,肯定比其它方式快;
測試工作已經完成了,是我沒有想到是,剛剛開始做的時候覺得應該簡單,但是在完成時還是花了很多時間;
一開始的快取,也是使用了資料庫,或者儲存用檔案索引用檔案,最後改成了全部用檔案。程式就在在於摸索吧。
資料大小都是按照硬碟30m/s,一般cpu配置寫的,如果沒有把握不要亂改;
檔案快取適應在大量儲存少量讀取的環境下,如果需要精確則還需修改**,同步資料操作。
高效能檔案快取key value儲存 Redis
a.redis是乙個開源,先進的key value 鍵 值對 儲存,並且勇於構建高效能,可擴充套件的web應用程式的完美解決方案 b.redis和memcached的對比 b.1 redis資料庫完全在記憶體中,使用磁碟僅用於永續性 b.2 相比較許多鍵值對儲存,redis擁有更加豐富的資料型別,r...
檔案資料組織
資料庫的基本概念 二 曾士熊 原文 http www.ascc.sinica.edu.tw nl 83 1009 section3 3.html 劉建文整理 http blog.csdn.net keminlau 本文接第10個卷08期68頁 常見的電腦檔案包括 可執行程式檔案,批處理檔案,文字檔案...
python檔案資料操作
coding utf 8 import re import sys import struct import array import numpy as np define 8000 3 if name main sourcefilename r c users sophie desktop all...