基于mmap的KV数据存储实现(一)概述

本文介绍了基于mmap的键值对存储系统的设计,包括存储结构、设计要点和并发问题。系统由index、block、table、config和log组成,利用mmap实现高效磁盘操作。并发处理采用读写锁或双buffer切换策略,确保数据一致性。
摘要由CSDN通过智能技术生成

前言

工作中遇到一些对kv存储的需求,比如推荐系统中需要存储一个商品id对应的相似商品id的 list,或者是一个用户的浏览过的商品id的list,这就需要一个键值对去存储。本文描述的存储基于这个需求简单的实现了一个版本,实际工作中要复杂的多,为了让读者便于理解,就基于这个分析一个主键为string的key,value是id的list的存储实现。本存储用java实现,底层采用mmap的方式,可以实现落盘,并且性能优秀。

存储系统结构

  • index
    数据的索引,每个key都会在index中记录它对应的value存储的位置。
  • block
    value实际存储的位置。
  • table
    一个完整的数据表,包含了block,index以及config。
  • config
    一些配置信息,记录比如当前使用的是哪一个索引。
  • log
    记录每条数据的日志信息

整个系统由以上几个主要模块构成,每写一条数据如下图所示。
这里写图片描述
如上图所示,如果有一个写入数据(key,value)的请求,首先会把这一条记录追加写在日志文件里,然后在通过配置信息选取一个索引(index)文件里,从索引文件里找到这个数据的key的记录,如果没有记录,新建一条记录,这个记录就是这个

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值