发布最实用的数据结构( 多级树)SDK开发包---产品文档

 

 

1          概述

本文讲述普遍应用在程序开发中快速HASH树数据结构的技术特点、功能描述、

应用领域以及性能参数和其他类库的对比。

 

目前实时处理系统对内存数据结构的普遍有以下要求:

 

1、功能要求

功能要强大且完备,满足业务功能的需求。

 

2、性能要求

要能满足实时处理系统对处理速度的需求,同时能长期运行且性能保持稳定

 

3、系统容量大

要能保持超大规模数据,且在海量数据情况下还能保持优异的性能。

 

快速HASH树是目前速度最快功能最强大的数据结构,可以满足电信以及其他行业软件开发对数据结构的要求。

                         

2         版权说明

1、本开发包免费,用户可用于学习、测试、商业用途,本软件没有功能上的限制和使用期限限制,可自由复制、传播。

 

2、用户可发邮件到Freeland007@163.com 向作者获取最新版本。欢迎用户朋友

对本软件提出宝 贵意见,作者会及时修改软件的BUG,并对软件进行持续的

改进。

 

3、作者联系方式

e-mail:freeland007@163.com

QQ: 723273055

3          单级HASH树介绍

Hash树数据结构是根据键值插入到树中形成节点,节点保存用户数据,一般情况保存一个结构体或对象的指针,树中的各个节点再插入后即排序,形成有序的节点多叉树结构。

 

可以通过以下方式访问树节点以及用户数据

 

1、可以通过外部提供的值在HASH树中快速定位到唯一树中的节点。

 

2、可以通过外部提供的值在HASH树中快速定位到符合条件的匹配规则节点。

匹配规则表达式字符串由字符和2种通配符组成,例如以下形式的规则表达

式:

1)0755%、138%5678、%5678、%1234%

2)?234567890、12345678??、?23???789?

3)0755%56??、????1234%

 

通配符为%和?。

通配符%:包含零个或更多个字节的任意字符串。

通配符?:任意单字节字符。

 

3、可以通过外部提供的匹配模式字符串在HASH树中定位到符合条件的节点。

说明:本搜索方式和方式2是完全相反的方式,一般情况下可能会有多个节点的键值符合匹配模式,对于符合条件的节点可以可以指定排序方式顺序访问。

 

4、可以在HASH树中定位指定键值长度的节点。

例如:

1)定位键值长度为10字节的所有节点

2)定位键值长度为大于5小于10个字节的所有节点

 

5、可以在HASH树中定位键值在某个区域的节点。

例如:

1)返回大于“1234000000”的节点

2)返回小于“1235000000”的节点

3)返回大于“1234000000”并且小于“1235000000” 的节点

 

6、用整体遍历的方式访问HASH树中的节点,再遍历时可以指定排序方式,可以按主键的升序或降序顺序遍历

 

7、根据指定排序(升、降)方式获取头(尾)节点

 

8、根据指定排序(升、降)方式删除头(尾)节点,同时获取头(尾)节点的用户数据(指针)

               

除了以上的访问HASH树节点方式外,还有以下功能:

 

1、对于返回多个节点的情况可以指定排序方式(升序、降序)的方式访问节点

   例如:上面的方式3、4、5、6

 

2、对于返回多个节点的情况可以指定访问的最大节点数量

 

3、可以再查询HASH树的回调函数中对节点数据经行再处理。

 

4、根据节点可以获取该节点的用户数据(指针)以及该节点的键值。

 

4          多级HASH树介绍

如果HASH树中的节点保存的数据是指向另外一个HASH树的指针,如此递归

形成一棵多级HASH树,最后一棵HASH树保存用户数据,一般为结构体或对

象的指针。           

 

用户通过插入多个键值插入到多级树的各个HASH树中,也可以通过多个键值删除多级树中指定的节点。

 

多级HASH树采用以下方式遍历用户数据节点。

 

从顶层HASH树开始向底层树遍历,对每层次的HASH树可以指定访问树节点的访问方式(参考单级树的访问方式),一致到最底层数的叶子节点。

 

开发包访问多级树的API和访问单级树是统一的。

 

5          运行效率高

1、根据主键精确访问(插入、删除、查询、模式匹配)节点的速度快。

1)在有 1000万节点的HASH树中插入或插入一个节点需要不到1微

秒,相当于100~200万次/秒插入或删除节点操作。

 

2)在有 1000万节点的HASH树中查找一个节点需要0.2~0.5个微

秒,相当于200~500万次/秒查找操作。

 

2、在按指定排序的情况下获取(删除)头(尾)节点的速度快。

在有 1000万节点的HASH树中删除入一个头(尾)节点需要2~3个微

秒,相当于45~70万次/秒删除头(尾)节点操作。

 

3、对HASH其它操作的指标参考性能指标部分

 

4、支持超大容量节点

在HASH树有庞大数量节点的情况下,仍然保持高效运行。根据主键精确访问

(插入、删除、查询、模式匹配)节点的耗时与HASH树中节点数量无关,只与键值的长度有关。

 

5、在频繁插入、删除节点的情况下,系统仍然保持运行稳定,不会出现性能抖

动的情况。

                                           

6          功能强大

单(多)级HASH树功能强大,可以满足目前应用程序开发中对数据结构功能上的需求,是对目前C、C++标准库强有力的补充或部分替代功能。

 

以下是HASH树和MFC中CMAP类的功能比较。

 

 

序号

比较功能

快速HASH树

CMAP(MFC)

1

精确查询节点

支持

支持

2

精确删除节点

支持

支持

3

根据匹配模式匹配节点

支持

不支持

4

根据字符串匹配规则表达式节点

支持

不支持

5

查询指定键值长度的节点

支持

不支持

6

查询指定键值范围的节点     

支持

不支持

7

支持键值有序(升、降)遍历

支持

不支持

8

支持头(尾)节点操作

支持

不支持

9

根据节点位置获取键值

支持

不支持

10

根据节点位置获取用户指针数据

支持

不支持

11

根据节点位置删除树节点

支持

不支持

12

支持多级(树、MAP)方式

支持

不支持

13

多级(树、表)的功能

支持

N/A

14

其它功能

支持

不支持

                                        

 

具体功能可参考第7章SDK中API函数的功能介绍。

 

7          快速HASH树SDK介绍

快速HASH树以动态库的形式提供给开发人员,下面介绍常用的API。

 

1、HANDLE HTreeCreate(LPHTREEDESC pTreeDesc);

功能:生成单(多)级HASH树

 

2、void HTreeDrop(HANDLE hTree);

功能:删除单(多)级HASH树。

 

3、int HTreeGetCount(HANDLE hTree);

功能:获取HASH树中节点的数量。

 

4、int HTreeAddKey(HANDLE hTree, char* sMultiKey[], HANDLE hValue);

功能:根据键值插入一个节点到单(多)级HASH树中。

 

5、HANDLE HTreeRemoveKey(HANDLE hTree, char* sMultiKey[]);

功能:根据键值在单(多)级HASH树中精确删除相应的节点。

 

6、HANDLE HTreeGetKeyValue(HANDLE hTree, char* sMultiKey[]);

功能:根据键值在单(多)级HASH树中精确查找相应的一个节点。

 

7、HANDLE HTreeGetMatchValue(HANDLE hTree, char* sMultiKey[]);

功能:根据外部提供的字符串在单(多)级HASH树中匹配出最精确的规则表

达式。

 

8、HANDLE HTreeGetHead(HANDLE hTree, bool bAsc[]);

功能:在指定树的各级主键排序的情况下,获取头结点的值

 

9、HANDLE HTreeGetTail(HANDLE hTree, bool bAsc[]);

功能:在指定树的各级主键排序的情况下,获取尾结点的值       

 

10、bool HTreeGetHeadPosition(HANDLE hTree, bool bAsc[], HANDLE

hNodeSet[]);

 

   功能:在指定树的各级主键排序的情况下,获取各级树在指定排序情况下头结点,并把各级头结点保存到节点数组中。

 

11、bool HTreeGetTailPosition(HANDLE hTree, bool bAsc[], HANDLE

hNodeSet[]);

功能:在指定树的各级主键排序的情况下,获取各级树在指定排序情况下尾结点,并把各级尾结点保存到节点数组中。

 

12、HANDLE HTreeRemoveHead(HANDLE hTree, bool bAsc[]);

   功能:在指定树的各级主键排序的情况下,删除头节点,并返回头节点句柄

值。

 

13、HANDLE HTreeRemoveTail(HANDLE hTree, bool bAsc[]);

   功能:在指定树的各级主键排序的情况下,删除尾节点,并返回尾节点句柄

值。

 

14、 HANDLE HTreeRemoveAt(HANDLE hTree, HANDLE hNodeSet[]);

   功能:根据各级树种的节点,删除指定叶子节点

 

15、void HTreeGetNodeKey(HANDLE hTree, HANDLE hNode, char* sKey);

功能:根据节点获取节点对应的键值

 

16、HANDLE HTreeGetNodeValue(HANDLE hTree, HANDLE hNode)

功能:根据节点获取节点对应的句柄值

 

17、void HTreeRemoveAll(HANDLE hTree);

功能:一次清除HASH树中的所有节点

 

18 int HTreeSelect(LPSELECTCOND pSelectCond);

 功能:此函数用来根据指定的条件访问单(多)级HASH树中的节点,此函数

功能强大,可以指定访问各级子树的访问方式,对于满足访问条件的节点可

以由用户编写的回调函数处理。

 

19、void HTreeGetCurrentPosition(LPSELECTCOND pSelectCond, HANDLE

hNodeSet[]);

   功能:此函数在执行HTreeSelect中的回调函数中使用,用来获取当前各级

子树节点,并保存在节点数组中。

 

19、HANDLE HTreeGetCurrentValue(LPSELECTCOND pSelectCond);

   功能:此函数在执行HTreeSelect中的回调函数中使用,用来获取当前节点

的句柄值。

 

19、HANDLE HTreeGetCurrentKey(LPSELECTCOND pSelectCond, int nLevel, char* sKey);

   功能:此函数在执行HTreeSelect中的回调函数中使用,用来获取当前节点

指定树级别主键的值。

 

其它功能函数:略

 

8          HASH树行业应用

快速单(多)级HASH树已经广泛应用到可应用于多个行业软件开发领域,特别适合于超大规模信息的实时处理的情况。

 

8.1  电信实时处理系统

1、电话(手机)号码路由

2、电话号码区号匹配

3、手机号码归属地查询

4、手机短信违禁词过滤

5、电话(手机)号码黑白名单查询过滤

6、号码路由

7、订购关系处理

8、实时鉴权系统

10、实时计费系统

 

8.2  互联网应用

1、高效数据库缓存服务器

2、产品编码查询

3、身份查询

4、网络游戏服务器

7、域名系统

8、路由查询

9、邮件系统

8.3  实时处理系统

1、实时监控系统

2、数据采集系统

3、跟踪系统

 

8.4  内存数据库系统

内存数据库的其中之一的核心数据结构式内存数据库表,而索引时其中最重要部分,内存数据库的索引可选择HASH树可作为内存数据库的索引数据结构。

 

9          运行环境

1、windows 2000、windows 2003、windows XP

2、linux

3、unix(solarix、HP-UX、AIX等)

 

10    性能指标

10.1             测试环境

1、操作系统:windows xp professional

2、内存:1G /DDR2

3、CPU:AMD LE1100/1.9GHz

 

10.2             单级HASH树的性能指标

测试条件:

1、单级HASH树

 

2、树中有100万节点,节点的键值从123456780000000000到

123456780000999999

 

测试项目:

1、插入节点

   插入100万节点到HASH树中,节点的键值从123456780000000000到

123456780000999999,耗时1.000秒。

 

2、根据键值精确删除节点

   从HASH树中根据键值删除100万节点,节点的键值从123456780000000000

到123456780000999999,耗时1.031秒。

 

3、根据键值精确查询节点

   根据键值从HASH树中精确查询100万节点,节点的键值从

123456780000000000到123456780000999999,耗时0.562秒。

 

4、整体遍历

   遍历HASH树中的100万节点,节点的键值从123456780000000000到

123456780000999999,耗时0.078秒。

                                

5、删除头(尾)节点

   用删除头(尾)节点的方式删除HASH树中的100万节点,节点的键值从

123456780000000000到123456780000999999,耗时2.140秒。

 

6、清除HASH树中所有节点

   一次清除HASH树中的所有100万节点,节点的键值从123456780000000000

到123456780000999999,耗时0.094秒。

                                

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt是一个跨平台的C++应用程序开发框架,提供了丰富的控件和功能,可以用于开发各种类型的应用程序。 在实现表格控件时,如果需要支持多级表头,可以借助Qt的QHeaderView类来实现。QHeaderView类是Qt中用于表格或型视图的表头控件,它可以显示列或行的标题,并且支持拖动和调整列宽度。 首先,创建一个QTreeView控件作为表格控件的显示部分。然后,创建一个QHeaderView对象作为表格控件的表头,使用setModel()函数将表头设置给表格控件。接下来,设置表头的显示模式为水平模式,使用setSectionResizeMode()函数设置每一列的调整方式,例如,可以设置为可以自动调整大小或者禁止调整大小。 为了支持多级表头,可以使用QHeaderView的addSection()函数来添加多级表头。逐级添加表头时,需要设置每一级表头的标签、起始列、列数和对齐方式。可以使用setHeaderData()函数为每一级的表头设置样式。 接着,使用setHeaderHidden()函数将QTreeView的默认表头隐藏起来,这样就只展示了我们自定义的多级表头。同时,可以使用setRootIsDecorated()函数将节点的展开和收缩图标隐藏起来,以使得表格控件更加美观。 最后,将数据模型设置给QTreeView控件,通过添加节点和设置节点的父子关系,来组织表格数据结构。数据模型可以继承自QAbstractItemModel类,实现相关的接口函数,以提供数据的展示和操作。 通过以上步骤,我们就可以实现一个支持多级表头的表格控件。用户可以通过拖动和调整表头以调整列宽度,同时展示复杂的表头结构,方便显示和操作大量数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值