CN108304409B - 一种基于进位的Sketch数据结构的数据频度估计方法 - Google Patents
一种基于进位的Sketch数据结构的数据频度估计方法 Download PDFInfo
- Publication number
- CN108304409B CN108304409B CN201710024141.0A CN201710024141A CN108304409B CN 108304409 B CN108304409 B CN 108304409B CN 201710024141 A CN201710024141 A CN 201710024141A CN 108304409 B CN108304409 B CN 108304409B
- Authority
- CN
- China
- Prior art keywords
- bit
- bits
- value
- query
- counting
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种基于进位的Sketch数据结构的数据频度估计方法。该方法包括:1)建立Sketch数据结构,其为由计数器组成的二维数组,其中每一个位置都是一个n位的计数器,在计数器的n位空间中设立标记位和计数位;2)在进行更新操作时,通过哈希函数将数据项映射到所述二维数组中,在映射过程中通过计数位进行计数,并在计数位达到其上限时使用标记位进行进位;3)在进行查询操作时,返回二维数组中每行的查询值中的最小值,作为查询结果。该方法可以采用固定标记位的方式或者多级动态标记位的方式。本发明能够在计数器大小不变的情况下使计数上限显著提升,能够提升计数的准确程度。
Description
技术领域
本发明涉及网络安全、金融分析、机器学习、自然语言处理等多个重要领域,具体为一种基于进位的Sketch数据结构的数据频度估计方法。
背景技术
目前,Count-Min Sketch(Graham Cormode,S.Muthukrishnan.An Improved DataStream Summary:The Count-Min Sketch and Its Applications[M]),即计数-最小略图,是使用最多,性能最好,最普适于各种数据的一种Sketch。它相对轻巧,实时计数简单快速,可扩展性较强,存储和计算复杂度都很低。
然而,作为一个轻量级甚至被GPU所使用的数据结构(Y.Wang,Y.Zu,and etal.Wire speed name lookup:A gpu-based approach.In Proc.USENIX NSDI,pages 199–212,2013.),Count-Min Sketch在性能上仍有较大局限,例如其查询准确率对使用空间的大小较为敏感,空间大小的限制会很大程度上制约其准确率。同时其数据结构设计较为简单,导致数据量存储上限十分有限。
发明内容
为了克服现有的Count-Min Sketch计数方式原始的不足,本发明提供一种提升一定比特所能表达的值域上限的计数方法。
本发明采用的技术方案如下:
一种基于进位的Sketch数据结构的数据频度估计方法,包括以下步骤:
1)建立Sketch数据结构,其为由计数器组成的二维数组,其中每一个位置都是一个n位的计数器,在计数器的n位空间中设立标记位和计数位;
2)在进行更新操作时,通过哈希函数将数据项映射到所述二维数组中,在映射过程中通过计数位进行计数,并在计数位达到其上限时使用标记位进行进位;
3)在进行查询操作时,返回二维数组中每行的查询值中的最小值,作为查询结果。
进一步地,步骤1)采用固定标记位的方式,即将计数器的n位空间中高x位作为标记位,剩下的n-x位作为计数位。
或者,步骤1)采用多级动态标记位的方式,标记位的个数和计数位的个数根据存储的数值进行动态调整。
一种查询串频次统计方法,包括以下步骤:
1)使用权利要求1所述Sketch数据结构记录用户每次检索使用的检索串的出现次数;
2)对于每个查询串,根据所述Sketch数据结构得到其出现次数的查询值,进而得到出现次数最大的k个查询串。
进一步地,步骤2)对某个查询串获取的查询值如果不足以排进出现次数最大的k个查询串之中,则无需去片外的哈希表中获取其真实值。
本发明的有益效果是:
本发明在计数器大小不变的情况下,计数上限显著提升。因此,若保持计数上限不变,则能够使用更小、更多的计数器,从而能够提升计数的准确程度。因为本发明是对Count-Min Sketch的改进,所以适用于所有Count-Min Sketch的使用场景,包括自然语言处理、数据流统计、计算点互信息、压缩传感的稀疏逼近、网络异常流检测、处理分布式数据集,等等。
附图说明
图1是本发明的固定标记位版本的执行更新操作时的示意图。
图2是多级动态标记位版本的计数器的结构示意图,显示了标记位和计数位的区分。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面通过具体实施例和附图,对本发明做进一步说明。
本发明所采用的技术方案分为2个版本:
1.Carry-In Sketch:固定标记位版本
1)数据结构
Carry-In Sketch与CM Sketch数据结构一样,设其为一个由Counter组成的宽w高d的二维数组:C[1,1]…C[d,w]。每一个位置都是一个n位的初始化为0的计数器。在这n位的空间中,高x(x<n)位被用作为标记位,剩下的(n-x)位被用作计数位。此外,我们需要d个两两独立的hash函数:h1...hd:(1...∞)→{1...w}。其中h1…hd表示d个hash函数,(1...∞)→{1...w}表示每个hash函数将任何正整数映射到1至w。同时,我们定义膨胀系数m。
2)操作
Update(更新):当一个Update请求(k,c)到达时,我们需要将key值为k的元素***Sketch中c次。每次,我们对Carry-In Sketch的每一行进行一次***操作。对于第r行,我们首先根据hr(k)找到元素的位置,hr(k)表示第r个hash函数对k的映射值。之后,我们对该位置C[r,hr(k)]进行一次***操作:我们使用标记位作为进位。当一个counter的标记位为0的时候,***操作即为简单地对计数器进行+1。直到计数位达到其上限2n-x,我们对标记位进行+1操作并将计数位置为0。从那以后,对于每一次***,我们以的概率对计数位进行+1。如果计数位再次达到了其上限,那么我们重复一次之前的操作,对标记位+1并将计数位置为0。
Query(查询):当一个key值为k的查询请求到来的时候,我们计算:
C[1,h1(k)],C[2,h2(k)]…C[d,hd(k)]:
if value(x sign bits)=0
value(C[i,hi(k)])=value((n-x)count bits);
if value(x sign bits)>0
value(C[i,hi(k)])=2^(n-x)+m*2^(n-x)*(value(x sign bits)-1)+m*(value((n-x)count bits)).
上面内容用自然语言描述为:
对于每一个C[i,hi(k)],其查询值计算方法如下:
1)若标记位的值是0,则计数位的值就是查询值。
2)若标记位不为0,则查询值分为两部分:
一部分是计数位的查询值,从数学期望上讲,每m次***可以令计数位增长1,所以它等于膨胀系数m乘以计数位的值。
另一部分是标记位代表的值。已知计数位共有(n-x)位,根据上述更新步骤可知,计数位每增长2^(n-x)就会使标记位增长1,同时计数位归0。因此,令标记位从0增长到1需要2^(n-x)次***。一旦标记位不为0,从数学期望上讲,每m次***可以令计数位增长1,又因为想令标记位增长1需要计数位增长2^(n-x),所以需要的***次数是m*2^(n-x)次。所以标记位的值若为x,其查询值即为2^(n-x)+m*2^(n-x)*(x-1)。
将上述两个部分加起来就是C[i,hi(k)]的查询值。
上述代码中value(element)代表元素的值。之后,我们返回所有C[i,hi(k)]查询值中最小的那个作为最终查询结果。
2.Carry-In Sketch:多级动态标记位版
1)数据结构
这个版本的数据结构仍是一个二维数组C[d,w]。但这次,标记位是多级的。标记位的个数和计数位的个数都是根据存储的数值动态调整的。从计数器的最高位开始往低位找,直到找到第一个bit的值为0,此时所有比0高的位都是标记位,所有比0低的位都是计数位。同样我们定义膨胀系数为m。如图2所示。
2)操作
Update:多级标记位Carry-In Sketch和固定标记位Carry-In Sketch更新操作唯一的差别在于对于每个counter进行+1。我们假设高x位是标记位,那么低(n-x-1)位是计数位。每次,我们以的概率对计数位进行+1操作。当计数位满了需要进位的时候,我们将刚刚找到的第一个0置为1,然后将所有的计数位置为0。这样,标记位就扩展了一位,计数位减少了一位,也就是从高位到低位找到的第一个0右移了一位。
Query:当一个key值为k的查询到来的时候,我们计算C[1,h1(k)],C[2,h2(k)]…C[d,hd(k)]的值,计算方式如下:
value=m0*2n-1+m1*2n-2+…+mx-1*2n+1-x+mx-1*(value of counter bits)
其中“value of counter bits”表示计数位的值。计算出这些值之后,选择其中最小的,即为最终的查询值。
本发明的有益效果是,在计数器大小不变的情况下,计数上限显著提升。取每个计数器的位数n=8,取膨胀系数为m=16,则具体效果如表1和表2所示:
表1.固定标记位版本:
表2.动态标记位版本:
应用场景:
搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,假设目前有若干条记录,每条记录对应于对某个查询串的一次查询。要求统计最热门的k个查询串。
传统的方案是使用一个哈希表记录每个查询串出现的次数。之后维护一个大小为k的小根堆,遍历全部查询串,最终即可得到出现次数最大的k个查询串。我们现在可以在哈希表的基础上,增加一个现有技术中的Count-Min Sketch(简称CM Sketch,下同)结构,优化处理速度。具体如下:
首先,根据实际应用的场景,可以认为哈希表很大,必须放在片外,而片外访问是很慢的(相对于片内访问)。现在,我们可以在片内增加一个CM Sketch结构,记录各查询串的出现次数。CM Sketch的特点就是小,足以放在片内,因而访问速度很快(访问一次sketch所消耗的时间远远小于访问一次哈希表所需的时间)。与此同时,根据CM Sketch的特点,查询它所获得的值不准,但该查询值总是不小于真实值。因此,如果对某个查询串,其从CMSketch中获取的查询值都不足以排进最大的k个之中,则无需去片外的哈希表中获取其真实值,从而避免了一次片外访问,增加了处理效率。
但是,依然存在这样一种情况,那就是某个查询串的CM Sketch的查询值足以排进最大的k个之中,但真实值不足以排进最大的k个之中。我们当然希望能尽量减少这种情况,这就要求sketch在保持所消耗的存储空间不变的前提下尽可能地提升准确程度。而本发明的Carry-In Sketch相比于CM Sketch,正是做出了这样的改进!
具体实施时,将上述场景中原本使用的Count-Min Sketch替换为Carry-InSketch即可。Carry-In Sketch的数据结构和操作方式已经详细地在上面进行了描述。
具体实例:
假定有5个不同的查询串,分别是a,b,c,d,e,频次依次为1000,300,200,1200,400。在原本的CM Sketch中,a和c映射到同一个位置,此位置的计数为1000+200=1200。b和d映射到同一个位置,此位置的计数为300+1200=1500。
现在假定我们以edcba的顺序遍历到这些串,试图寻找top-3,并且之前已经找到3个最大值为350,340,330。找到e,查询值400足够大,再去哈希表中查询其真实值400,则现在的top-3分别是400,350,340。找到d,查询值1500,再去找真实值1200,则现在的top-3分别是1200,400,350。找到c,查询值1200,再去找真实值200,忽略。同理,b也忽略。最后找到a,查询真实值1000,最终得到top-3为1200,1000,400。此过程中为了这5个元素总共查询5次哈希表,也就是5次片外访问。
假如使用Carry-In Sketch,在所耗空间不变的前提下,由于counter数目增长,很有可能这些元素映射到的位置各不相同。则查询c时发现查询值200,不足以排进top-3,就不需要查询其真实值了。对于b同理。这样就减少了2次访问哈希表的次数,或者说是2次片外访问,从而提升了效率。
在上述的更新步骤中,对d行均进行***操作。另外一种变形方式是,查找这d行结果中的最小值(可能有多个最小值),然后只对这个或这些最小值执行***;对其余行不进行任何操作。其余操作全部不变。此变形方式适用于上述全部2个版本。
以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求书所述为准。
Claims (6)
1.一种基于进位的Sketch数据结构的数据频度估计方法,其特征在于,包括以下步骤:
1)建立Sketch数据结构,其为由计数器组成的二维数组,其中每一个位置都是一个n位的计数器,在计数器的n位空间中设立标记位和计数位;
2)在进行更新操作时,通过哈希函数将数据项映射到所述二维数组中,在映射过程中通过计数位进行计数,并在计数位达到其上限时使用标记位进行进位;
3)在进行查询操作时,返回二维数组中每行的查询值中的最小值,作为查询结果;
其中,步骤1)采用固定标记位的方式,即将计数器的n位空间中高x位作为标记位,剩下的n-x位作为计数位;步骤2)进行更新操作的具体方法为:当一个更新请求(k,c)到达时,将key值为k的元素***Sketch中c次,每次对每一行进行一次***操作;对于第r行,首先根据hr(k)找到元素的位置,hr(k)表示第r个hash函数对k的映射值,之后对该位置C[r,hr(k)]进行一次***操作,并使用标记位作为进位;当一个计数器的标记位为0时,***操作即为简单地对计数器进行+1,直到计数位达到其上限2n-x,对标记位进行+1操作并将计数位置为0;然后对于每一次***,以的概率对计数位进行+1,其中m为膨胀系数;如果计数位再次达到了其上限,则重复一次之前的操作,对标记位+1并将计数位置为0;
或者,步骤1)采用多级动态标记位的方式,标记位的个数和计数位的个数根据存储的数值进行动态调整;所述多级动态标记位的方式,从计数器的最高位开始往低位找,直到找到第一个bit的值为0,此时所有比0高的位都是标记位,所有比0低的位都是计数位。
2.如权利要求1所述的方法,其特征在于:步骤3)所述查询操作中,对于每一个C[i,hi(k)],其查询值计算方法如下:
a)若标记位的值是0,则计数位的值就是查询值;
b)若标记位不为0,则查询值分为两部分:一部分是计数位的查询值,其等于膨胀系数m乘以计数位的值;另一部分是标记位代表的值,设标记位的值为x,则其查询值为2^(n-x)+m*2^(n-x)*(x-1);将该两个部分相加即为C[i,hi(k)]的查询值,然后返回所有C[i,hi(k)]查询值中最小的作为最终查询结果。
4.如权利要求3所述的方法,其特征在于,步骤3)进行查询操作的具体方法为,当一个key 值为k的查询请求到来时,计算:
value=m0*2n-1+m1*2n-2+…+mx-1*2n+1-x+mx-1*(value of counter bits),
其中value of counter bits表示计数位的值;计算出这些值之后,选择其中最小的即为最终的查询值。
5.一种查询串频次统计方法,其特征在于,包括以下步骤:
1)使用权利要求1所述Sketch数据结构记录用户每次检索使用的检索串的出现次数;
2)对于每个查询串,根据所述Sketch数据结构得到其出现次数的查询值,进而得到出现次数最大的k个查询串。
6.如权利要求5所述的方法,其特征在于,步骤2)对某个查询串获取的查询值如果不足以排进出现次数最大的k个查询串之中,则无需去片外的哈希表中获取其真实值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710024141.0A CN108304409B (zh) | 2017-01-13 | 2017-01-13 | 一种基于进位的Sketch数据结构的数据频度估计方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710024141.0A CN108304409B (zh) | 2017-01-13 | 2017-01-13 | 一种基于进位的Sketch数据结构的数据频度估计方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108304409A CN108304409A (zh) | 2018-07-20 |
CN108304409B true CN108304409B (zh) | 2021-11-16 |
Family
ID=62872335
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710024141.0A Active CN108304409B (zh) | 2017-01-13 | 2017-01-13 | 一种基于进位的Sketch数据结构的数据频度估计方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108304409B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110532307B (zh) * | 2019-07-11 | 2022-05-03 | 北京大学 | 一种流滑动窗口的数据存储方法及查询方法 |
CN110535825B (zh) * | 2019-07-16 | 2020-08-14 | 北京大学 | 一种特征网络流的数据识别方法 |
CN110830322B (zh) * | 2019-09-16 | 2021-07-06 | 北京大学 | 一种基于概率测量数据结构Sketch的网络流量测量方法和*** |
CN111782700B (zh) * | 2020-08-05 | 2023-08-18 | 中国人民解放军国防科技大学 | 基于双层结构的数据流频次估计方法、***及介质 |
CN112422579B (zh) * | 2020-11-30 | 2021-11-30 | 福州大学 | 一种基于拟态防御Sketch的执行体集构建方法 |
CN114625760A (zh) * | 2022-02-15 | 2022-06-14 | 北京大学 | 基于连接简图的数据库连接基数估计方法和*** |
US11934401B2 (en) | 2022-08-04 | 2024-03-19 | International Business Machines Corporation | Scalable count based interpretability for database artificial intelligence (AI) |
CN117811951B (zh) * | 2024-02-29 | 2024-05-31 | 苏州大学 | 一种基于Sketch的网络流大小测量方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102882798A (zh) * | 2012-09-04 | 2013-01-16 | 中国人民解放军理工大学 | 面向骨干网流量分析的统计计数方法 |
CN103647670A (zh) * | 2013-12-20 | 2014-03-19 | 北京理工大学 | 一种基于sketch的数据中心网络流量分析方法 |
CN103763154A (zh) * | 2014-01-11 | 2014-04-30 | 浪潮电子信息产业股份有限公司 | 一种网络流量检测方法 |
-
2017
- 2017-01-13 CN CN201710024141.0A patent/CN108304409B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102882798A (zh) * | 2012-09-04 | 2013-01-16 | 中国人民解放军理工大学 | 面向骨干网流量分析的统计计数方法 |
CN103647670A (zh) * | 2013-12-20 | 2014-03-19 | 北京理工大学 | 一种基于sketch的数据中心网络流量分析方法 |
CN103763154A (zh) * | 2014-01-11 | 2014-04-30 | 浪潮电子信息产业股份有限公司 | 一种网络流量检测方法 |
Non-Patent Citations (2)
Title |
---|
An improved data stream summary: the count-min sketch and its applications;Graham Cormode 等;《JOURNAL OF ALGORITHMS-COGNITION INFORMATICS AND LOGIC》;20050430(第55期);正文第2、3、4.1节 * |
Count-Min Sketch;Graham Cormode;《Encyclopedia of Database Systems》;Springer, Boston, MA;20090131;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN108304409A (zh) | 2018-07-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108304409B (zh) | 一种基于进位的Sketch数据结构的数据频度估计方法 | |
US11048966B2 (en) | Method and device for comparing similarities of high dimensional features of images | |
KR100545477B1 (ko) | 거리 측정기를 사용한 이미지 검색법 | |
CN111868710B (zh) | 搜索大规模非结构化数据的随机提取森林索引结构 | |
US7080091B2 (en) | Inverted index system and method for numeric attributes | |
CN101404032B (zh) | 一种基于内容的视频检索方法及*** | |
US11106708B2 (en) | Layered locality sensitive hashing (LSH) partition indexing for big data applications | |
CN105574212B (zh) | 一种多索引磁盘哈希结构的图像检索方法 | |
KR100903961B1 (ko) | 시그니처 파일을 이용한 고차원 데이터 색인 및 검색방법과 그 시스템 | |
CN109166615B (zh) | 一种随机森林哈希的医学ct图像存储与检索方法 | |
CN109871454B (zh) | 一种鲁棒离散监督跨媒体哈希检索方法 | |
CN106777388B (zh) | 一种双重补偿的多表哈希图像检索方法 | |
CN112163145B (zh) | 基于编辑距离与余弦夹角的网站检索方法、装置及设备 | |
EP3115908A1 (en) | Method and apparatus for multimedia content indexing and retrieval based on product quantization | |
CN100476824C (zh) | 存储元素的方法与***及查找元素的方法与*** | |
CN113806601B (zh) | 一种周边兴趣点检索方法及存储介质 | |
CN110083731B (zh) | 图像检索方法、装置、计算机设备及存储介质 | |
CN105740428A (zh) | 一种基于b+树的高维磁盘索引结构和图像检索方法 | |
CN115129915A (zh) | 重复图像检索方法、装置、设备及存储介质 | |
CN105302833A (zh) | 一种基于内容的视频检索数学模型建立方法 | |
CN116861022A (zh) | 一种基于深度卷积神经网络和局部敏感哈希算法相结合的图像检索方法 | |
CN108595508B (zh) | 一种基于后缀数组的自适应索引构建方法及*** | |
KR102054211B1 (ko) | 이미지 쿼리 기반의 영상 검색 방법 및 시스템 | |
CN105117733A (zh) | 一种确定聚类样本差异的方法及装置 | |
CN110598020B (zh) | 二值图像检索方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |