一个简单的Key-Value小数据库tmdb的原理和实现

一个简单的Key-Value小数据库tmdb的原理和实现

1 基本特点

ey-Value 数据库是很早起比较典型的老式数据库,从Unix早期的dbm,后来的GNU版本的gdbm,还有ndbm,sdbm, cdb 以及功能强大的Berkeley DB (BDB)、还有这两年风头很劲的qdbm,都是典型代表。实际上来说,Key-Value 数据库不是严格意义上的数据库,只是一个简单快速的数据存储功能。

tmdb 也是差不多这么一个性质Key-Value小数据存储(DBM),设定存储数据目标量级是10W级,性能嘛也不是很好,算是一个小实验型产品。

说说它的基本特点

  • 存储数据量级为10W,超过后性能下降的厉害
  • 因为存储特点决定,更适合存储只读数据,当然,它也是可以删除和修改数据的,只是比较浪费空间
  •  Key长度不能超过64个字节,数据长度不能超过65536个字节,适合存储一些小数据
  • 使用的不是行级锁(Row-Level-Lock),而且是全局锁,所以并发读写情况下,性能不是很好
  • 索引文件和数据文件分离,备份情况下要全部备份
  • 接口API基本是按照传统的dbm的API来设定,整个库文件较小,可直接静态编译进程序

2 存储结构设计

索引使用的是静态索引,Hash表的长度不能动态扩容,缺省是 65535 Hash Bucket,如果冲突的情况使用开拉链法,那么如果冲突厉害,或者数据量大,自然大大增加了查找一条记录的时间,所以小数据量并且Key分布均匀下性能比较好(所有hash都是这样好不好 ^_^)。

上面特点说了,索引和数据文件是分离的,主要是为了动态扩容的时候不用做太多数据迁移和位置计算。

数据存储是单个文件,头部预留了256个字

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值