文件数据缓存(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配置写的,若是没有把握不要乱改

相关文章
相关标签/搜索