(19)国家知识产权局
(12)发明 专利申请
(10)申请公布号
(43)申请公布日
(21)申请 号 202210920745.4
(22)申请日 2022.08.02
(71)申请人 上海金融期 货信息技 术有限公司
地址 200122 上海市浦东 新区自由贸易试
验区杨高南路28 8号19-21层
(72)发明人 王毅鹏 韩增 郑斌 曾柯杰
赵亚萍
(74)专利代理 机构 上海专利商标事务所有限公
司 31100
专利代理师 施浩
(51)Int.Cl.
G06F 16/22(2019.01)
G06F 16/2455(2019.01)
(54)发明名称
一种唯一哈希序号 生成方法和系统
(57)摘要
本发明公开了唯一哈希序号生成方法和系
统, 解决哈希值范围区间大的问题, 提高以字符
串为索引的对象在存储时的空间利用率和数据
查询效率。 其技术方案为: 对字 符串处理, 生成从
0自增的哈希序号, 哈希序号作为索引代替原先
需要字符串作为索引的存储数据结构; 使用
cblock_map数据缓存结构, cblock_map对哈希项
存储时以哈希项哈希值为索引, 包含字符串和哈
希序号等信息。 在方法的运行过程中cblock_map
内存结构稳定, 所有可能使用的空间在构造方法
中已预先准备, 不存在当空间占满后重新创建对
象并拷贝数据的场景。 使用cblock_map提供高效
且稳定的读写能力, 对哈希值的索引存储位置支
持O(1)效率的查找, 即便遇到哈希冲突的情况,
也可以通过链表遍历的方式将查询时间控制在
常量范围。
权利要求书2页 说明书7页 附图5页
CN 115203211 A
2022.10.18
CN 115203211 A
1.一种唯一哈希序号生成方法, 其特征在于, 方法包括新建唯一哈希序号的流程, 新建
流程包括:
首先, 获取传入待取哈希序号的字符串, 使用哈希函数按字符处 理映射为哈希值;
以哈希值为索引, 检查cblock_map类型的code_table中, 索引对应位置是否存在有效
值, 若不存在, 则创建哈希项, 把哈希序号赋值给新建的哈希项, 并自增1, 同时创建以该哈
希项为头指针的哈希链表, 将哈希链表保存在code_table对应的索引位置后, 返回哈希序
号; 若索引对应位置在code_table中存在 有效值, 则将该有效值作为哈希链表的首节 点, 遍
历哈希链表的子项, 比较每个哈希项中缓存的字符串与传入的字符串是否相等, 若存在相
等字符串, 则返回该哈希项的哈希序号; 若不存在相等的字符串, 则 在链表尾节点创建新的
哈希项, 更新哈希项的哈希序号和字符串值, 哈希序号自增1, 并返回新哈希项的哈希序号。
2.根据权利要求1所述的唯一哈希序号生成方法, 其特征在于, 方法还包括获取哈希序
号的流程, 获取流 程包括:
首先, 获取传入待取哈希序号的字符串, 使用哈希函数按字符处 理映射哈希值;
以哈希值为索引检查cblock_map类型的code_table中, 检查索引对应位置是否存在有
效值, 若不存在有效值, 则返回查询失败; 若索引对应位置在code_t able中存在有效值, 则
将该有效值作为哈希链表的首节点, 遍历哈希链表的子项, 比较每个哈希项中缓存的字符
串与传入字符串是否相等, 若存在相等字符串, 则返回该哈希项的哈希序号; 若不存在相等
的字符串, 则返回查询失败。
3.根据权利要求2所述的唯一哈希序 号生成方法, 其特征在于, cblock_map的数据缓存
结构是根据索引快速读取缓存值, 其中cblock_ map的底层以二维指针数 组形式对 数据进行
存储和管理, 初始化时可定义行、 列数值, 但不进行内存 申请, 二维指针数组根据插入时索
引位置按需初始化, 每次初始化索引所在行的数组。
4.根据权利要求3所述的唯一哈希序 号生成方法, 其特征在于, cblock_map的底层存储
组件进一 步配置有初始化、 数据保存和数据读取的流 程, 其中:
cblock_map类型的code_table初始化流程进一步配置为: 首先创建cblock_map类型的
指针, 构造方法中添加行数、 页数的参数, cblock_ map底层存储为二维指针数 组形式, 行数*
页数的值规定code_table支持的最大索引数, 在数 组初始化时, 统一将行数 组设为空指针,
并不进行额外的空间申请;
cblock_map类型的code_table保存数据流程进一步配置为: 首先根据传入哈希序号
值, 判断所要保存的数据应该位于 哪个行数组内, 若 该行数组不存在, 则新建 并初始化行数
组, 再根据哈希序号对页数 取余, 得到具体的存 储位置, 把待存 储数组更新至该存 储位置;
cblock_map类型的code_table读取数据流程进一步配置为: 先根据传入哈希序号值,
判断所要读取的数据应该位于 哪个行数组内, 若 该行数组不存在, 则返回读取失败; 根据哈
希序号对页数取余, 得到具体的存储位置, 判断存储位置是否为空, 为空则 返回查询失败,
反之返回该索引处存 储的值。
5.一种唯一哈希序号生成系统, 其特征在于, 系统包括: 新建唯一哈希序号的子系统,
其中新建唯一哈希序号的子系统进一 步包括:
新建哈希序号的映射模块, 获取传入待取哈希序号的字符串, 使用哈希函数按字符处
理映射为哈希值;权 利 要 求 书 1/2 页
2
CN 115203211 A
2新建哈希序号 的第一分支模块, 以哈希值为索引, 检查cblock_map类型的code_table
中, 索引对应位置是否存在有效值, 若不存在有效值, 则创建哈希项, 把哈希序号赋值给新
建的哈希项, 并自增1, 同时创建以该哈希项为头指针的哈希链表, 将哈希链表保存在code_
table对应的索引位置后, 返回哈希序号;
新建哈希序号 的第二分支模块, 以哈希值为索引, 检查cblock_map类型的code_table
中, 索引对应位置是否存在 有效值, 若索引对应位置在code_table中存在 有效值, 则将该有
效值作为哈希链表的首节点, 遍历哈希链表的子项, 比较每个哈希项中缓存的字符串与传
入的字符串 是否相等, 若存在相等字符串, 则返回该哈希项的哈希序号; 若不存在相等的字
符串, 则在链表尾节点创建新的哈希项, 更新哈希项的哈希序号和字符串值, 哈希序号自增
1, 并返回新哈希项的哈希序号。
6.根据权利要求5所述的唯一哈希序号生成系统, 其特征在于, 系统包括: 获取唯一哈
希序号的子系统, 其中获取唯一哈希序号的子系统进一 步包括:
获取哈希序号的映射模块, 获取传入待取哈希序号的字符串, 使用哈希函数按字符处
理映射哈希值;
获取哈希序号的第一分支模块, 以哈希值为索引检查cblock_map类型的code_table
中, 检查索引对应位置是否存在有效值, 若不存在有效值, 则返回查询失败;
获取哈希序号的第二分支模块, 以哈希值为索引检查cblock_map类型的code_table
中, 检查索引对应位置是否存在 有效值, 若索引对应位置在code_table中存在 有效值, 则将
该有效值作为哈希链表的首节点, 遍历哈希链表的子项, 比较每个哈希项中缓存的字符串
与传入字符串 是否相等, 若存在相等字符串, 则返回该哈希项的哈希序号; 若不存在相等的
字符串, 则返回查询失败。
7.根据权利要求6所述的唯一哈希序 号生成系统, 其特征在于, cblock_map的数据缓存
结构是根据索引快速读取缓存值, 其中cblock_ map的底层以二维指针数 组形式对 数据进行
存储和管理, 初始化时可定义行、 列数值, 但不进行内存 申请, 二维指针数组根据插入时索
引位置按需初始化, 每次初始化索引所在行的数组。
8.根据权利要求7所述的唯一哈希序 号生成系统, 其特征在于, 系统还包括cblock_map
的底层存储组件, cblock_map的底层存储组件进一步配置有初始化单元、 数据保存单元和
数据读取 单元, 其中:
初始化单元, 配置为先创建cblock_map类型的指针, 构造方法中添加行数、 页数的参
数, cblock_map底层存储为二维指针数 组形式, 行数*页数的值规定code_table支持的最大
索引数, 在数组初始化时, 统一将行 数组设为空指针, 并不进行额外的空间申请;
数据保存单元, 配置为先根据传入 哈希序号值, 判断所要保存的数据应该位于哪个行
数组内, 若该行数组不存在, 则新建并初始化行数组, 再根据哈希序号对页数取余, 得到具
体的存储位置, 把待存 储数组更新至该存 储位置;
数据读取单元, 配置为先根据传入 哈希序号值, 判断所要读取的数据应该位于哪个行
数组内, 若该行数组不存在, 则 返回读取失败; 根据哈希序号对页数取余, 得到具体的存储
位置, 判断存 储位置是否为空, 为空则返回查询失败, 反 之返回该索引处存 储的值。权 利 要 求 书 2/2 页
3
CN 115203211 A
3
专利 一种唯一哈希序号生成方法和系统
文档预览
中文文档
15 页
50 下载
1000 浏览
0 评论
309 收藏
3.0分
温馨提示:本文档共15页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
本文档由 人生无常 于 2024-03-18 17:14:31上传分享