jni-cache

2.数据结构

程序分为两部分,一部分是对数据的初始化,建立hash的结构,第二部分是读取
初始化:

1.初始化的时候需要知道map里key的数量, 所以先要将数据库的数据导出来,计算出需要key的数量
2.有了key的数量,然后key*1.7作为hashmap的总大小,
3.然后对每个数据id进行hash % key*1.7
4.
_ _key _ _|_ _ offset_ _|
_ _key _ _|_ _ offset_ _|
_ _key _ _|_ _ offset_ _|
_ _key _ _|_ _ offset_ _|

数据区,data则可以随便保存,只是每个data同文件开始的偏移保存在offset里
_ _ _data _ |_ _data __ _ _|_ _data _ _ _ _ _|_ _data __ _ _ _ _ _ _|

数据产生流程:
0.id:data结构生成一个文件
1.根据前面生成的文件估计总的key数量,预留head_size = key * 8 * 1.7的字节空间,作为文件头
2.申请一个文件,大小=head_size + 前面的文件大小
3.根据第一个文件读取的数据进行对第二个文件的data写入:如id:data,则在文件的head_size开始进行写入,字符串的结束符为\0,然后根据id进行hash,写入head区域,同时将data区域的的offset作为hash的值写入head区域
第二种方案
1.size=123\0\id\0\0data\0结构生成一个文件
2.根据第一个文件的大小,计算得到head_size的大小,创建新文件。读取文件,根据id生成,id:offset 结构,其中offset为第一个文件所对应id的data开始位置
// mmap第一个文件,同时生成第二个索引文件
void build(char * filename);
// mmap第二个文件

char* get(char* str);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值