CN111208978A - 以Python为接口C++实现的字符布隆过滤器 - Google Patents

以Python为接口C++实现的字符布隆过滤器 Download PDF

Info

Publication number
CN111208978A
CN111208978A CN201911403363.9A CN201911403363A CN111208978A CN 111208978 A CN111208978 A CN 111208978A CN 201911403363 A CN201911403363 A CN 201911403363A CN 111208978 A CN111208978 A CN 111208978A
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.)
Granted
Application number
CN201911403363.9A
Other languages
English (en)
Other versions
CN111208978B (zh
Inventor
葛汉斌
范渊
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
DBAPPSecurity Co Ltd
Original Assignee
DBAPPSecurity Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by DBAPPSecurity Co Ltd filed Critical DBAPPSecurity Co Ltd
Priority to CN201911403363.9A priority Critical patent/CN111208978B/zh
Publication of CN111208978A publication Critical patent/CN111208978A/zh
Application granted granted Critical
Publication of CN111208978B publication Critical patent/CN111208978B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design
    • G06F8/24Object-oriented
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9014Indexing; Data structures therefor; Storage structures hash tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic 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++实现的字符布隆过滤器
技术领域
本发明涉及一种布隆过滤器,具体涉及一种以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。
CN201911403363.9A 2019-12-31 2019-12-31 以Python为接口C++实现的字符布隆过滤器 Active CN111208978B (zh)

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 true CN111208978A (zh) 2020-05-29
CN111208978B 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 (9)

* Cited by examiner, † Cited by third party
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 주식회사 한림포스텍 무선 전력 전송 및 충전 시스템
US20170060967A1 (en) * 2015-08-31 2017-03-02 International Business Machines Corporation Bloom filter utilization for join processing
CN106570025A (zh) * 2015-10-10 2017-04-19 北京国双科技有限公司 一种数据过滤的方法及装置
US20170228731A1 (en) * 2016-02-09 2017-08-10 Fmr Llc Computationally Efficient Transfer Processing and Auditing Apparatuses, Methods and Systems
CN107566111A (zh) * 2017-10-23 2018-01-09 郑州云海信息技术有限公司 一种基于加密算法的网络节点布隆过滤器构建及实现方法
CN108121810A (zh) * 2017-12-26 2018-06-05 北京锐安科技有限公司 一种数据去重方法、系统、中心服务器及分布式服务器
CN109918074A (zh) * 2017-12-08 2019-06-21 中标软件有限公司 编译链接优化方法

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103345472A (zh) * 2013-06-04 2013-10-09 北京航空航天大学 基于有限二叉树布隆过滤器的去冗文件系统及其构建方法
WO2016153280A1 (ko) * 2015-03-24 2016-09-29 주식회사 한림포스텍 무선 전력 전송 및 충전 시스템
US20170060967A1 (en) * 2015-08-31 2017-03-02 International Business Machines Corporation Bloom filter utilization for join processing
CN106570025A (zh) * 2015-10-10 2017-04-19 北京国双科技有限公司 一种数据过滤的方法及装置
CN105554122A (zh) * 2015-12-18 2016-05-04 畅捷通信息技术股份有限公司 信息更新方法、信息更新装置、终端和服务器
US20170228731A1 (en) * 2016-02-09 2017-08-10 Fmr Llc Computationally Efficient Transfer Processing and Auditing Apparatuses, Methods and Systems
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)

* Cited by examiner, † Cited by third party
Title
张萍;刘燕兵;于静;谭建龙;: "HashTrie:一种空间高效的多模式串匹配算法" *
王珂;: "网络安全事件关联分析系统设计――基于布隆过滤器的" *

Also Published As

Publication number Publication date
CN111208978B (zh) 2023-05-23

Similar Documents

Publication Publication Date Title
ES2635437T3 (es) Método y sistema para generar un analizador y análisis de los datos complejos
US10120857B2 (en) Method and system for generating a parser and parsing complex data
KR101606622B1 (ko) Fsm을 구현하기 위한 특수 목적 요소의 이용
US7739696B2 (en) Message translation systems and methods
US8464230B2 (en) Methods and systems to implement non-ABI conforming features across unseen interfaces
US20140082009A1 (en) Analyzing data using a hierarchical structure
US20090063515A1 (en) Optimization model for processing hierarchical data in stream systems
US20090063583A1 (en) Compilation model for processing hierarchical data in stream systems
CN111310221A (zh) 持久层数据的加解密方法、装置、设备及存储介质
US10620916B2 (en) Read-only communication operator
CN111208978B (zh) 以Python为接口C++实现的字符布隆过滤器
CN110413283B (zh) 基于编译器前端的混淆方法、存储介质及终端设备
US7506068B2 (en) Method, apparatus and system for transforming, converting and processing messages between multiple systems
US7769896B2 (en) Method, apparatus and system for dispatching messages within a system
US11429358B2 (en) Representing asynchronous state machine in intermediate code
CN113849781A (zh) Go语言源代码混淆方法、系统、终端及存储介质
CN107844327B (zh) 一种实现上下文一致性的检测系统及检测方法
US10169015B2 (en) Compact data marshaller generation
US20240134618A1 (en) Program compilation method and apparatus
KR102671575B1 (ko) 교차 아키텍처 바이너리에 대한 이진 비교 방법
CN112463214B (zh) 数据处理方法及装置、计算机可读存储介质以及电子设备
CN112905181A (zh) 一种模型编译、运行方法及装置
CN116069937A (zh) 基于神经网络的智能合约分类方法、装置和计算机设备
CN116225403A (zh) 领域特定语言数据处理方法和装置、计算设备、存储介质
CN117667183A (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