首页 > 其他分享 >Hash index 实验中的Split Imgage Index

Hash index 实验中的Split Imgage Index

时间:2022-08-22 10:15:09浏览次数:135  
标签:index Hash Index bucket 深度 directory 全局 另一半

在extendible hash index中,当插入导致bucket分裂或者移除导致bucket合并时,我们都要找到待分离或合并的bucket的另一半。

分裂bucket时找另一半

分裂bucket分两种情况,

全局深度等于bucket的局部深度

这种情况下需要将将全局深度加一,并将新添入的directory entry指向正确的bucket,举个例子:
现在的全局深度为1,两个bucket的局部深度也为1,kv将要插入第一个桶,但是这个桶已经是满的,为此必须将directory entry翻倍

对于给定bucket的directory index x,另一半bucket的directory index = x ^ (1 << global depth) = x ^ (1 << local depth),其中global depth是插入前的全局深度,且等于bucket的局部深度。

全局深度大于bucket的局部深度

这种情况只需要增加局部深度,分配新桶,将原本指向同一个bucket的两个directory中的一个指向新桶,举个例子:
现在的全局深度为2,00和10指向的桶局部深度为1,待插入的key的hash值为00,为10分配一个新桶

对于给定bucket的directory index x,另一半bucket的directory index = x ^ (1 << local depth),其中local depth是插入前bucket的局部深度。

合并时找另一半

lab的网页上写了合并的时机:bucket为空并且另一半和它的深度相同时。要删除的kv的directory要指向另一半的bucket,并且要判断此时是否可以将全局深度减1。举个例子:
现在的全局深度为2,kv从绿色指向的桶中删除后,需要将绿色的directory指向红色的bucket。

对于给定bucket的directory index x,另一半bucket的directory index = x ^ ((1 << (local depth - 1)),其中local depth为插入前bucket的局部深度,并且大于0。

小结

从上面式子可以看出,分离和合并时找另一半的方法是不同的,实现时GetSplitImageIndex要处理这不同的情形。

标签:index,Hash,Index,bucket,深度,directory,全局,另一半
From: https://www.cnblogs.com/huasyuan/p/16611858.html

相关文章

  • redis数据结构介绍和redis命令操作_string&hash
    redis的数据结构redis存储的是:key,value格式的数据,其中key都是字符串,value有物种不同的数据结构value的数据结构:字符串类型string哈希类型hash:map格式列表类型......
  • HashMap 详解
    JAVA基础1、自增(++)自减(--)运算符是一种特殊的算术运算符,在算术运算符中需要两个操作数来进行运算,而自增自减运算符是一个操作数。2、前缀自增自减法(++a,--a): 先进行自......
  • 对于HashMap的容量的一些分析
    在Java开发中,我们经常会像如下方式以下创建一个HashMap:Map<String,String>map=newHashMap<String,String>();但是上面的代码中,我们并没有给HashMap指定容量,那么,这......
  • redis数据结构介绍以及命令操作string和hash类型
    redis的数据结构redis存储的是:key,value格式的数据,其中key都是字符串,value有5中不同的数据结构value的数据结构:(1)字符串类型string......
  • redis数据结构介绍和redis命令操作string&hash
    redis数据结构介绍redis的数据结构:redis存储的是:key,value格式的数据,其中key都是字符串,value有5种不同的数据结构value的数据结构:1、字符串......
  • 从HashMap的执行流程开始 揭开HashMap底层实现
    ☺心得:如何学习源码:从某个执行过程入手,建议先从整体入手,了解底层的数据结构是怎么一步一步优化的。最后,在了解完底层的数据结构优化过程后,从重要的核心方法入手,从它的......
  • redis-hash命令
    一、HDELkeyfield[field...]从key指定的哈希集中移除指定的域。在哈希集中不存在的域将被忽略。如果key指定的哈希集不存在,它将被认为是一个空的哈希集,该命令将......
  • vue项目打包成dist文件以后,index.html加载空白?
    打包成dist文件以后,index.html加载空白没有修改config配置文件,直接打包,系统默认的是’/’(根目录),而不是’./’(当前目录),从而导致路径不对,页面加载不出来。针对vue-cli3.......
  • HASH 散列的一些概念
    1.散列函数(hashfunction)即关键字到表中单元的映射,key->tablePlace,理想情况下,应是一一映射。2.冲突(collision)即不同的关键字散列到同一单元的情况。因为关键字基本上是......
  • 小tips:怎样实现简单的前端hash与history路由方式?
    前端路由实现方式,主要有两种,分别是history和hash模式。hash模式不同路由对应的hash是不一样的,如何能够监听到URL中关于hash部分发生的变化?浏览器已经暴露给我们一个现成......