CN113407573A - 一种实现多索引内存数据并发读写的方法 - Google Patents
一种实现多索引内存数据并发读写的方法 Download PDFInfo
- 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
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/2453—Query optimisation
- G06F16/24532—Query optimisation of parallel queries
-
- 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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing 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内容;
例如数据是一个结构体:
指定索引函数,以id字段为主键索引:
这表明可以通过数据内容反向计算出索引值;每个索引都对应一个索引函数。
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次,如还是不正确,此时再加一个全局的读锁,再做一次读取。
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)
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 | 中国人民银行清算总中心 | 共享内存的读写方法及装置 |
-
2021
- 2021-06-11 CN CN202110653345.7A patent/CN113407573A/zh active Pending
Patent Citations (4)
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)
Title |
---|
丁桂芝丛书主编: "《Delphi经典编程128例》", 东软电子出版社, pages: 229 - 230 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10853238B2 (en) | Unaligned data coalescing | |
US8443155B2 (en) | Lock-free concurrent object dictionary | |
US20170364301A1 (en) | Data deduplication | |
US10210196B2 (en) | Data storage device having internal hardware filter, data storage method and data storage system | |
CN111459982A (zh) | 一种数据查询方法、装置、终端设备及存储介质 | |
US20140082264A1 (en) | Nand flash storage chip checking method and device | |
EP3438845A1 (en) | Data updating method and device for a distributed database system | |
CN103488727A (zh) | 基于周期对数的二维时序数据存储和查询方法 | |
WO2019071968A1 (zh) | 薪资计算方法、应用服务器及计算机可读存储介质 | |
CN102004787A (zh) | 基于办公软件插件的多应用场景表单合并的方法 | |
US10089342B2 (en) | Main memory database management using page index vectors | |
CN112068781B (zh) | 一种存储器的数据读写方法及相关设备 | |
CN113407573A (zh) | 一种实现多索引内存数据并发读写的方法 | |
US8661070B2 (en) | File system location verification using a sentinel | |
US20240143495A1 (en) | Method and apparatus for updating raid 5 check value, and medium | |
CN112513824A (zh) | 一种内存交织方法及装置 | |
DE102021115911A1 (de) | Automatische flexible schemadetektion und -migration | |
CN109408505A (zh) | 一种布隆过滤器的生成方法 | |
CN103631936A (zh) | 一种管理共享内存的方法 | |
US20200133495A1 (en) | Method, electronic device and computer program product for reading data | |
CN114356912A (zh) | 一种向数据库写入数据的方法及计算机设备 | |
US20090235365A1 (en) | Data access system | |
CN209845004U (zh) | 一种数据安全摆渡设备 | |
US10579470B1 (en) | Address failure detection for memory devices having inline storage configurations | |
CN107515828B (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 |