Tokyo Cabinet Hash数据库存储和索引结构
2015-07-31 22:50
369 查看
先看图:
-----------------------------------------------------------------------------------------------------
head: 数据库头文件.
-----------------------------------------------------------------------------------------------------
bucket Array: hash索引数组,存放对key进行hash之后得到的hash值所对应的第一个
元素在数据库文件中的偏移量. 比如当第一个数据来的时候请求存储,这时计算
到该key的hash index值是1,在bucket array数组中找到1对应的位置,发现是NULL,
就将这个值存在目前数据存储区的第一个可用位置。并将这个位置记录到bucket array里.
-----------------------------------------------------------------------------------------------------
freepool array: 数据文件中空闲的区域,在新插入数据时先在里面查找是否有合适的位置,当删除一个
record时,会把该record的偏移和大小记录到里面.
-----------------------------------------------------------------------------------------------------
record: 存放record的数据区.
-----------------------------------------------------------------------------------------------------
MSIZ: 最小mmap大小,即: head+bucket array的大小, hash数组的索引区必须使用mmap
映射到内存
-----------------------------------------------------------------------------------------------------
XMSIZ: 内存比较充足的情况下, 除了mmap索引区域外还可以mmap一部分rcord区域的内容,
加快读写速度
-----------------------------------------------------------------------------------------------------
hash数据库的原理是通过key值用一个hash算法算出一个bidx值,然后在这个表(bucket array)里查这个bidx
对应的key-value值在文件中的偏移,再在文件中查找record记录.
当然hash算法是会冲突的,当不同的key值算到了同样的hash,那我们仅用上面的一个bucket array是不能
区分的, Tokyo Cabinet采用一个二叉树来管理冲突的key, hash相等的所有记录都是互相用数据单元的left,
right指针(其实就是一个offset值)连接起来的 如下图 :
转载请注明出处~~ 谢谢~~~
-----------------------------------------------------------------------------------------------------
head: 数据库头文件.
-----------------------------------------------------------------------------------------------------
bucket Array: hash索引数组,存放对key进行hash之后得到的hash值所对应的第一个
元素在数据库文件中的偏移量. 比如当第一个数据来的时候请求存储,这时计算
到该key的hash index值是1,在bucket array数组中找到1对应的位置,发现是NULL,
就将这个值存在目前数据存储区的第一个可用位置。并将这个位置记录到bucket array里.
-----------------------------------------------------------------------------------------------------
freepool array: 数据文件中空闲的区域,在新插入数据时先在里面查找是否有合适的位置,当删除一个
record时,会把该record的偏移和大小记录到里面.
-----------------------------------------------------------------------------------------------------
record: 存放record的数据区.
-----------------------------------------------------------------------------------------------------
MSIZ: 最小mmap大小,即: head+bucket array的大小, hash数组的索引区必须使用mmap
映射到内存
-----------------------------------------------------------------------------------------------------
XMSIZ: 内存比较充足的情况下, 除了mmap索引区域外还可以mmap一部分rcord区域的内容,
加快读写速度
-----------------------------------------------------------------------------------------------------
hash数据库的原理是通过key值用一个hash算法算出一个bidx值,然后在这个表(bucket array)里查这个bidx
对应的key-value值在文件中的偏移,再在文件中查找record记录.
当然hash算法是会冲突的,当不同的key值算到了同样的hash,那我们仅用上面的一个bucket array是不能
区分的, Tokyo Cabinet采用一个二叉树来管理冲突的key, hash相等的所有记录都是互相用数据单元的left,
right指针(其实就是一个offset值)连接起来的 如下图 :
转载请注明出处~~ 谢谢~~~
相关文章推荐
- SQLSERVER 检查字段值域并输出行数和值列表
- Redis数据类型之字典
- Oracle 学习之RMAN(十六)Catalog
- SQL到NoSql
- 数据库系统0T1(0):基础概念
- Mysql的SQL_MODE
- MySQL点滴学习之日志管理
- MySQL点滴学习之索引类型
- 【iOS】FMDB/SQLCipher数据库加解密,迁移
- Mysql 存储过程中应用事务
- 自,数据库
- Mysql Client
- mysql ERROR 1049 (42000): Unknown database '******' ”错误处理办法
- mongodb与mysql命令对比
- ehcache memcache redis
- sql——存储过程&触发器(2/3)
- MySQL数据库的基础操作(建表,建库,插入,删除)
- SQLServer全文索引
- 第三篇 SQL Server安全主体和安全对象
- Hive与传统数据库对比