CN111208978B - 以Python为接口C++实现的字符布隆过滤器 - Google Patents
以Python为接口C++实现的字符布隆过滤器 Download PDFInfo
- Publication number
- CN111208978B CN111208978B CN201911403363.9A CN201911403363A CN111208978B CN 111208978 B CN111208978 B CN 111208978B CN 201911403363 A CN201911403363 A CN 201911403363A CN 111208978 B CN111208978 B CN 111208978B
- Authority
- CN
- China
- Prior art keywords
- python
- bloom filter
- character
- interface
- data
- 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
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
- G06F8/24—Object-oriented
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9014—Indexing; Data structures therefor; Storage structures hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Design And Manufacture Of Integrated Circuits (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供一种以Python为接口C++实现的字符布隆过滤器,包括以下步骤:1)、输入数据;2)、C++实现布隆过滤器并编译成动态链接库;3)、将数据通过调用动态链接库传输给C++程序模块;4)、计算出字符的哈希值分布到布隆过滤器的二进制向量中,判断数据是否已经存在,如果已存在,则返回已存在,否则返回不存在。本发明对于程序开发人员而言,可以减少使用布隆过滤器的学习成本和时间,通过使用简单的Python接口,不损失程序的执行效率,达到执行速度和开发效率的双赢。本发明将C++的高效执行效率和Python的高效开发效率结合起来,大大地提高程序的开发效率和执行速度。
Description
技术领域
本发明涉及一种布隆过滤器,具体涉及一种以Python为接口C++实现的字符布隆过滤器。
背景技术
布隆过滤器(BloomFilter)是一个很长的二进制向量和一系列随机映射函数,可以用于检索一个元素是否在一个集合中。由于C++是静态编译型语言,可以直接编译成机器码,有较高的执行效率。另外,Python是一种面向对象、解释型的计算机程序设计语言,它具有语法简单、跨平台、公用库多等特点,因此Python也得到了广泛的使用。因此将这2种语言的优势结合来实现字符布隆过滤器,有较高的实用性和易用性。
布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法。一般将过滤器使用在极大规模数据集的场景下,对程序的执行效率有较高的要求。
因此,需要对现有技术进行改进。
发明内容
本发明要解决的技术问题是提供一种高效的以Python为接口C++实现的字符布隆过滤器。
为解决上述技术问题,本发明提供一种以Python为接口C++实现的字符布隆过滤器,包括以下步骤:
1)、输入数据;
2)、C++实现布隆过滤器并编译成动态链接库;
3)、将数据通过调用动态链接库传输给C++程序模块;
4)、计算出字符的哈希值分布到布隆过滤器的二进制向量中,判断数据是否已经存在,如果已存在,则返回已存在,否则返回不存在。
作为对本发明以Python为接口C++实现的字符布隆过滤器的改进:还包括以下步骤:
5)、Python输出步骤4得到的返回结果。
作为对本发明以Python为接口C++实现的字符布隆过滤器的进一步改进:
在步骤1中:
字符通过Python代码接口进入系统,用python实现HTTP接口或者python主动拉取数据的方式输入数据。
作为对本发明以Python为接口C++实现的字符布隆过滤器的进一步改进:
在步骤3中:
Python将拿到的数据通过调用动态链接库传输给C++程序模块。
作为对本发明以Python为接口C++实现的字符布隆过滤器的进一步改进:
在步骤4中:
C++利用8种不同的哈希函数算法,分别计算出字符的不同哈希值,分布到布隆过滤器的二进制向量中,判断数据是否已经存在,如果8个位置的向量状态都表示被占用,则返回已存在,否则返回不存在;返回结果给python。
作为对本发明以Python为接口C++实现的字符布隆过滤器的进一步改进:
哈希函数算法包括SDBMHash,RSHash,JSHash,PJWHash,ELFHash,BKDRHash,DJBHash,APHash。
作为对本发明以Python为接口C++实现的字符布隆过滤器的进一步改进:
如果哈希值对应的向量位置为空,则设置该位置的向量值,二进制状态从0变成1。
本发明以Python为接口C++实现的字符布隆过滤器的技术优势为:
本发明对于程序开发人员而言,可以减少使用布隆过滤器的学习成本和时间,通过使用简单的Python接口,不损失程序的执行效率,达到执行速度和开发效率的双赢。
本发明将C++的高效执行效率和Python的高效开发效率结合起来,大大地提高程序的开发效率和执行速度。
附图说明
下面结合附图对本发明的具体实施方式作进一步详细说明。
图1为布隆过滤器原理图;
图2为本发明以Python为接口C++实现的字符布隆过滤器的结构示意图。
具体实施方式
下面结合具体实施例对本发明进行进一步描述,但本发明的保护范围并不仅限于此。
实施例1、以Python为接口C++实现的字符布隆过滤器,如图1-2所示,包括以下步骤:
1)、字符通过Python代码接口进入系统,用python实现HTTP接口或者python主动拉取数据的方式输入数据,充分利用python开发的便利和快速来适应不同数据源;
2)、C++实现布隆过滤器并编译成动态链接库,字符数据的处理交给C++来实现,充分利用机器的底层性能来加速代码执行效率;
在内存空间申请一块较大的二进制向量存储空间,空间越大布隆过滤器的检测误判率越低;
3)、Python将拿到的数据通过调用动态链接库传输给C++程序模块;
4)、C++利用8种不同的哈希函数(SDBMHash,RSHash,JSHash,PJWHash,ELFHash,BKDRHash,DJBHash,APHash)算法,分别计算出字符的不同哈希值,分布到布隆过滤器的二进制向量中,判断数据是否已经存在,如果8个位置的向量状态都表示被占用,则返回已存在,否则返回不存在;返回结果给python;
如果哈希值对应的向量位置为空,则设置该位置的向量值(二进制状态从0变成1)。如果哈希值对应的向量位置都已被设置值则返回信息说明该字符哈希值重复;
5)、python拿到结果(步骤4得到的返回结果)可以输出返回不同的方向,如HTTP接口,文件,数据库等。
1、以下功能由C++语言实现:
1.1、在内存空间申请一块较大的二进制向量存储空间,空间越大布隆过滤器的检测误判率越低;
1.2、被检测字符进入系统,通过8个不同的哈希函数算法计算出8个不同的哈希值;
1.3、将哈希值映射到布隆过滤器的二进制向量中,如果哈希值对应的向量位置为空,则设置该位置的向量值。如果哈希值对应的向量位置已被设置值则返回信息说明该字符哈希值重复
1.4、计算8个映射结果,如果8个结果都为重复则返回最终结果为该字符已在布隆过滤器中重复出现。
映射结果可以通过哈希值和存储空间大小计算得出,举例其中一个简单算法:哈希值为155,空间大小为10个向量位,通过计算155除以10取余为5,映射结果为向量位第5位置。
2、将以上用C++实现的功能代码通过g++编译器编译成一个libBloomfilter模块(与Python将拿到的数据通过调用动态链接库传输给C++类似),成为一个动态链接库;
3、以下功能由Python语言实现;
3.1、通过数据库协议链接待处理的数据库和保存处理结果的数据库,从源数据库提取需要检测的数据;
3.2、导入libBloomfilter模块;
3.3、将检测字符输入libBloomfilter模块,并从libBloomfilter模块拿到返回结果;
3.4、判断结果是否重复字符,如果是未重复的字符输出到结果数据库;
从libBloomfilter模块返回的一个结果是布尔值,Python程序根据布尔值来判断是输出的字符串是否为重复。
最后,还需要注意的是,以上列举的仅是本发明的若干个具体实施例。显然,本发明不限于以上实施例,还可以有许多变形。本领域的普通技术人员能从本发明公开的内容直接导出或联想到的所有变形,均应认为是本发明的保护范围。
Claims (7)
1.以Python为接口C++实现的字符布隆过滤器,其特征在于:包括以下步骤:
1)、输入数据;
2)、C++实现布隆过滤器并编译成动态链接库;
3)、将数据通过调用动态链接库传输给C++程序模块;
4)、计算出字符的哈希值分布到布隆过滤器的二进制向量中,判断数据是否已经存在,如果已存在,则返回已存在,否则返回不存在。
2.根据权利要求1所述的以Python为接口C++实现的字符布隆过滤器,其特征在于:还包括以下步骤:
5)、Python输出步骤4得到的返回结果。
3.根据权利要求2所述的以Python为接口C++实现的字符布隆过滤器,其特征在于:
在步骤1中:
字符通过Python代码接口进入系统,用python实现HTTP接口或者python主动拉取数据的方式输入数据。
4.根据权利要求3所述的以Python为接口C++实现的字符布隆过滤器,其特征在于:
在步骤3中:
Python将拿到的数据通过调用动态链接库传输给C++程序模块。
5.根据权利要求4所述的以Python为接口C++实现的字符布隆过滤器,其特征在于:
在步骤4中:
C++利用8种不同的哈希函数算法,分别计算出字符的不同哈希值,分布到布隆过滤器的二进制向量中,判断数据是否已经存在,如果8个位置的向量状态都表示被占用,则返回已存在,否则返回不存在;返回结果给python。
6.根据权利要求5所述的以Python为接口C++实现的字符布隆过滤器,其特征在于:
哈希函数算法包括SDBMHash,RSHash,JSHash,PJWHash,ELFHash,BKDRHash,DJBHash,APHash。
7.根据权利要求6所述的以Python为接口C++实现的字符布隆过滤器,其特征在于:
如果哈希值对应的向量位置为空,则设置该位置的向量值,二进制状态从0变成1。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911403363.9A CN111208978B (zh) | 2019-12-31 | 2019-12-31 | 以Python为接口C++实现的字符布隆过滤器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911403363.9A CN111208978B (zh) | 2019-12-31 | 2019-12-31 | 以Python为接口C++实现的字符布隆过滤器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111208978A CN111208978A (zh) | 2020-05-29 |
CN111208978B true CN111208978B (zh) | 2023-05-23 |
Family
ID=70784124
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911403363.9A Active CN111208978B (zh) | 2019-12-31 | 2019-12-31 | 以Python为接口C++实现的字符布隆过滤器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111208978B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103345472A (zh) * | 2013-06-04 | 2013-10-09 | 北京航空航天大学 | 基于有限二叉树布隆过滤器的去冗文件系统及其构建方法 |
CN105554122A (zh) * | 2015-12-18 | 2016-05-04 | 畅捷通信息技术股份有限公司 | 信息更新方法、信息更新装置、终端和服务器 |
WO2016153280A1 (ko) * | 2015-03-24 | 2016-09-29 | 주식회사 한림포스텍 | 무선 전력 전송 및 충전 시스템 |
CN106570025A (zh) * | 2015-10-10 | 2017-04-19 | 北京国双科技有限公司 | 一种数据过滤的方法及装置 |
CN107566111A (zh) * | 2017-10-23 | 2018-01-09 | 郑州云海信息技术有限公司 | 一种基于加密算法的网络节点布隆过滤器构建及实现方法 |
CN108121810A (zh) * | 2017-12-26 | 2018-06-05 | 北京锐安科技有限公司 | 一种数据去重方法、系统、中心服务器及分布式服务器 |
CN109918074A (zh) * | 2017-12-08 | 2019-06-21 | 中标软件有限公司 | 编译链接优化方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170228731A1 (en) * | 2016-02-09 | 2017-08-10 | Fmr Llc | Computationally Efficient Transfer Processing and Auditing Apparatuses, Methods and Systems |
US10248694B2 (en) * | 2015-08-31 | 2019-04-02 | International Business Machines Corporation | Bloom filter utilization for join processing |
-
2019
- 2019-12-31 CN CN201911403363.9A patent/CN111208978B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103345472A (zh) * | 2013-06-04 | 2013-10-09 | 北京航空航天大学 | 基于有限二叉树布隆过滤器的去冗文件系统及其构建方法 |
WO2016153280A1 (ko) * | 2015-03-24 | 2016-09-29 | 주식회사 한림포스텍 | 무선 전력 전송 및 충전 시스템 |
CN106570025A (zh) * | 2015-10-10 | 2017-04-19 | 北京国双科技有限公司 | 一种数据过滤的方法及装置 |
CN105554122A (zh) * | 2015-12-18 | 2016-05-04 | 畅捷通信息技术股份有限公司 | 信息更新方法、信息更新装置、终端和服务器 |
CN107566111A (zh) * | 2017-10-23 | 2018-01-09 | 郑州云海信息技术有限公司 | 一种基于加密算法的网络节点布隆过滤器构建及实现方法 |
CN109918074A (zh) * | 2017-12-08 | 2019-06-21 | 中标软件有限公司 | 编译链接优化方法 |
CN108121810A (zh) * | 2017-12-26 | 2018-06-05 | 北京锐安科技有限公司 | 一种数据去重方法、系统、中心服务器及分布式服务器 |
Non-Patent Citations (2)
Title |
---|
张萍 ; 刘燕兵 ; 于静 ; 谭建龙 ; .HashTrie:一种空间高效的多模式串匹配算法.通信学报.2015,(第10期),全文. * |
王珂 ; .网络安全事件关联分析系统设计――基于布隆过滤器的.淮南职业技术学院学报.2017,(第03期),全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN111208978A (zh) | 2020-05-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108628947B (zh) | 一种业务规则匹配处理方法、装置及处理设备 | |
CN113065656B (zh) | 一种规则引擎配置方法、装置、服务器及可读存储介质 | |
US10120857B2 (en) | Method and system for generating a parser and parsing complex data | |
EP2778914B1 (en) | Method and system for generating a parser and parsing complex data | |
CN109523383B (zh) | 一种智能合约转换系统及方法 | |
EP3757794A1 (en) | Methods, systems, articles of manufacturing and apparatus for code review assistance for dynamically typed languages | |
US11106437B2 (en) | Lookup table optimization for programming languages that target synchronous digital circuits | |
US8601013B2 (en) | Analyzing data using a hierarchical structure | |
US8464230B2 (en) | Methods and systems to implement non-ABI conforming features across unseen interfaces | |
US11775269B2 (en) | Generating a synchronous digital circuit from a source code construct defining a function call | |
US20090063583A1 (en) | Compilation model for processing hierarchical data in stream systems | |
US7739696B2 (en) | Message translation systems and methods | |
CN112148343A (zh) | 规则发布方法、装置及终端设备 | |
CN116266119A (zh) | 生成依赖于使用的代码嵌入的方法、装置和制品 | |
US10241767B2 (en) | Distributed function generation with shared structures | |
CN111208978B (zh) | 以Python为接口C++实现的字符布隆过滤器 | |
US20060070043A1 (en) | System and method for analyzing computer code | |
US9292267B2 (en) | Compiling nested relational algebras with multiple intermediate representations | |
US11429358B2 (en) | Representing asynchronous state machine in intermediate code | |
US20230061087A1 (en) | Dynamic computation offloading to graphics processing unit | |
CN107844327B (zh) | 一种实现上下文一致性的检测系统及检测方法 | |
CN117331541B (zh) | 面向动态图框架和异构芯片的编译与运行方法和装置 | |
US20240134618A1 (en) | Program compilation method and apparatus | |
CN112905181A (zh) | 一种模型编译、运行方法及装置 | |
US9904529B2 (en) | Compact data marshaller generation |
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 |