CN112612803B - 基于持久性内存的键值对存储系统及数据并发插入方法 - Google Patents
基于持久性内存的键值对存储系统及数据并发插入方法 Download PDFInfo
- Publication number
- CN112612803B CN112612803B CN202011527095.4A CN202011527095A CN112612803B CN 112612803 B CN112612803 B CN 112612803B CN 202011527095 A CN202011527095 A CN 202011527095A CN 112612803 B CN112612803 B CN 112612803B
- Authority
- CN
- China
- Prior art keywords
- value pair
- data
- key value
- key
- commit
- 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/23—Updating
- G06F16/2308—Concurrency control
-
- 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
- G06F16/2237—Vectors, bitmaps or matrices
-
- 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/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
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)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提出一种基于持久性内存的键值对存储系统,系统中的每个结点包含键值对数组和两个初始化值相同的bitmap,分别表示为commitBM和shadowBM,其中,所述shadowBM用于插入线程获取键值对数组的写入空位;所述commitBM用于键值对写入后更新,保持一致性。本发明还提供了相应的数据并发插入方法,可以解决键值对存储系统多线程模式下使用锁机制带来的性能问题。该方案采用无锁技术CAS(compare and swap)对临界数据进行修改,使用位图(bitmap)来标识有效的键值对,从而实现无锁条件下的并发插入操作,减少线程间的冲突等待开销,提高整个键值对存储系统的性能。
Description
技术领域
本发明涉及计算机科学数据库技术领域,尤其涉及一种基于持久性内存的键值对存储系统数据并发插入方法。
背景技术
新兴的持久性内存(PM:persistent memory)具有低延迟,高容量以及数据掉电不丢失的特性,大大提高了键值对存储系统的性能。为了满足不断增长的业务需求,存储系统往往需要从单线程模式拓展成多线程模式来同时支持多个客户端的请求。针对同一时刻的多个插入线程,现有的解决方法是使用锁机制来实现并发控制。然而,锁机制使用加锁解锁的方式来管理临界资源,一个线程获得临界资源的权限后,其他线程只能阻塞等待其释放锁。当客户端有大量的请求时,使用锁机制会产生很大的线程间的冲突等待开销,从而降低整个存储系统的性能。
发明内容
为了解决存储系统多线程模式下使用锁机制带来的性能问题,本发明提出一种基于持久性内存的键值对存储系统及数据并发插入方法。
本发明采用的技术方案是:
一种基于持久性内存的键值对存储系统,所述键值对存储系统中的每个结点包含键值对数组和两个初始化值相同的bitmap,分别表示为commitBM和shadowBM,其中,所述shadowBM用于插入线程获取键值对写入空位;所述commitBM用于键值对写入后更新,保持一致性。
一种基于上述持久性内存的键值对存储系统的数据并发插入方法,包括以下步骤:
步骤一:插入线程通过索引查找到自己需要写入键值对数据的结点。
步骤二:读取当前结点的shadowBM形成一份拷贝数据,从低位向高位找到拷贝数据中第一个为0的比特位,记录为pos,并且将该位置的值置为1。
步骤三:使用CAS语句更新shadowBM。更新失败则返回步骤二。
步骤四:将键值对数据写入pos对应的键值对数组中,对键值对数据进行持久化。
步骤五:读取当前结点的commitBM形成一份拷贝数据,将拷贝数据中的第pos位的值置为1,使用CAS语句更新commitBM。失败则回到步骤五。
步骤六:对commitBM进行持久化,完成插入。
进一步地,持久化操作通过以下步骤实现:
(1)在数据更新语句之后,添加MFENCE指令,保证数据更新操作执行完成,在CPU的高速缓存行中数据已经更新。所述数据是需要持久化的数据。
(2)添加CLFLUSH指令,将数据从缓存行写入到PM中。
(3)添加MFENCE指令,保证CLFLUSH指令执行完成,数据完成持久化。
本发明的有益效果是:采用无锁技术CAS(compare and swap)对临界数据进行修改,使用位图(bitmap)来标识有效的键值对(key value pairs),从而实现无锁条件下的并发插入操作,减少线程间的冲突等待开销,提高整个存储系统的性能。
附图说明
图1(a)表示常规键值对存储系统的结点结构示意图;
图1(b)表示本发明的基于持久性内存的键值对存储系统的结点结构示意图;
图2代表插入操作流程图,其中(a)为常规锁机制的运行流程;(b)为本发明的数据并发插入方法流程;
图3表示并发插入的一个实例示意图。
具体实施方式
下面结合附图和具体实施例对本发明作进一步说明。
图1(a)表示常规键值对存储系统的结点结构,如图所示,一个结点由两个部分组成,一个部分是bitmap,另一个部分是键值对数组(key value pair array)。bitmap能够标识键值对数组相应位置的键值对是否有效;其中,1代表对应位置的键值对是有效的。图2(a)是对应的常规锁机制的运行流程,如图所示,常规锁机制的运行流程是加锁,查找bitmap中第一个为0的bit位置,对应写入键值对并且持久化,更新bitmap并且持久化,释放锁。其中写入键值对与更新bitmap这两步的顺序不能修改,更改后遇到系统崩溃,可能出现bitmap已经更新,标识相应位置的键值对有效,然而键值对并未写入的情况,导致系统一致性错误。并且锁机制使用加锁解锁的方式来管理临界资源,一个线程获得临界资源的权限后,其他线程只能阻塞等待其释放锁。当客户端有大量的请求时,使用锁机制会产生很大的线程间的冲突等待开销,从而降低整个存储系统的性能。
而本发明提供了一种基于持久性内存的键值对存储系统,如图1(b)所示,所述键值对存储系统的每个结点包含两个初始化值相同的bitmap,分别为commitBM和shadowBM,本发明使用了两个bitmap来实现并发写入控制,其中,使用shadowBM来控制并发插入,使用commitBM来满足一致性。即:所述shadowBM用于插入线程获取键值对写入空位,保证先更新shadowBM,获得键值对写入的空位,然后在对应位置写入键值对,实现多线程并发插入;所述commitBM用于键值对写入后更新,保证先写入键值对kv,然后再更新commitBM,实现数据的一致性。
图2(b)为本发明的数据并发插入方法流程,具体包括以下步骤:
步骤一:插入线程通过索引查找到对应需要写入键值对数据的结点。
步骤二:读取当前结点的shadowBM形成一份拷贝数据,从低位向高位找到拷贝数据中第一个为0的比特位,记录为pos,并且将该位置的值置为1。
步骤三:使用CAS语句更新shadowBM。更新失败则返回步骤二。
步骤四:将键值对数据写入pos对应的键值对数组中,对键值对数据进行持久化。
步骤五:读取当前结点的commitBM形成一份拷贝数据,将拷贝数据中的第pos位的值置为1,使用CAS语句更新commitBM。失败则回到步骤五。
步骤六:对commitBM进行持久化,完成插入。
其中,bitmap的大小最大为64bits,因为CAS语句的操作粒度为64bits。
当意外错误发生导致插入流程终止时(如断电),恢复后需要令shadowBM等于commitBM,保证数据的一致性,系统即可继续运行。
图3表示并发插入的一个实例。在初始阶段有两个插入线程T1,T2想同时向一个结点内写入数据。
在第一个阶段,两个线程都读取shadowBM(SBM)并且找到第一个空位,然后使用CAS更新SBM。由于CAS语句能够保证一个线程更新成功,另一个更新失败。假设T1更新成功,于是T1线程获得了在键值对数组中KV[1]的写入权限。T2第一次更新失败,于是T2重新读取新的SBM,从中找到空位,然后第二次用CAS更新成功,获得KV[2]的写入权限。此时,两个并发写入线程均获得了不同位置的KV写入位置。
在第二个阶段,两个线程再将各自的数据写入并进行持久化。
在第三个阶段,假设两个线程刚好完成了第二个阶段,并且读取commitBM(CBM)然后同时使用CAS语句更新CBM。假设这次T2线程使用CAS更新成功,则T1会重新读取CBM并进行更新直到更新成功。其中,CAS更新成功后线程会执行CBM的持久化操作,然后完成此次插入请求。
需要指出的是,不同线程数据写入可不同步,可分别进行写入并进行持久化。
显然,上述实施例仅仅是为清楚地说明所作的举例,而并非对实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其他不同形式的变化或变动。这里无需也无法把所有的实施方式予以穷举。而由此所引申出的显而易见的变化或变动仍处于本发明的保护范围。
Claims (3)
1.一种基于持久性内存的键值对存储系统,其特征在于,所述键值对存储系统中的每个结点包含键值对数组和两个初始化值相同的bitmap,分别表示为commitBM和shadowBM,其中,所述shadowBM用于插入线程获取键值对数组的写入空位,具体为:
读取当前结点的shadowBM形成一份拷贝数据,从低位向高位找到拷贝数据中第一个为0的比特位,记录为pos,并将该拷贝数据中的第pos位的值置为1再使用CAS语句更新shadowBM,更新成功后将键值对数据写入pos对应的键值对数组中,对键值对数据进行持久化;
所述commitBM用于键值对写入后更新,保持一致性,具体为:键值对写入后,读取当前结点的commitBM形成一份拷贝数据,将拷贝数据中的第pos位的值置为1,使用CAS语句更新commitBM,更新成功后对commitBM进行持久化。
2.一种基于权利要求1所述基于持久性内存的键值对存储系统的数据并发插入方法,其特征在于,包括以下步骤:
步骤一:插入线程通过索引查找到对应需要写入键值对数据的结点;
步骤二:读取当前结点的shadowBM形成一份拷贝数据,从低位向高位找到拷贝数据中第一个为0的比特位,记录为pos,并将该拷贝数据中的第pos位的值置为1;
步骤三:使用CAS语句更新shadowBM;更新失败则返回步骤二;
步骤四:将键值对数据写入pos对应的键值对数组中,对键值对数据进行持久化;
步骤五:读取当前结点的commitBM形成一份拷贝数据,将拷贝数据中的第pos位的值置为1,使用CAS语句更新commitBM;失败则回到步骤五;
步骤六:对commitBM进行持久化,完成插入。
3.根据权利要求2所述的数据并发插入方法,其特征在于,持久化操作通过以下步骤实现:
(1)在数据更新语句之后,添加MFENCE指令,保证数据更新操作执行完成,在CPU的高速缓存行中数据已经更新;所述数据是需要持久化的数据;
(2)添加CLFLUSH指令,将数据从缓存行写入到持久性内存PM中;
(3)添加MFENCE指令,保证CLFLUSH指令执行完成,数据完成持久化。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011527095.4A CN112612803B (zh) | 2020-12-22 | 2020-12-22 | 基于持久性内存的键值对存储系统及数据并发插入方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011527095.4A CN112612803B (zh) | 2020-12-22 | 2020-12-22 | 基于持久性内存的键值对存储系统及数据并发插入方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112612803A CN112612803A (zh) | 2021-04-06 |
CN112612803B true CN112612803B (zh) | 2022-07-12 |
Family
ID=75245140
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011527095.4A Active CN112612803B (zh) | 2020-12-22 | 2020-12-22 | 基于持久性内存的键值对存储系统及数据并发插入方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112612803B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104699527A (zh) * | 2013-12-10 | 2015-06-10 | 杭州海康威视系统技术有限公司 | 一种云存储系统中的临界资源管理方法和装置 |
CN106055646A (zh) * | 2016-05-31 | 2016-10-26 | 国家计算机网络与信息安全管理中心 | 一种并发哈希表的无锁操作方法 |
CN107451070A (zh) * | 2016-06-01 | 2017-12-08 | 腾讯科技(深圳)有限公司 | 一种数据的处理方法和服务器 |
CN109165321A (zh) * | 2018-07-28 | 2019-01-08 | 华中科技大学 | 一种基于非易失内存的一致性哈希表构建方法和系统 |
CN109407979A (zh) * | 2018-09-27 | 2019-03-01 | 清华大学 | 多线程持久性b+树数据结构设计与实现方法 |
CN110069431A (zh) * | 2018-01-24 | 2019-07-30 | 上海交通大学 | 基于RDMA和HTM的弹性Key-Value键值对数据存储方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10713210B2 (en) * | 2015-10-13 | 2020-07-14 | Microsoft Technology Licensing, Llc | Distributed self-directed lock-free RDMA-based B-tree key-value manager |
US10929203B2 (en) * | 2019-01-16 | 2021-02-23 | EMC IP Holding Company LLC | Compare and swap functionality for key-value and object stores |
-
2020
- 2020-12-22 CN CN202011527095.4A patent/CN112612803B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104699527A (zh) * | 2013-12-10 | 2015-06-10 | 杭州海康威视系统技术有限公司 | 一种云存储系统中的临界资源管理方法和装置 |
CN106055646A (zh) * | 2016-05-31 | 2016-10-26 | 国家计算机网络与信息安全管理中心 | 一种并发哈希表的无锁操作方法 |
CN107451070A (zh) * | 2016-06-01 | 2017-12-08 | 腾讯科技(深圳)有限公司 | 一种数据的处理方法和服务器 |
CN110069431A (zh) * | 2018-01-24 | 2019-07-30 | 上海交通大学 | 基于RDMA和HTM的弹性Key-Value键值对数据存储方法 |
CN109165321A (zh) * | 2018-07-28 | 2019-01-08 | 华中科技大学 | 一种基于非易失内存的一致性哈希表构建方法和系统 |
CN109407979A (zh) * | 2018-09-27 | 2019-03-01 | 清华大学 | 多线程持久性b+树数据结构设计与实现方法 |
Non-Patent Citations (2)
Title |
---|
Fast Concurrent Lock-Free Binary Search Trees;Natarajan.A & Mittal.N;《ACM SIGPLAN Notices》;20140831;全文 * |
并发非阻塞自组织链表算法;陈春光等;《计算机工程》;20130815;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN112612803A (zh) | 2021-04-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11386065B2 (en) | Database concurrency control through hash-bucket latching | |
US5455944A (en) | Method for managing logging and locking of page free space information in a transaction processing system | |
US8473950B2 (en) | Parallel nested transactions | |
US9454560B2 (en) | Cache-conscious concurrency control scheme for database systems | |
US9052947B2 (en) | Unified optimistic and pessimistic concurrency control for a software transactional memory (STM) system | |
US20040034673A1 (en) | Obstruction-free mechanism for atomic update of multiple non-contiguous locations in shared memory | |
US7548919B2 (en) | Computer program product for conducting a lock free read | |
CN110727675B (zh) | 一种链表的处理方法及装置 | |
US20100076940A1 (en) | Method for providing maximal concurrency in a tree structure | |
US11204813B2 (en) | System and method for multidimensional search with a resource pool in a computing environment | |
US7958149B2 (en) | Computer program and product for append mode insertion of rows into tables in database management systems | |
KR20080031039A (ko) | 공유 메모리 위치로의 메모리 액세스를 관리하는 방법 및컴퓨터 판독가능 매체 | |
US6952707B1 (en) | Efficient sequence number generation in a multi-system data-sharing environment | |
CN110515705B (zh) | 可扩展的持久性事务内存及其工作方法 | |
CN111316255B (zh) | 数据存储系统以及用于提供数据存储系统的方法 | |
Zhang et al. | NBTree: a Lock-free PM-friendly Persistent B+-Tree for eADR-enabled PM Systems | |
CN109165321B (zh) | 一种基于非易失内存的一致性哈希表构建方法和系统 | |
EP3404537A1 (en) | Processing node, computer system and transaction conflict detection method | |
CN113220490A (zh) | 异步写回持久化内存的事务持久化方法及系统 | |
CN112612803B (zh) | 基于持久性内存的键值对存储系统及数据并发插入方法 | |
CN111611246B (zh) | 一种基于持久性存储器优化b+树索引性能的方法和系统 | |
CN111373389B (zh) | 数据存储系统以及用于提供数据存储系统的方法 | |
US20100198794A1 (en) | Method and device for data recovery using bit logging | |
CN111506458B (zh) | 一种提升f2fs事务性能的方法、模块及系统 | |
CN115640238A (zh) | 针对持久化内存的可靠内存映射i/o实现方法及系统 |
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 |