dbm之w3c-dbm

 

dbm是key-value store较常见的一种存储实现。http://en.wikipedia.org/wiki/Dbm dbm的各个实现。

 

http://aurora.regenstrief.org/~schadow/dbm-java/上有3个纯java的dbm实现。其中一个是W3C's 

Jigsaw项目中抽离出来,后面出现的w3c-dbm都是指该项目。w3c-dbm实现比较简单,不支持事务。也不保证数据的完整和可靠。

 

w3c-dbm是一个hash表。先说几个概念:

1.block:w3c-dbm 把磁盘划分一系列block进行管理。block的大小在初始化时确定,并写入文件头保存,不能更改。

 

2.dir(目录),每个dir指向一个bucket。bucket是一个元素列表。可能有多个dir指向同一个bucket.dir_size,dir的数目,dir_bits,dir_size = 2^dir_bits。

 

3.bucket_ele,bucket保存的元素,里面有5个属性:hashval,key的hash值;keystart,key开始的4个字节,用于在bucket里快速判断该key是否要查找的key;keysize;datasize;fileptr:bucket_ele里不直接包含key和value,fileptr是文件的偏移量,指向真正的key和value的位置。每个bucket的bucket_ele必须保存在同一个block里,所以bucket_ele数目上限由block大小决定。在block中处理hash冲突时采用开发地址法。

 

4.bucket_bits,记录bucket的分裂次数,初始化为0,分裂后的bucket在分裂前的值加1.

bucket_bits==dir_bits,dir不够用,需要double dir数目。

 

5.hash_value,key的hash值,32bit,其中只用上31bit,最高bit为0.在定位key时,先计算key的hash_value,右移31-dir_bits位,得到的值就是hash_value的高dir_bits+1 bit,其中最高bit是0.dir_size有dir_bits位,用该值做dir的下标来定位dir。

 

下面描述一下w3c-dbm如何管理hash表,重点是bucket分裂和dir double。

1.初始化时,dir_size为n,n=2^dir_bits,n个dir指向同一个bucket。所有的元素实际上都是在同一

bucket里。该bucket的bucket_bits=0.当bucket满时,分裂成2个,[0,n/2)的dir指向分裂后的bucket0,[n/2,n)的dir指向分裂后的bucket1。原先的bucket_ele重新分配一次,在dir的入口不变,但是dir指向的bucket变了。引入一个dir_area的概念,一个dir_area里的dir指向相同的bucket,分裂时变成2个,每个的范围只有之前的一半。一个理想状态的饱满的dir是每个dir_area范围只有1,均指向不同的bucket。

 

2.bucket分裂后bucket_bits 加1.例如dir_size=4的dir,dir_bits=2,第一次分裂成dir_area0:[0.2),dir_area1:[2,4).dir_area0再分裂dir_area0_0:[0,1),dir_area0_1:[1,2).这时的dir_area0_0和dir_area0_1指向的bucket_bits为2,等于dir_bits,表明不能再进行分裂了。如果需要再分裂这两个area,必须要增加dir的数量。

 

3.增加dir数量很简单,直接double,伪代码

new_dir[] = new dir[dir_size*2];

for(int i=0;i<dir_len;i++){

new_dir[i] = dir[i];

new_dir[i+1] = dir[i];

}

dir = new_dir;

dir_bits+=1;

 

double之后,原来的映射仍然生效。

double前old_bucket_idx = dir_bits bit.double后,new_bucket_idx = old_bucket_idx*2+(0/1), dir_bits+1 bit.

 

 

其他一些细节比较简单:

1,对于block里的空闲空间管理。

2,在bucket里元素的插入不是直接放在列表的头或尾,会有一个二次映射。删除时也会对bucket的bucket_ele做整理。这些都是内存操作,不涉及到io。

curl --digest --compressed -u admin:PASSWORD http://169.254.0.1/import/config -X POST --form-string 'configrecord=<?xml version="1.0" standalone="yes"?> <!-- Automatically generated XML --> <!DOCTYPE configrecord [ <!ELEMENT configrecord (configgroup+)> <!ELEMENT configgroup (configitem+)> <!ELEMENT configitem (value+)> <!ELEMENT value (#PCDATA)> <!ATTLIST configrecord version CDATA #IMPLIED> <!ATTLIST configgroup name CDATA #IMPLIED> <!ATTLIST configgroup instance CDATA #IMPLIED> <!ATTLIST configitem name CDATA #IMPLIED> <!ATTLIST configitem instance CDATA #IMPLIED> <!ATTLIST value name CDATA #IMPLIED> ]> <configrecord version = "0.1.0.1"> <configgroup name = "Radio"> <configitem name = "Mode"> <value>Enabled</value> </configitem> <configitem name = "Band"> <value>5 GHz Only</value> </configitem> <configitem name = "Antenna Selection"> <value>Auto</value> </configitem> <configitem name = "Keep Alive"> <value>Enabled</value> </configitem> <configitem name = "Max Volley Delay"> <value>5 seconds</value> </configitem> <configitem name = "TX Power Maximum"> <value>19 dBm</value> </configitem> <configitem name = "Log"> <value>Disabled</value> </configitem> <configitem name = "Event Log"> <value>Disabled</value> </configitem> <configitem name = "Roaming"> <value name = "State">Disabled</value> <value name = "Scan Period">5 seconds</value> <value name = "Band 2.4GHz Trigger Delta">5 dBm</value> <value name = "Band 2.4GHz RSSI Floor">-65 dBm</value> <value name = "Band 5GHz Trigger Delta">5 dBm</value> <value name = "Band 5GHz RSSI Floor">-65 dBm</value> </configitem> <configitem name = "Scanning"> <value name = "RSSI Floor">-60 dBm</value> </configitem> </configgroup> </configrecord>'
07-11
潮汐研究作为海洋科学的关键分支,融合了物理海洋学、地理信息系统及水利工程等多领域知识。TMD2.05.zip是一套基于MATLAB环境开发的潮汐专用分析工具集,为科研人员与工程实践者提供系统化的潮汐建模与计算支持。该工具箱通过模块化设计实现了两大核心功能: 在交互界面设计方面,工具箱构建了图形化操作环境,有效降低了非专业用户的操作门槛。通过预设参数输入模块(涵盖地理坐标、时间序列、测站数据等),用户可自主配置模型运行条件。界面集成数据加载、参数调整、可视化呈现及流程控制等标准化组件,将复杂的数值运算过程转化为可交互的操作流程。 在潮汐预测模块中,工具箱整合了谐波分解法与潮流要素解析法等数学模型。这些算法能够解构潮汐观测数据,识别关键影响要素(包括K1、O1、M2等核心分潮),并生成不同时间尺度的潮汐预报。基于这些模型,研究者可精准推算特定海域的潮位变化周期与振幅特征,为海洋工程建设、港湾规划设计及海洋生态研究提供定量依据。 该工具集在实践中的应用方向包括: - **潮汐动力解析**:通过多站点观测数据比对,揭示区域主导潮汐成分的时空分布规律 - **数值模型构建**:基于历史观测序列建立潮汐动力学模型,实现潮汐现象的数字化重构与预测 - **工程影响量化**:在海岸开发项目中评估人工构筑物对自然潮汐节律的扰动效应 - **极端事件模拟**:建立风暴潮与天文潮耦合模型,提升海洋灾害预警的时空精度 工具箱以"TMD"为主程序包,内含完整的函数库与示例脚本。用户部署后可通过MATLAB平台调用相关模块,参照技术文档完成全流程操作。这套工具集将专业计算能力与人性化操作界面有机结合,形成了从数据输入到成果输出的完整研究链条,显著提升了潮汐研究的工程适用性与科研效率。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值