`
liuhello
  • 浏览: 69239 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

TC hdb代码分析

阅读更多

    在TC中一个最小的unit的大小是48字节 其中record的头信息是40字节 但是在TC中默认是16字节对齐的 所以就是48字节 在tchdbreadrec读取的时候也是读取最小的大小 也就是48个字节 刚好可以把头信息读取进来

    在TC中可以通过设置hdb->zmode和hdb->opts参数来启用压缩功能 压缩只是针对value的

 

tchdbnew

    创建一个新的TC hdb数据库对象 并且设置一些初始话的参数(其中设置参数是在tchdbclear中进行的)

    hdb->type = TCDBTHASH;

    hdb->bnum = HDBDEFBNUM; 设置bucket number为默认的大小131071

    hdb->apow = HDBDEFAPOW; 默认align power大小是4 也就是16位对齐

    hdb->fpow = HDBDEFFPOW; 默认free block pool power 是10也就是2^10就是1024个

    hdb->xmsiz = HDBDEFXMSIZ; 默认大小是64m

    hdb->recc = NULL;

    hdb->rcnum = 0;  默认record cache是关闭的

 

tchdbopen

    在打开的时候 会对hdb数据库对象的一些参数 做进一步的初始化

    它首先会判断数据库文件的大小 如果文件小于1那么说明是新创建的一个数据库 这个时候会格式化数据库文件 比如写些tc版本等信息到数据库文件 写入hdb的头信息 free block pool和bucket array置零等等

    然后读取数据库的信息并且设置hdb数据库结构 map hdb->xmsiz到hdb->map 由于hdb->xmsiz默认大小是64M这样可以保证map到内存的文件内容是包括所有的头信息的 这样sync的时候只要把头部信息写道hdb->map中然后sync hdb->map就可以拉

 

tchdbsync

    调用这个函数的时候 会把tc内存的信息同步到数据库文件中去 它首先判断是否有异步写的内容没有持久化到数据库文件中去 如果有那么就flush到文件中去  然后sync hdb数据库的头部信息到文件中去 这个sync的过程是调用tchdbmemsync 其中phys参数是true也就是 会做一次物理同步 它先是把hdb的metadata dump到一块内存中去tchdbdumpmeta(hdb, hbuf); 然后把这块内存copy到hdb->map中去 如果phys设置成true那么 就会msync(hdb->map, xmsiz, MS_SYNC)其中xmsiz是hdb->map的大小 在默认设置中是64M 然后在调用fsync(hdb->fd)做一次同步操作

 

tchdbput

    调用这个函数的时候 首先是把内存中的record flush到文件中去 然后寻找key对应的值是否存在 这个寻找是在文件里面搜索的 但是在文件里面针对每个record是做了hash 然后对于冲突是用btree来解决的 虽然文件寻找速度很慢 但是通过这样的优化还是可以接受的 如果存在 那么就把原来的值给覆盖 否这直接写到文件中去

 

tcputasync

    现判断写缓存是否存在 如果不存在创建一个HDBDRPUNIT + HDBDRPLAT大小的写缓存 并且创建一个HDBDRPUNIT大小的hdb->drpdef存放deferred record

    先是去文件中搜索key对应的条目是否存在 如果存在把数据写到hdb->drpdef中 在文件中分配空间给数据并且标记这个条目的存在 把数据添加到hdb->fbpool中去

 

tchdbget

    读取数据之前 会把些缓存的中的数据(hdb->drpool和hdb->drpdef)刷新到文件中去 然后再读

    先会判断record cache 也就是hdb->recc是否为空 如果不是空 就去缓存里面读数据 如果读到数据并且开头是*说明数据不存在 返回空 否这返回读到的数据 如果数据不存在就回去文件里面查找数据

    在文件里面查找数据就是作hash和btree搜索 如果找到数据后那么就读取数据,需要解压缩 就解压缩 如果缓存开启 那么就先把数据写到读缓存然后返回数据 如果没有找到数据 那么就更新读缓存(如果开启)用*代表数据 表示数据不存在 并且返回空

 

tchdbdel

    释放hdb占有的资源

 

tchdbout

    删除操作 删除key对应的一个条目 和读一样 做删除前判断是否有写缓存 如果有那么就先把写缓存刷新到数据库文件中去

    先还是去数据库文件中搜索key对应的条目 如果没有找到 设置error code 并且返回false

    如果找到 执行删除操作 显示释放key对应的条目 并且把它对应的block加入到free block pool 如果free block pool条目过多 就整理下free block pool

    后面就是简单的btree删除 操作

 


0
0
分享到:
评论

相关推荐

    HDB3_HDB3编码译码与绘图_

    而"**HDB3.m**"很可能是MATLAB代码文件,提供了HDB3编码和译码的实现示例,以及可能的波形绘图函数。学习这个代码可以帮助理解HDB3码的处理流程,并可以用于实际的信号处理项目中。 总的来说,HDB3码是电信系统中...

    HDB3 matlab实现

    HDB3编码matlab的实现 上课老师要求编写的,自己编写代码实现

    【信号处理】基于HDB3实现数据编码解码含Matlab源码.zip

    用户可以通过运行这些代码来理解HDB3的工作原理,观察其编码和解码的效果,甚至进行参数调整和性能分析。 从描述“代码可运行”来看,这些Matlab源码是经过验证的,可以直接在Matlab环境中运行,这对于学习者来说...

    HDB3.rar_HDB3解码_hdb3 vb_hdb3码在线转换_消息转换ami

    通过分析和理解这个VB程序,开发者可以深入学习编码理论,并将其应用于实际的通信系统设计中。 总的来说,“HDB3.rar”提供的VB实现是数字信号处理的一个实用工具,它揭示了如何用编程语言处理HDB3和AMI这两种关键...

    华为HDB Interface驱动.zip

    1. 驱动核心模块:与华为设备的固件进行通信,解析和执行设备命令,处理设备返回的数据。 2. 用户接口模块:为操作系统提供标准的系统调用接口,如Windows的DeviceIoControl或Linux的ioctl,使得应用程序可以方便地...

    HDB3编码课程设计原理

    【HDB3编码课程设计原理】深入解析 HDB3编码是一种重要的数字信号编码技术,主要应用于通信领域,特别是A律PCM(脉冲编码调制)系统中。它旨在克服AMI(交替极性码)码的缺点,尤其是解决连续零比特(连“0”码)...

    华为手机ADB及HDB驱动

    华为手机的ADB(Android Debug Bridge)及HDB(Huawei Device Bridge)驱动是开发者和普通用户在进行设备调试、数据传输或系统管理时必不可少的工具。ADB是一个命令行实用工具,它允许用户通过USB或无线连接与...

    HDB3编码解码verilog代码

    通过阅读和理解这些代码,我们可以学习到如何用Verilog来描述和实现HDB3编码解码的过程。这涵盖了数字逻辑设计的基本原理,如状态机、条件分支、并行处理等,同时也涉及到通信系统中的一些实际问题,如信号质量的...

    HDB3码的matlab实现

    在通信领域,编码技术起着至关...通过学习和分析这些代码,我们可以更深入地理解HDB3码的编码逻辑,同时也能掌握在不同编程环境下实现这种编码技术的方法。这对于通信工程的学生和专业人士来说,都是一个宝贵的资源。

    HDB3编码规则的PPT讲解

    1、观察NRZ码、RZ码、BRZ码、BNRZ码、AMI码、CMI码、HDB3码、BPH码的波形。 2、观察全0码或全1码时各码型的波形。 3、观察HDB3码、AMI码、BNRZ码的正、负极性波形。 4、观察NRZ码、RZ码、BRZ码、BNRZ码、AMI码、CMI...

    HDB3编译码仿真

    在压缩包文件"**HDB3编译码仿真**"中,应包含了上述步骤的MATLAB代码,可能还包括了相关的分析结果和图表。通过学习和理解这些代码,可以深入掌握HDB3编码的工作原理,同时熟悉MATLAB在通信系统仿真中的应用技巧。

    基于System_View的HDB3编码器设计_李春晖.pdf——李春晖

    最后,本文还对HDB3编码器的设计结果进行了分析和讨论,包括HDB3编码器的性能指标和其在实际应用中的优点和缺点。本文为读者提供了一个完整的HDB3编码器设计方案,包括HDB3编码器的基本原理、设计方法和设计结果。 ...

    HDB3 编码的VHDL代码

    【HDB3编码详解】 HDB3编码,全称为三阶高密度双极性码(High Density Bipolar with 3-level coding),是数字通信中的一种重要编码方式,特别是在长途数字通信系统中广泛应用。HDB3编码是传号交替反转码(AMI码)...

    hdb3.m_HDB3_

    在实际应用中,理解HDB3编码的工作原理并能编写相应的实现代码是至关重要的,尤其是在进行数字信号处理、通信系统设计或者对信号传输质量有高要求的项目中。通过Matlab这样的工具,我们可以更直观地理解和模拟这种...

    HDB3.rar_HDB3_hdb3 verilog

    7. **实例和代码解析**:可能有具体的Verilog代码示例,详细解释每个部分的功能和工作原理。 8. **仿真与综合**:指导如何使用常见的EDA工具进行仿真和综合,以验证设计的正确性和可实现性。 9. **应用和优势**:...

    hdb3.rar_HDB3_HDB3 matlab_MATLAB HDB3

    在学习和理解这个MATLAB实现时,读者可以分析"hdb3.m"的源代码,了解每个部分的功能,以及如何将理论知识转化为实际操作。此外,可以尝试修改输入数据或编码规则,观察输出的变化,以深入理解HDB3编码的工作原理。这...

    HDB3码C语言实现

    HDB3码的C语言实现,代码很清楚,容易读懂,分模块,调用子程序。很适合初学通信的人。

    HDB3编码的源代码

    代码是HDB3编码,数字基带信号的传输是数字通信系统的重要组成部分。在数字通信中,有些场合可不经过载波调制和解调过程,而对基带信号进行直接传输。 由于HDB3码因其无直流成份、低频成份少和连0个数最多不超过三个...

    通信原理实验报告模板-HDB3

    一、实验目的 1、了解二进制单极性码变换为AMI/HDB3码的编码规则。 2、熟悉AMI/HDB3码的基本特性。 3、熟悉HDB3码的编译码器工作原理和实现方法

    通信编码HDB3码

    通过对给定代码片段的逐行解析,我们深入了解了HDB3编码在实际应用中的具体实现细节。HDB3编码作为通信领域中重要的编码技术之一,在提高数据传输质量和稳定性方面发挥着重要作用。对于从事通信工程或者数字信号处理...

Global site tag (gtag.js) - Google Analytics