zoukankan      html  css  js  c++  java
  • 文件数据缓存(key-Value)

    为了解决大量数据缓存,消耗内存过多的问题,特别实现了文件缓存;该缓存主要是应用于多存少读的情况,一般我们做缓存是实现将数据放在内存中或者数据库中;放在内存中就会消耗很大内存,尤其在高并发大数据缓存时,更容易造成内存溢出,数据库在很大程度能够满足我们需求,但是在极端情况,每秒产生很大数据时,数据库速度就是问题;

      基于内存和数据库原因,测试将数据直接放在文件中,是很快的,一般的机械硬盘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配置写的,如果没有把握不要乱改;

    文件缓存适应在大量存储少量读取的环境下,如果需要精确则还需修改代码,同步数据操作。

  • 相关阅读:
    工作流学习——Activiti流程变量五步曲
    Rational Performance Tester(RPTv8.6) 在launch Schedule 时一直卡在 29%
    19、Cocos2dx 3.0游戏开发找小三之Action:流动的水没有形状,漂流的风找不到踪迹、、、
    【设计模式】责任链模式
    redis源代码分析(5)——aof
    Servlet基础梳理(四)
    SQL-W3School-高级:SQL 数据类型
    SQL-W3School-高级:SQL NULL 函数
    SQL-W3School-高级:SQL NULL 值
    SQL-W3School-高级:SQL Date 函数
  • 原文地址:https://www.cnblogs.com/jinyu20180311/p/10312391.html
Copyright © 2011-2022 走看看