CN113407573A - 一种实现多索引内存数据并发读写的方法 - Google Patents

一种实现多索引内存数据并发读写的方法 Download PDF

Info

Publication number
CN113407573A
CN113407573A CN202110653345.7A CN202110653345A CN113407573A CN 113407573 A CN113407573 A CN 113407573A CN 202110653345 A CN202110653345 A CN 202110653345A CN 113407573 A CN113407573 A CN 113407573A
Authority
CN
China
Prior art keywords
index
data
value
writing
read
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.)
Pending
Application number
CN202110653345.7A
Other languages
English (en)
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.)
Gf Securities Co ltd
Original Assignee
Gf Securities 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 Gf Securities Co ltd filed Critical Gf Securities Co ltd
Priority to CN202110653345.7A priority Critical patent/CN113407573A/zh
Publication of CN113407573A publication Critical patent/CN113407573A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24532Query optimisation of parallel queries
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Software Systems (AREA)
  • Storage Device Security (AREA)

Abstract

本发明公开了一种实现多索引内存数据并发读写的方法,具体包括以下几个步骤:S1、将一数据结构分为索引区和数据区;S2、采用linux的读写锁API加全局写锁来写数据;S3、读数据,开始不加全局锁;S4、设置索引,设置一个索引函数,根据数据内容计算出一个值当做索引值,这个索引值就是索引表的key;S5、通过索引读取到数据后,对数据做一个校验,保证此数据与索引值匹配。本发明能尽量消除全局锁,在保证并发安全性的前提下提升并发读写性能。

Description

一种实现多索引内存数据并发读写的方法
技术领域
本发明涉及一种实现多索引内存数据并发读写的方法。
背景技术
多索引内存数据,是指可对同一条数据建立多个索引,通过任意一个索引都可以访问到该数据。map是其一对一的特殊情况.对其进行读写需要保证在并发场景下的安全性和正确性;目前多对一的数据结构,存在并发控制的问题,大多数都是通过加一个全局锁去控制并发读写,使得并发读写性能急剧下降。
发明内容
本发明所要解决的技术问题是提供一种实现多索引内存数据并发读写的方法,尽量消除全局锁,在保证并发安全性的前提下提升并发读写性能。
本发明实现多索引内存数据并发读写的方法是通过以下技术方案来实现的:具体包括以下几个步骤:
S1、将一数据结构分为索引区和数据区;
S2、采用linux的读写锁API加全局写锁来写数据;
S3、读数据,开始不加全局锁;
S4、设置索引,设置一个索引函数,根据数据内容计算出一个值当做索引值,这个索引值就是索引表的key;
S5、通过索引读取到数据后,对数据做一个校验,保证此数据与索引值匹配;
作为优选的技术方案,在S1中,索引区包含多个索引,每个索引基于hash表实现,此hash表的key为索引字段值,value为一个数值。
作为优选的技术方案,在S5中,利用S4中设置的索引函数计算出key值,再跟查询数据时传入的索引值做对比,如相同,则表明数据是正确的,否则需要循环读取3次,如还是不正确,此时再加一个全局的读锁,再做一次读取。
本发明的有益效果是:本发明能尽量消除全局锁,在保证并发安全性的前提下提升并发读写性能。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明的总体框架图。
具体实施方式
本说明书中公开的所有特征,或公开的所有方法或过程中的步骤,除了互相排斥的特征和/或步骤以外,均可以以任何方式组合。
本说明书(包括任何附加权利要求、摘要和附图)中公开的任一特征,除非特别叙述,均可被其他等效或具有类似目的的替代特征加以替换。即,除非特别叙述,每个特征只是一系列等效或类似特征中的一个例子而已。
在本发明的描述中,需要理解的是,术语“一端”、“另一端”、“外侧”、“上”、“内侧”、“水平”、“同轴”、“中央”、“端部”、“长度”、“外端”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
此外,在本发明的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
本发明使用的例如“上”、“上方”、“下”、“下方”等表示空间相对位置的术语是出于便于说明的目的来描述如附图中所示的一个单元或特征相对于另一个单元或特征的关系。空间相对位置的术语可以旨在包括设备在使用或工作中除了图中所示方位以外的不同方位。例如,如果将图中的设备翻转,则被描述为位于其他单元或特征“下方”或“之下”的单元将位于其他单元或特征“上方”。因此,示例性术语“下方”可以囊括上方和下方这两种方位。设备可以以其他方式被定向,并相应地解释本文使用的与空间相关的描述语。
在本发明中,除非另有明确的规定和限定,术语“设置”、“套接”、“连接”、“贯穿”、“插接”等术语应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或成一体;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通或两个元件的相互作用关系,除非另有明确的限定。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。
如图1所示,本发明的一种实现多索引内存数据并发读写的方法,具体包括以下几个步骤:
S1、将一数据结构分为索引区和数据区;
S2、采用linux的读写锁API加全局写锁来写数据;限制了并发写,保证了索引等数据结构的安全性。
S3、读数据,开始不加全局锁;其中读数据是支持并发的,并且不会被写阻塞。
S4、设置索引,设置一个索引函数,根据数据内容计算出一个值当做索引值,这个索引值就是索引表的key;以C++语言为例(方法不限于C++),其索引函数原型:
typedef int(*IndexKeyCallFunc)(const void*value,int value_len,char*key,int&key_len)
其中value,value_len是入参,表示数据,key,key_len是出参,表示计算会后的key内容;
例如数据是一个结构体:
Figure BDA0003111754630000031
Figure BDA0003111754630000041
指定索引函数,以id字段为主键索引:
Figure BDA0003111754630000042
这表明可以通过数据内容反向计算出索引值;每个索引都对应一个索引函数。
S5、通过索引读取到数据后,对数据做一个校验,保证此数据与索引值匹配;
本实施例中,在S1中,索引区包含多个索引,每个索引基于hash表实现,此hash表的key为索引字段值,value为一个数值;该数值可以用来对数据区寻址,是数据区中数据的编号;数据区保存的是实际的数据。
本实施例中,在S5中,利用S4中设置的索引函数计算出key值,再跟查询数据时传入的索引值做对比,如相同,则表明数据是正确的,否则需要循环读取3次,如还是不正确,此时再加一个全局的读锁,再做一次读取;此时必定能得到一个正确的结果;在高并发下,有极低概率校验不通过,因此这里可以极大降低加全局锁的概率,大大提升并发读写性能。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何不经过创造性劳动想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求书所限定的保护范围为准。

Claims (3)

1.一种实现多索引内存数据并发读写的方法,其特征在于,具体包括以下几个步骤:
S1、将一数据结构分为索引区和数据区;
S2、采用linux的读写锁API加全局写锁来写数据;
S3、读数据,开始不加全局锁;
S4、设置索引,设置一个索引函数,根据数据内容计算出一个值当做索引值,这个索引值就是索引表的key;
S5、通过索引读取到数据后,对数据做一个校验,保证此数据与索引值匹配。
2.根据权利要求1所述的实现多索引内存数据并发读写的方法,其特征在于:在S1中,索引区包含多个索引,每个索引基于hash表实现,此hash表的key为索引字段值,value为一个数值。
3.根据权利要求1所述的实现多索引内存数据并发读写的方法,其特征在于:在S5中:利用S4中设置的索引函数计算出key值,再跟查询数据时传入的索引值做对比,如相同,则表明数据是正确的,否则需要循环读取3次,如还是不正确,此时再加一个全局的读锁,再做一次读取。
CN202110653345.7A 2021-06-11 2021-06-11 一种实现多索引内存数据并发读写的方法 Pending CN113407573A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110653345.7A CN113407573A (zh) 2021-06-11 2021-06-11 一种实现多索引内存数据并发读写的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110653345.7A CN113407573A (zh) 2021-06-11 2021-06-11 一种实现多索引内存数据并发读写的方法

Publications (1)

Publication Number Publication Date
CN113407573A true CN113407573A (zh) 2021-09-17

Family

ID=77683635

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110653345.7A Pending CN113407573A (zh) 2021-06-11 2021-06-11 一种实现多索引内存数据并发读写的方法

Country Status (1)

Country Link
CN (1) CN113407573A (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103336828A (zh) * 2013-07-05 2013-10-02 深圳市康拓普信息技术有限公司 实时数据库读取及写入方法
US20160283540A1 (en) * 2015-03-27 2016-09-29 International Business Machines Corporation Concurrent reads and inserts into a data structure without latching or waiting by readers
CN107633088A (zh) * 2017-09-29 2018-01-26 深圳市金证科技股份有限公司 一种文件管理方法及装置
CN111459691A (zh) * 2020-04-13 2020-07-28 中国人民银行清算总中心 共享内存的读写方法及装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103336828A (zh) * 2013-07-05 2013-10-02 深圳市康拓普信息技术有限公司 实时数据库读取及写入方法
US20160283540A1 (en) * 2015-03-27 2016-09-29 International Business Machines Corporation Concurrent reads and inserts into a data structure without latching or waiting by readers
CN107633088A (zh) * 2017-09-29 2018-01-26 深圳市金证科技股份有限公司 一种文件管理方法及装置
CN111459691A (zh) * 2020-04-13 2020-07-28 中国人民银行清算总中心 共享内存的读写方法及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
丁桂芝丛书主编: "《Delphi经典编程128例》", 东软电子出版社, pages: 229 - 230 *

Similar Documents

Publication Publication Date Title
US20190121730A1 (en) Unaligned data coalescing
CN111459982A (zh) 一种数据查询方法、装置、终端设备及存储介质
US20140082264A1 (en) Nand flash storage chip checking method and device
US11176110B2 (en) Data updating method and device for a distributed database system
DE102010051813A1 (de) Fehlerkorrekturmechanismen für 8-Bit Speichergeräte
CN109635300A (zh) 数据校验方法及装置
WO2019071968A1 (zh) 薪资计算方法、应用服务器及计算机可读存储介质
CN108628885A (zh) 一种数据同步方法、装置及存储设备
WO2020248499A1 (zh) 基于卷积神经网络的显存处理方法、装置及存储介质
CN113407573A (zh) 一种实现多索引内存数据并发读写的方法
US10089342B2 (en) Main memory database management using page index vectors
US20120317158A1 (en) File system location verification using a sentinel
CN106920576A (zh) 一种检验Nand Flash质量的方法及系统
US20240143495A1 (en) Method and apparatus for updating raid 5 check value, and medium
US11314430B2 (en) Reading data in sub-blocks using data state information
CN109408505A (zh) 一种布隆过滤器的生成方法
CN103631936A (zh) 一种管理共享内存的方法
US20090235365A1 (en) Data access system
CN209845004U (zh) 一种数据安全摆渡设备
US10579470B1 (en) Address failure detection for memory devices having inline storage configurations
TW201712681A (zh) 用於記憶體頻率重設之系統、方法及裝置
CN108334337A (zh) 含自动管理功能的低延迟指令调度器及过滤猜测访问方法
CN111708729B (zh) 一种基于fpga大容量订单薄的缓存方法
DE102021115911A1 (de) Automatische flexible schemadetektion und -migration
Regassa et al. ESH: Design and Implementation of an Optimal Hashing Scheme for Persistent Memory

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