利用java序列化实现基于文件的快速索引

       前言:本文介绍一种利用java序列化与反序列化的 基于文件的快速索引.项目中可能会存在这样的需求场景:业务上需要从数万条记录中快速检索出满足条件的某条记录,而这数万条记录是随时变化的,比如抓包工具,时时刻刻接收不同的报文,将这些临时动态数据放入数据库性价比极低,引入Memcached等缓存工具又有杀鸡焉用牛刀的感觉,因此考虑直接将记录存入本地临时文件,采取一定的协议方式加快索引。

本篇文章重点关注以下问题:

  • 规定数据存放协议,加快索引
  • java利用序列化与反序列化实现对象的读写
  • 对象、字节数组、文件之间的转换
  • 整合Demo

1. 数据在文件中的存放协议

       在面向对象的语言中,将数据以对象的形式保存极为常见,而通过序列化把对象直接保存在文件或数据库中,再反序列化得到对象,中间过程无需自己解析也极为方便,但是因为对象序列化后需要保存类信息,存储空间开销较大,如何建立快速索引,避免不必要的开销则至关重要。

       首先规定每条记录的存储格式:索引(4byte) + 记录长度(4byte) + 数据(变长);

  • 索引为记录的唯一标识,如若命中索引,则返回数据部分;如若为命中,继续查找下一记录。(索引大小可自定义)
  • 记录长度为数据部分所占的存储空间,程序可根据此字段跳过此条记录数据部分的读取。(记录长度的大小可自定义)
  • 数据部分存储数据,不同对象可能会占用不同的空间。
     算法: 2. java利用序列化与反序列化实现对象的读写

猜你喜欢

转载自super-wangj.iteye.com/blog/2382811