本发明专利技术提出一种基于持久性内存的键值对存储系统,系统中的每个结点包含键值对数组和两个初始化值相同的bitmap,分别表示为commitBM和shadowBM,其中,所述shadowBM用于插入线程获取键值对数组的写入空位;所述commitBM用于键值对写入后更新,保持一致性。本发明专利技术还提供了相应的数据并发插入方法,可以解决键值对存储系统多线程模式下使用锁机制带来的性能问题。该方案采用无锁技术CAS(compare and swap)对临界数据进行修改,使用位图(bitmap)来标识有效的键值对,从而实现无锁条件下的并发插入操作,减少线程间的冲突等待开销,提高整个键值对存储系统的性能。
【技术实现步骤摘要】
基于持久性内存的键值对存储系统及数据并发插入方法
本专利技术涉及计算机科学数据库
,尤其涉及一种基于持久性内存的键值对存储系统数据并发插入方法。
技术介绍
新兴的持久性内存(PM:persistentmemory)具有低延迟,高容量以及数据掉电不丢失的特性,大大提高了键值对存储系统的性能。为了满足不断增长的业务需求,存储系统往往需要从单线程模式拓展成多线程模式来同时支持多个客户端的请求。针对同一时刻的多个插入线程,现有的解决方法是使用锁机制来实现并发控制。然而,锁机制使用加锁解锁的方式来管理临界资源,一个线程获得临界资源的权限后,其他线程只能阻塞等待其释放锁。当客户端有大量的请求时,使用锁机制会产生很大的线程间的冲突等待开销,从而降低整个存储系统的性能。
技术实现思路
为了解决存储系统多线程模式下使用锁机制带来的性能问题,本专利技术提出一种基于持久性内存的键值对存储系统及数据并发插入方法。本专利技术采用的技术方案是:一种基于持久性内存的键值对存储系统,所述键值对存储系统中的每个结点包含键值对数组和两个初始化值相同的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(compareandswap)对临界数据进行修改,使用位图(bitmap)来标识有效的键值对(keyvaluepairs),从而实现无锁条件下的并发插入操作,减少线程间的冲突等待开销,提高整个存储系统的性能。附图说明图1(a)表示常规键值对存储系统的结点结构示意图;图1(b)表示本专利技术的基于持久性内存的键值对存储系统的结点结构示意图;图2代表插入操作流程图,其中(a)为常规锁机制的运行流程;(b)为本专利技术的数据并发插入方法流程;图3表示并发插入的一个实例示意图。具体实施方式下面结合附图和具体实施例对本专利技术作进一步说明。图1(a)表示常规键值对存储系统的结点结构,如图所示,一个结点由两个部分组成,一个部分是bitmap,另一个部分是键值对数组(keyvaluepairarray)。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的持久化操作,然后完成此次插入请求。需要指出的是,不同线程数据写入可不同步,可分别进行写入并本文档来自技高网...
【技术保护点】
1.一种基于持久性内存的键值对存储系统,其特征在于,所述键值对存储系统中的每个结点包含键值对数组和两个初始化值相同的bitmap,分别表示为commitBM和shadowBM,其中,所述shadowBM用于插入线程获取键值对数组的写入空位;所述commitBM用于键值对写入后更新,保持一致性。/n
【技术特征摘要】
1.一种基于持久性内存的键值对存储系统,其特征在于,所述键值对存储系统中的每个结点包含键值对数组和两个初始化值相同的bitmap,分别表示为commitBM和shadowBM,其中,所述shadowBM用于插入线程获取键值对数组的写入空位;所述commitBM用于键值对写入后更新,保持一致性。
2.一种基于权利要求1所述基于持久性内存的键值对存储系统的数据并发插入方法,其特征在于,包括以下步骤:
步骤一:插入线程通过索引查找到对应需要写入键值对数据的结点。
步骤二:读取当前结点的shadowBM形成一份拷贝数据,从低位向高位找到拷贝数据中第一个为0的比特位,记录为pos,并且将该位置的值置为1。
步骤三:使用CAS语句更新shadowBM。更新失败则返回...
【专利技术属性】
技术研发人员:何水兵,李振鑫,
申请(专利权)人:浙江大学,
类型:发明
国别省市:浙江;33
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。