CN117493388A - 一种基于键值存储系统的数据管理方法及其相关设备 - Google Patents

一种基于键值存储系统的数据管理方法及其相关设备 Download PDF

Info

Publication number
CN117493388A
CN117493388A CN202211336267.9A CN202211336267A CN117493388A CN 117493388 A CN117493388 A CN 117493388A CN 202211336267 A CN202211336267 A CN 202211336267A CN 117493388 A CN117493388 A CN 117493388A
Authority
CN
China
Prior art keywords
keys
transaction
storage
key
user
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
CN202211336267.9A
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.)
Huawei Cloud Computing Technologies Co Ltd
Original Assignee
Huawei Cloud Computing Technologies 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 Huawei Cloud Computing Technologies Co Ltd filed Critical Huawei Cloud Computing Technologies Co Ltd
Priority to PCT/CN2023/109096 priority Critical patent/WO2024022329A1/zh
Publication of CN117493388A publication Critical patent/CN117493388A/zh
Pending legal-status Critical Current

Links

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/2455Query execution
    • G06F16/24552Database cache management
    • 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/21Design, administration or maintenance of databases
    • 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
    • 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/2282Tablespace storage structures; Management thereof
    • 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/2455Query execution
    • 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/46Multiprogramming arrangements
    • 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/46Multiprogramming arrangements
    • G06F9/466Transaction processing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • Computational Linguistics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请公开一种基于键值存储系统的数据管理方法及基于文件系统的元数据管理方法,可充分利用键值存储系统所在的服务器的CPU资源以及内存资源,且可有效地发挥键值存储系统的并发能力。本申请的键值存储系统包含缓存以及多个存储实例,每个存储实例的用户数据表存储有键值对,该方法包括:键值存储系统可获取用户的事务中所需读取的多个键,并从多个键所在的存储实例读取多个键的值。系统还可获取事务中所需写入的多个键的新值,若这多个键位于不同的存储实例,系统可先完成前台操作,以提前通知用户多个键的新值已写入成功,然后在后台操作中,向多个键所在的若干个存储实例并发写入多个键的新值,从而完成用户的事务。

Description

一种基于键值存储系统的数据管理方法及其相关设备
本申请要求于2022年07月25日提交中国专利局、申请号为202210877102.6、发明名称为“文件系统元数据管理系统”的中国专利申请的优先权,其全部内容通过引用结合在本申请中。
技术领域
本申请实施例涉及计算机技术领域,尤其涉及一种基于键值存储系统的数据管理方法及其相关设备。
背景技术
键值(key-value,KV)存储系统凭借着其具备高性能高扩展、可伸缩性强以及接口简单易用等等优点,被广泛应用在计算机中,键值存储系统可通过键值对的形式来统筹管理用户数据,例如,用户的文件的数据,用户的文件的元数据等等。
目前,当用户存在添加、读取、写入和删除键值对的需求时,可调用键值存储系统来实现这些针对键值对的操作。具体地,键值存储系统在用户的调用下,可创建用户的事务,该事务可包含用户对多个键值对的操作。由于该系统包含存储有键值对的数据库实例,故该系统可在该实例中,完成对这多个键值对的操作,从而完成该事务。
然而,该系统仅提供了单个实例,无法充分利用该系统所在服务器的中央处理器(entral processing unit,CPU)资源以及内存资源,且限制了该系统的并发能力。
发明内容
本申请实施例提供了一种基于键值存储系统的数据管理方法及其相关设备,可充分利用键值存储系统所在的服务器的CPU资源以及内存资源,且可有效地发挥键值存储系统的并发能力。
本申请实施例的第一方面提供了一种基于键值存储系统的数据管理方法,该键值存储系统包含缓存以及多个存储实例,每个存储实例的用户数据表存储有键值对,该方法包括:
某个用户可调用键值存储系统,以使得键值存储系统可为该用户创建专属的事务,并为该用户的事务分配唯一的时间戳。键值存储系统为该用户创建该用户的事务后,该用户还可调用键值存储系统,以使得键值存储系统获取该用户在其事务中所需读取的多个键。
确定这多个键后,键值存储系统可先在缓存中,对这多个键添加该用户的事务的前台锁。对这多个键添加前台锁后,键值存储系统可检测缓存是否存储有这多个键的值,则存在以下两种情况:
若缓存存储有这多个键的值,键值存储系统可成功从缓存中读取到这多个键的值,并将这多个键的值返回给用户。
若缓存未存储有这多个键的值,键值存储系统则无法从缓存中读取到这多个键的值,故键值存储系统可先在多个存储实例中,确定这多个键所在的一个或若干个存储实例。接着,键值存储系统从这些存储实例的用户数据表中,读取这多个键的值。然后,键值存储系统可将这多个键的值返回给用户,并向缓存写入这多个键的值。
向用户返回这多个键的值后,键值存储系统可对这多个键解除用户的事务的前台锁。至此,该用户已成功读取到这多个键的值,故该用户可调用键值存储系统,以使得键值存储系统结束该用户的事务。
从上述方法可以看出:键值存储系统在创建用户的事务后,可获取事务中所需读取的多个键,并对多个键添加事务的前台锁。若缓存中存储有多个键的值,键值存储系统则从缓存中读取多个键的值,并向用户提供多个键的值,若缓存中未存储有多个键的值,则从多个存储实例中确定多个键所在的存储实例,从多个键所在的存储实例的用户数据表中,读取多个键的值,向用户提供多个键的值,并向缓存写入多个键的值。然后,键值存储系统可对多个键解除前台锁,并结束用户的事务。基于前述过程可知,键值存储系统包含多个存储实例,可充分利用键值存储系统所在的服务器的CPU资源以及内存资源,且当用户需要读取多个键的值时,键值存储系统在多个键所在的存储实例中,既可逐个读取这多个键的值,也可以并发读取这多个键的值,以返回给用户使用,这样可以有效地发挥键值存储系统的并发能力。
在一种可能实现的方式中,对多个键解除前台锁之前,该方法还包括:获取事务中所需写入的多个键的新值,多个键的新值由用户对多个键的值进行修改得到;若多个键存储于同一个存储实例中,则对多个键添加事务的后台锁,将多个键的新值写入存储实例的用户数据表以及缓存,对多个键解除事务的后台锁;对多个键解除前台锁之后,该方法还包括:通知用户已成功写入多个键的新值。前述实现方式中,用户得到这多个键的值后,可对这多个键的值进行修改,从而得到这多个键的新值。那么,该用户还可调用键值存储系统,以使得键值存储系统获取该用户在其事务中所需写入的这多个键的新值。若这多个键存储于同一个存储实例中,键值存储系统可对多个键添加该用户的事务的后台锁。接着,键值存储系统可将多个键的新值写入该存储实例的用户数据表以及缓存中。然后,键值存储系统可对多个键解除该用户的事务的后台锁。随后,键值存储系统可对多个键解除该用户的事务的前台锁,再通知该用户已成功写入多个键的新值。至此,该用户已成功读取到这多个键的值并写入这多个键的新值,故该用户可调用键值存储系统,以使得键值存储系统结束该用户的事务。
在一种可能实现的方式中,每个存储实例还包含事务状态表,对多个键解除前台锁之前,该方法还包括:获取事务中所需写入的多个键的新值,多个键的新值由用户对多个键的值进行修改得到;若多个键存储于若干个存储实例中,则在多个键中选择目标键,并将多个键的新值写入目标键所在的存储实例的事务状态表以及缓存;对多个键解除前台锁之后,该方法还包括:通知用户已成功写入多个键的新值;对多个键添加事务的后台锁,将多个键的新值并发写入若干个存储实例的用户数据表,对多个键解除事务的后台锁,并在目标键所在的存储实例的事务状态表中,删除多个键的新值。前述实现方式中,用户得到这多个键的值后,可对这多个键的值进行修改,从而得到这多个键的新值。那么,该用户还可调用键值存储系统,以使得键值存储系统获取该用户在其事务中所需写入的这多个键的新值。若这多个键存储于若干个存储实例中,键值存储系统可先在多个键中选择目标键。接着,键值存储系统将这多个键的新值写入目标键所在的存储实例的事务状态表以及缓存中。然后,键值存储系统可对多个键解除前台锁,再通知该用户已成功写入多个键的新值,至此前台操作结束。随后,键值存储系统可对多个键添加事务的后台锁。紧接着,键值存储系统可将多个键的新值并发写入这若干个存储实例的用户数据表中。之后,键值存储系统可对多个键解除事务的后台锁。最后,在目标键所在的存储实例的事务状态表中,删除多个键的新值,至此,后台操作结束。至此,该用户已成功读取到这多个键的值并写入这多个键的新值,故该用户可调用键值存储系统,以使得键值存储系统结束该用户的事务。
在一种可能实现的方式中,从多个存储实例中确定多个键所在的存储实例包括:确定多个键对应的存储实例编号,并基于多个键对应的存储实例编号,确定多个键所在的存储实例。前述实现方式中,键值存储系统为多个存储实例中的每个存储实例设置有唯一的存储实例编号,且维护有存储实例编号与键之间的数学关系。那么,基于该数学关系,键值存储系统可确定多个键对应的存储实例编号,并基于多个键对应的存储实例编号,确定多个键所在的存储实例。
在一种可能实现的方式中,键值存储系统设置于文件系统中,在多个键中,每个键包含文件或目录的元数据,元数据包含文件或目录的索引编号,确定多个键对应的存储实例编号包括:将多个键包含的索引编号除以多个存储实例的数量所得到的余数,作为多个键对应的存储实例编号。前述实现方式中,当键值存储系统需要确定多个键所在的存储实例时,对于这多个键中的任意一个键,键值存储系统可将该键包含目录或文件的索引编号除以存储实例的总数量所得到的余数,作为该键对应的存储实例编号。那么,在确定该键对应的存储实例编号后,可基于该编号来找到该键所在的存储实例。
在一种可能实现的方式中,对多个键添加或解除前台锁的操作在缓存中实现,且对多个键添加或解除后台锁的操作在缓存中实现。
在一种可能实现的方式中,缓存还存储有以下至少一项:与多个键相关联的时间戳,与事务相关联的时间戳以及事务的状态。
本申请实施例的第二方面提供了一种基于键值存储系统的数据管理装置,键值存储系统包含缓存以及多个存储实例,每个存储实例的用户数据表存储有键值对,该装置包括:创建模块,用于创建用户的事务;第一获取模块,用于获取事务中所需读取的多个键,并对多个键添加事务的前台锁;第一读取模块,用于若缓存中存储有多个键的值,则从缓存中读取多个键的值,并向用户提供多个键的值;第二读取模块,用于若缓存中未存储有多个键的值,则从多个存储实例中确定多个键所在的存储实例,并从多个键所在的存储实例的用户数据表中,读取多个键的值,向用户提供多个键的值,并向缓存写入多个键的值;处理模块,用于对多个键解除前台锁;结束模块,用于结束事务。
在一种可能实现的方式中,该装置还包括:第二获取模块,用于获取事务中所需写入的多个键的新值,多个键的新值由用户对多个键的值进行修改得到;第一写入模块,用于若多个键存储于同一个存储实例中,则对多个键添加事务的后台锁,将多个键的新值写入存储实例的用户数据表以及缓存,对多个键解除事务的后台锁;通知模块,用于通知用户已成功写入多个键的新值。
在一种可能实现的方式中,每个存储实例还包含事务状态表,该装置还包括:第二获取模块,用于获取事务中所需写入的多个键的新值,多个键的新值由用户对多个键的值进行修改得到;第二写入模块,用于若多个键存储于若干个存储实例中,则在多个键中选择目标键,将多个键的新值写入目标键所在的存储实例的事务状态表以及缓存;通知模块,用于通知用户已成功写入多个键的新值;第三写入模块,用于对多个键添加事务的后台锁,将多个键的新值并发写入若干个存储实例的用户数据表,对多个键解除事务的后台锁,并在目标键所在的存储实例的事务状态表中,删除多个键的新值。
在一种可能实现的方式中,第二读取模块,用于确定多个键对应的存储实例编号,并基于多个键对应的存储实例编号,确定多个键所在的存储实例。
在一种可能实现的方式中,键值存储系统设置于文件系统中,在多个键中,每个键包含文件或目录的元数据,元数据包含文件或目录的索引编号,第二读取模块,用于将多个键包含的索引编号除以多个存储实例的数量所得到的余数,作为多个键对应的存储实例编号。
在一种可能实现的方式中,对多个键添加或解除前台锁的操作在缓存中实现,且对多个键添加或解除后台锁的操作在缓存中实现。
在一种可能实现的方式中,缓存还存储有以下至少一项:与多个键相关联的时间戳,与事务相关联的时间戳以及事务的状态。
本申请实施例的第三方面提供了一种基于键值存储系统的数据管理装置,该装置包括存储器和处理器;存储器存储有代码,处理器被配置为执行所述代码,当代码被执行时,该装置执行如第一方面或第一方面中任意一种可能实现的方式所述的方法。
本申请实施例的第四方面提供了一种计算机存储介质,计算机存储介质存储有一个或多个指令,指令在由一个或多个计算机执行时使得一个或多个计算机实施如第一方面或第一方面中任意一种可能实现的方式所述的方法。
本申请实施例的第五方面提供了一种计算机程序产品,计算机程序产品存储有指令,指令在由计算机执行时,使得计算机实施如第一方面或第一方面中任意一种可能实现的方式所述的方法。
本申请实施例中,键值存储系统在创建用户的事务后,可获取事务中所需读取的多个键,并对多个键添加事务的前台锁。若缓存中存储有多个键的值,键值存储系统则从缓存中读取多个键的值,并向用户提供多个键的值,若缓存中未存储有多个键的值,则从多个存储实例中确定多个键所在的存储实例,从多个键所在的存储实例的用户数据表中,读取多个键的值,向用户提供多个键的值,并向缓存写入多个键的值。然后,键值存储系统可对多个键解除前台锁,并结束用户的事务。基于前述过程可知,键值存储系统包含多个存储实例,可充分利用键值存储系统所在的服务器的CPU资源以及内存资源,且当用户需要读取多个键的值时,键值存储系统在多个键所在的存储实例中,既可逐个读取这多个键的值,也可以并发读取这多个键的值,以返回给用户使用,这样可以有效地发挥键值存储系统的并发能力。
附图说明
图1为本申请实施例提供的键值存储系统的一个结构示意图;
图2为本申请实施例提供的文件系统的一个结构示意图;
图3为本申请实施例提供的基于键值存储系统的数据管理方法的一个流程示意图;
图4为本申请实施例提供的基于键值存储系统的数据管理方法的一个应用例示意图;
图5为本申请实施例提供的基于键值存储系统的数据管理方法的另一应用例示意图;
图6为本申请实施例提供的基于键值存储系统的数据管理装置的一个结构示意图;
图7为本申请实施例提供的基于键值存储系统的数据管理装置的另一结构示意图。
具体实施方式
本申请实施例提供了一种基于键值存储系统的数据管理方法及其相关设备,可充分利用键值存储系统所在的服务器的CPU资源以及内存资源,且可有效地发挥键值存储系统的并发能力。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的术语在适当情况下可以互换,这仅仅是描述本申请的实施例中对相同属性的对象在描述时所采用的区分方式。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,以便包含一系列单元的过程、方法、系统、产品或设备不必限于那些单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它单元。
键值存储系统凭借着其具备高性能高扩展、可伸缩性强以及接口简单易用等等优点,被广泛应用在计算机中,键值存储系统可通过键值对的形式来统筹管理用户数据,例如,用户的文件的数据,用户的文件的元数据等等。
目前,当用户存在添加、读取、写入和删除键值对的需求时,可调用键值存储系统来实现这些针对键值对的操作。具体地,键值存储系统在用户的调用下,可创建用户的事务,该事务可包含用户对多个键值对的操作。由于该系统包含存储有键值对的数据库实例,故该系统可在该实例中,完成对这多个键值对的操作(例如,添加、读取、写入和删除中的一种或多种),从而完成该事务。
然而,该系统仅提供了单个实例,以基于单个实例来管理键值对,也就是管理用户数据。但是,单个实例只能管理一个盘,无法充分利用该系统所在服务器的CPU资源以及内存资源,导致数据管理的整体性能受限。而且,在访问实例中的键值对时,也只能发挥单个实例的性能,无法将该系统最大限度地并发起来。
为了解决上述问题,本申请实施例提供了一种新的键值存储系统,该键值存储系统也可以称为支持单机内跨多存储实例的事务键值存储系统(miniature elasticDB,MEDB)。图1为本申请实施例提供的键值存储系统的一个结构示意图,如图1所示,该系统包括:事务接口层、事务处理层、时间戳分配模块、数据分区模块、数据缓存模块(即前述的缓存)以及多个存储实例。其中,在这多个存储实例中,一个存储实例包含一个事务状态表以及多个用户数据表。下文对该系统所涉及的多个概念进行介绍:
事务接口层,可对该系统的外部提供事务接口,包含创建事务接口(tnx_begin())、结束事务接口(tnx_end()),写事务接口(tnx_put()),读事务接口(tnx_get_for_update()),提交事务接口(tnx_commit())以及回滚事务接口(tnx_rollback())等等。这些事务接口可以被用户调用,以使得该系统基于这些事务接口来完成用户的事务。例如,当用户调用创建事务接口时,该系统可为用户创建用户的事务。又如,当用户调用读事务接口时,该系统可获取用户的事务中所需读取(值)的某个键或某些键(即用户在其事务中增加了读取某个键或某些键的操作)。又如,当用户调用写事务接口时,该系统可获取用户的事务中所需写入的某个键或某些键的新值(即用户在其事务中增加了写入某个键或某些键的新值的操作)。又如,当用户调用提交事务接口,该系统可将某个键或某些键的新值,写入到存储实例中。又如,当用户调用结束事务接口时,该系统可以结束用户的事务,至此,用户的事务已完成。
事务处理层,负责处理用户的事务逻辑。
时间戳分配模块,负责维护全局时间戳的分配,例如,该模块可为用户的事务分配一个专属的时间戳,以事务的时间戳(即前述与事务相关联的时间戳)来作为用户的事务的唯一标识。
数据分区模块,负责维护键与存储实例编号之间的映射关系,该映射关系可以理解为数学关系,该模块可基于该数学关系来确定各个键对应的存储实例编号,进而确定各个键所在的存储实例。
数据缓存模块,负责维护用户的事务所涉及的一些具体信息。具体地,数据缓存模块可划分为两部分,一部分为键缓存(key cache),另一部分为事务缓存(dtx cache)。键缓存存储有键的条目(key_entry),键的条目以键为索引,内容包括事务的前台锁(rw_lock),与键相关联的时间戳(committable_ts以及commit_ts,即键的最新值可提交的时间戳以及键的最新值已提交的时间戳),键的值(committable_value)。事务缓存存储有事务的条目(dtx_entry),事务的条目以事务的时间戳(ts)为索引,内容包含事务所涉及的键值对,事务的状态以及键值对的加锁信息。
存储实例具有持久化存储键值对的能力,支持实力内多个键值对写入的原子性。存储实例中设置有事务状态表,该表可存储有事务的键值对,其键为事务的时间戳,其值包含事务所涉及的所有键值对以及事务的状态。存储实例中还设置有用户数据表,该表可存储包含用户的键值对,其键为用户的user_key,其值为用户的user_value以及写入该值对应的事务的时间戳,其中,user_key以及user_value均可以由用户的数据来构建。
值得注意的是,在上述介绍中,用户可直接调用本申请实施例提供的键值存储系统。进一步地,本申请实施例提供的键值存储系统可应用在文件系统中,如图2所示(图2为本申请实施例提供的文件系统的一个结构示意图),文件系统包含元数据管理模块以及键值存储系统。在这种情况下,不再需要由用户来直接调用键值存储系统,用户可直接向文件系统发送针对文件或目录的操作(例如,添加某个目录、向目录中添加某个文件、在目录中删除某个文件、修改该目录中某个文件、获取该目录多个文件的基本信息、获取该目录中某个文件的文件属性或内容等等),文件系统中的元数据管理模块可将用户的操作(也可以称为用户的请求)解析为用户的事务,并基于该事务来调用键值存储系统中的各个事务接口,从而完成用户的事务。可见,在这种情况下,用户是间接地调用了键值存储系统。
当键值存储系统应用在文件系统中时,存储实例中的用户数据表可包含dentry表以及inode表等等。其中,dentry表所存储的键值对,其键为父目录(父文件夹)的索引编号(pionde)以及父目录下文件的名称或子目录的名称(name),其值为父目录下文件的索引编号或子目录的索引编号(ionde)。inode表所存储的键值对,其键为文件的索引编号或子目录的索引编号(ionde),其值为文件的属性信息或子目录的属性信息。
需要说明的是,上面所提及的父目录、子目录以及文件,均为用户创建的目录以及文件,故父目录、子目录以及文件的索引编号、名称和属性信息均可理解为目录和文件的元数据,属于用户的数据。
为了进一步了解本申请实施例提供的键值存储系统的工作流程,下文结合图3对该工作流程做进一步的介绍,图3为本申请实施例提供的基于键值存储系统的数据管理方法的一个流程示意图,如图3所示,该方法包括:
301、创建用户的事务。
本实施例中,某个用户可调用键值存储系统的创建事务接口,以使得键值存储系统可为该用户创建专属的事务,并为该用户的事务分配唯一的时间戳。
例如,以key1,key2,key3的读改写操作为例,用户需要先读key1,key2,key3,再写入<key1,value1>,<key2,value2>,<key3,value3>,该事务包括:步骤1:用户调用tnx_begin(),键值存储系统可为用户创建事务,并为用户的事务分配时间戳ts1。
302、获取事务中所需读取的多个键,并对多个键添加事务的前台锁。
303、检测缓存中是否存储有多个键的值。
304、若缓存中存储有多个键的值,则从缓存中读取多个键的值,并向用户提供多个键的值。
305、若缓存中未存储有多个键的值,则从多个存储实例中确定多个键所在的存储实例,从多个键所在的存储实例的用户数据表中,读取多个键的值,向用户提供多个键的值,并向缓存写入多个键的值。
键值存储系统为该用户创建该用户的事务后,该用户还可调用键值存储系统的读取事务接口,以使得键值存储系统获取该用户在其事务中所需读取的多个键。
确定这多个键后,键值存储系统可先在缓存的这多个键的条目中,对这多个键添加该用户的事务的前台锁,那么,若键值存储系统此后还需处理其余用户的事务,且其余用户的事务也需读取这多个键,键值存储系统则无法完成其余用户的事务的读取需求,其余用户的事务将被暂缓处理(其余用户的事务的时间戳通常大于该用户的事务的时间戳),直至对这多个键解除该用户的事务的前台锁,这样可以避免不同事务之间的冲突。
对这多个键添加前台锁后,键值存储系统可尝试从缓存的这多个键的条目中,读取这多个键的值,则存在以下两种情况:
(1)若缓存的这多个键的条目中存储有这多个键的值,键值存储系统可成功从缓存中读取到这多个键的值,并将这多个键的值返回给用户。
(2)若缓存的这多个键的条目中未存储有这多个键的值,键值存储系统则无法从缓存中读取到这多个键的值,故键值存储系统可先在多个存储实例中,确定这多个键所在的一个或若干个存储实例。接着,键值存储系统从这些存储实例的用户数据表中,读取这多个键的值。然后,键值存储系统可将这多个键的值返回给用户,并向缓存的这多个键的条目中,写入这多个键的值。
具体地,键值存储系统可通过以下方式来确定多个键所在的存储实例:键值存储系统为多个存储实例中的每个存储实例设置有唯一的存储实例编号,且维护有存储实例编号与键之间的数学关系。那么,基于该数学关系,键值存储系统可确定多个键对应的存储实例编号,并基于多个键对应的存储实例编号,确定多个键所在的存储实例。
需要说明的是,该用户可以只调用一次读取事务接口,就使得键值存储系统一次性确定该用户的事务中所需读取的多个键,这样键值存储系统可以在缓存或存储实例中并发读取这多个键的值,并将这多个键的值同时返回给该用户。该用户也可以多次调用读取事务接口,一次调用可使得键值存储系统确定该用户的事务中所需读取的多个键中的一个键,在这种情况下,键值存储系统可以在缓存或存储实例中依次读取(即有先后顺序地逐个读取)这多个键的值,并依次将这多个键的值返回(即有先后顺序地逐个返回)给用户。
依旧如上述例子,步骤2:用户调用tnx_get_for_update(key1),以使得键值存储系统可读取key1的value,并返回给用户,该过程包括:
(2.1)从缓存的key cache中获取key1的条目,即key1_entry。
(2.2)在key1_entry中,对key1添加前台锁rw_lock。
(2.3)生成用户的事务的条目,即dtx_entry。dtx_entry以事务的时间戳ts1为索引,在dtx_entry记录key1的加锁信息,并加入到缓存。
(2.4)从key1_entry中读取committable_value,若committable_value为非空,则读取该结果(即key1的value)返回给用户,若committable_value为空,则执行(2.5)-(2.8)。
(2.5)通过数据分区模块计算出key1所对应的存储实例编号shard1。
(2.6)在存储实例shard1的用户数据表中,读取key1的value以及key1的value被写入的时间ts。
(2.7)将读取到的key1的value+ts解析,令key1_entry中的committable_value为key1的value,并令committable_ts为ts。
(2.8)返回读取结果key1的value。
步骤3:用户再次调用tnx_get_for_update(key2),以使得系统读取key2的value并返回给用户,该过程可参考前述(2.1)-(2.8),此处不再赘述。
步骤4:用户又一次调用tnx_get_for_update(key3),以使得系统读取key3的value并返回给用户,该过程可参考前述(2.1)-(2.8),此处不再赘述。如此一来,用户则成功读取到key1的value、key2的value、key3的value。
306、获取事务中所需写入的多个键的新值,多个键的新值由用户对多个键的值进行修改得到。
307、检测多个键是否存储于同一个存储实例中。
308、若多个键存储于同一个存储实例中,则对多个键添加事务的后台锁,将多个键的新值写入存储实例的用户数据表以及缓存,对多个键解除事务的后台锁,对多个键解除前台锁,并通知用户已成功写入多个键的新值。
309、若多个键存储于若干个存储实例中,则在多个键中选择目标键,将多个键的新值写入目标键所在的存储实例的事务状态表以及缓存,对多个键解除前台锁,通知用户已成功写入多个键的新值,对多个键添加事务的后台锁,将多个键的新值并发写入若干个存储实例的用户数据表,对多个键解除事务的后台锁,并在目标键所在的存储实例的事务状态表中,删除多个键的新值。
310、结束用户的事务。
用户得到这多个键的值后,可对这多个键的值进行修改,从而得到这多个键的新值。那么,该用户还可调用键值存储系统的写事务接口,以使得键值存储系统获取该用户在其事务中所需写入的这多个键的新值。
确定这多个键的新值后,键值存储系统可判断这多个键是否存储在同一个存储实例中,则存在以下两种情况:
(1)若这多个键存储于同一个存储实例中,键值存储系统可先在缓存的这多个键的条目中,对多个键添加该用户的事务的后台锁。接着,键值存储系统可将多个键的新值写入该存储实例的用户数据表以及缓存的这多个键的条目中。然后,键值存储系统可在缓存的这多个键的条目中,对多个键解除(删除)该用户的事务的后台锁。随后,键值存储系统可在缓存的这多个键的条目中,对多个键解除该用户的事务的前台锁,再通知该用户已成功写入多个键的新值。
需要说明的是,该用户的事务的后台锁的作用在于,若键值存储系统此后还需处理其余用户的事务,且其余用户的事务也需写入这多个键的新值(与该用户的事务所需写入的这多个键的新值通常是不同的值),键值存储系统则无法完成其余用户的事务的写入需求,导致其余用户的事务将被暂缓处理,直至对这多个键解除该用户的事务的后台锁,这样也可以避免不同事务之间的冲突。
(2)若这多个键存储于若干个存储实例(即不同的存储实例)中,键值存储系统可先在多个键中选择目标键(也可以称为主键)。接着,键值存储系统将这多个键的新值写入目标键所在的存储实例的事务状态表以及缓存的这多个键的条目中。然后,键值存储系统可在缓存的这多个键的条目中,对多个键解除前台锁,再通知该用户已成功写入多个键的新值,至此前台操作结束。随后,键值存储系统可在缓存的这多个键的条目中,对多个键添加事务的后台锁。紧接着,键值存储系统可将多个键的新值并发写入这若干个存储实例的用户数据表中。之后,键值存储系统可在缓存的这多个键的条目中,对多个键解除事务的后台锁。最后,在目标键所在的存储实例的事务状态表中,删除多个键的新值,至此,后台操作结束。
需要说明的是,由于这多个键分别存储在若干个存储实例中,并发写入这多个键的新值所需的时长较大,故键值存储系统可先在前台操作中,将这多个键的新值暂时存储在主键所在的存储实例的事务状态表中,并提前通知该用户已写入成功,可以减少该用户的感知时延。通知完成后,键值存储系统可执行后台操作,若存储实例所在的服务器由于各种原因出现断电,导致这多个键的新值没成功写入这若干个存储实例中,在服务器恢复通电后,键值存储系统可从主键所在的存储实例的事务状态表中,再次拿到这多个键的新值,并将其并发写入若干个存储实例中,从而顺利完成该用户的事务。
至此,该用户已成功读取到这多个键的值并写入这多个键的新值,故该用户可调用键值存储系统的结束事务接口,以使得键值存储系统结束该用户的事务。
依旧如上述例子,步骤5:用户将key1的value修改为value1,将key2的value修改为value2,将key3的value修改为value3。
步骤6:用户调用tnx_put(key1,value1),系统将key1,value1写入到用户的事务内的临时缓存,也就相当于系统确定需要写入key1的新值value1。
步骤7:用户再次调用tnx_put(key2,value2),系统确定需要写入key2的新值value2。
步骤8:用户又一次调用tnx_put(key3,value3),系统确定需要写入key3的新值value3。
步骤9:用户调用tnx_commit(),系统可确定需要提交用户的事务,系统的提交过程如下:
(9.1)基于用户的事务的时间戳ts1,从dtx cache中获取dtx_entry。
(9.2)从dtx_entry中获取key1,key2,key3的加锁信息,由于前面读取的时候已经加过前台锁,故无需再对key1,key2,key3添加前台锁。
(9.3)从key1,key2,key3中随机选取一个作为primary_key。
(9.4)通过数据分区模块计算出primary_key对应的存储实例编号primary_shard。
(9.5)将<key1,value1>,<key2,value2>,<key3,value3>内容写入到dtx_entry中,并在dtx_entry中,将用户的事务的状态改为“active”。
(9.6)若key1,key2,key3属于同一个存储实例,假设为存储实例shard1,则执行以下步骤:
(9.6.1)分别在key1_entry、key2_entry以及key3_entry中,对key1,key2,key3加后台锁commit_lock。
(9.6.2)写入<key1,value1>,<key2,value2>,<key3,value3>到存储实例shard1的用户数据表。
(9.6.3)令key1_entry中的committable_value为value1,并令committable_ts为ts1。同样地,令key2_entry中的committable_value为value2,并令committable_ts为ts1。同样地,令key3_entry中的committable_value为value3,并令committable_ts为ts1。
(9.6.4)分别在key1_entry、key2_entry以及key3_entry中,解除(删除)key1,key2,key3的后台锁commit_lock。
(9.6.5)从dtx cache中,删除dtx_entry。
(9.6.6)分别在key1_entry、key2_entry以及key3_entry中,基础key1,key2,key3的前台锁rw_lock。
(9.6.7)向用户返回执行结果,即通知用户<key1,value1>,<key2,value2>,<key3,value3>已写入成功。
(9.7)若key1,key2,key3位于不同的存储实例,则执行以下步骤:
(9.7.1)将dtx_entry中的<key1,value1>,<key2,value2>,<key3,value3>写入到存储实例primary_shard的事务状态表中。
(9.7.2)在dtx_entry中,将用户的事务的状态修改为“committable”。
(9.7.3)令key1_entry中的committable_value为value1,并令committable_ts为ts1。同样地,令key2_entry中的committable_value为value2,并令committable_ts为ts1。同样地,令key3_entry中的committable_value为value3,并令committable_ts为ts1。
(9.7.4)分别在key1_entry、key2_entry以及key3_entry中,基础key1,key2,key3的前台锁rw_lock。
(9.7.5)返回执行结果,并触发后台提交流程。
(9.8)执行后台提交流程:
(9.8.1)从dtx cache中获取dtx_entry。
(9.8.2)对key1,key2,key3按照存储实例分类,其中key1、key2位于存储实例shard1,key3位于存储实例shard2。
(9.8.3)对存储实例shard1内的key1,key2和存储实例shard2内的key3并发执行以下步骤:
(9.8.3.1)分别在key1_entry、key2_entry以及key3_entry中,对key1,key2,key3加后台锁commit_lock。
(9.8.3.2)若key1_entry中的commit_ts大于ts1(说明有其余事务修改了key1的值),则跳过改key1,若小于,则写入<key1,value1>到存储实例shard1的用户数据表中。同样地,若key2_entry中的commit_ts大于ts1,则跳过改key2,若小于,则写入<key2,value2>到存储实例shard1的用户数据表中。同样地,若key3_entry中的commit_ts大于ts1,则跳过改key3,若小于,则写入<key3,value3>到存储实例shard2的用户数据表中。
(9.8.3.3)分别在key1_entry、key2_entry以及key3_entry中,令commit_ts为ts1。
(9.8.3.4)分别在key1_entry、key2_entry以及key3_entry中,解除key1,key2,key3的后台锁commit_lock。
(9.8.4)针对存储实例Shard1和存储实例shard2都执行完成之后,删除存储实例primary_shard的事务状态表中的记录。
(9.8.5)从dtx cache中,删除dtx_entry。
步骤10:用户调用tnx_end(),系统可结束用户的事务。
本申请实施例中,键值存储系统在创建用户的事务后,可获取事务中所需读取的多个键,并对多个键添加事务的前台锁。若缓存中存储有多个键的值,键值存储系统则从缓存中读取多个键的值,并向用户提供多个键的值,若缓存中未存储有多个键的值,则从多个存储实例中确定多个键所在的存储实例,从多个键所在的存储实例的用户数据表中,读取多个键的值,向用户提供多个键的值,并向缓存写入多个键的值。然后,键值存储系统可对多个键解除前台锁,并结束用户的事务。基于前述过程可知,键值存储系统包含多个存储实例,可充分利用键值存储系统所在的服务器的CPU资源以及内存资源,且当用户需要读取多个键的值时,键值存储系统在多个键所在的存储实例中,既可逐个读取这多个键的值,也可以并发读取这多个键的值,以返回给用户使用,这样可以有效地发挥键值存储系统的并发能力。
进一步地,当用户需要向键值存储系统写入这多个键的新值时,无论这多个键位于同一个存储实例还是不同的存储实例,键值存储系统均可将这多个键的新值并发写入这些存储实例中,可进一步有效地发挥键值存储系统的并发能力,而且可保证跨存储实例进行键值对操作的事务性,使事务的开销极小化,提升键值存储系统的吞吐率。
更进一步地,为了理解本申请实施例提供的键值存储系统的工作流程,下文结合两个具体应用例进行介绍。图4为本申请实施例提供的基于键值存储系统的数据管理方法的一个应用例示意图,图5为本申请实施例提供的基于键值存储系统的数据管理方法的另一应用例示意图。如图4所示,该应用例为单存储实例的事务流程,该流程包括:
1.键值存储系统通过事务接口层,确定用户的事务中需写入的K1、K2以及K3;
2.在缓存中对K1、K2以及K3加锁;
3.在缓存中生成dtx_entry,令用户的事务的状态为active;
4.检测到K1、K2以及K3位于存储实例1。
5.写入KV数据(即需写入的K1、K2以及K3的新值)到存储实例1中的cf_data表。
6.删除dtx_entry。
7.更新committable_ts和committable_value。
8.在缓存中对K1、K2以及K3解锁。
9.返回执行结果。
如图5所示,该应用例为多单存储实例的事务流程,该流程包括:
1.键值存储系统通过事务接口层,确定用户的事务中需写入的K1、K2以及K3;
2.在缓存中对K1、K2以及K3加锁;
3.在缓存中生成dtx_entry,令用户的事务的状态为active;
4.检测到K1、K2以及K3位于不同的存储实例,在K1、K2以及K3选取leader,设leader位于存储实例1。
5.写入dtx_entry(包含KV数据,即需写入的K1、K2以及K3的新值)到存储实例1中的cf_dtx表。
6.在dtx_entry中,令用户的事务的状态为committable。
7.更新committable_ts和committable_value。
8.在缓存中对K1、K2以及K3解锁。
9.返回执行结果。
10.系统后台触发commit操作,从dtx_entry取出K1、K2以及K3,并按存储实例分类。
11.将KV数据写到对应存储实例的cf_data表。
12.删除存储实例1中的cf_dtx表中的dtx_entry。
更进一步地,若键值存储系统应用在文件系统中,存储实例中的用户数据表为dentry表以及inode表,这两个表中存储的键值对的键,要么包含目录(包含父目录和子目录)的索引编号,要么包含文件的索引编号,这些索引编号均是文件或目录在创建的时候,由文件系统来为文件或目录分配的。具体地,文件系统可通过以下公式来确定文件或目录的索引编号:inode=shard_ID+ID*N,其中,inode为文件或目录的索引编号,shard_ID为文件或目录对应的存储实例编号(即文件或目录所在的存储实例的编号),ID为在文件或目录所在的存储实例中,文件或目录的排序,N为存储实例的数量。
基于以上公式,当键值存储系统需要确定多个键所在的存储实例时,对于这多个键中的任意一个键,键值存储系统可将该键包含目录或文件的索引编号除以存储实例的总数量所得到的余数,作为该键对应的存储实例编号。那么,在确定该键对应的存储实例编号后,可基于该编号来找到该键所在的存储实例。
下面结合三个例子对分配索引编号的过程进行介绍,在这三个例子,假设存在4个存储实例,分别存储实例shard0、存储实例shard1、存储实例shard2、存储实例shard3:
例子1:设用户需创建文件/a.txt,父目录/的inode为1,Create操作输入1+a.txt,由于1在存储实例shard1上,因此,在存储实例shard1上的inode生成器上获取当前的counter值,假设为5,以此作为a.txt在存储实例shard1中的排序。那么,a.txt文件的inode为1+5*4=21。因此,本次Create操作需要更新的key包括:dentry表的1+a.txt、inode表的1和inode表的21,这3个key都属于shard1,故该事务属于单存储实例的事务。
例子2:设用户需创建目录/b/,父目录的/的inode为1,Create操作输入1+b/,由于是创建目录,因此,从4个存储实例中选取counter最小的存储实例,假设是存储实例shard0,其counter值为2,则目录b/的inode为0+2*4=8。因此本次create操作需要更新的key包括:dentry表的1+b/、inode表的1和inode表的8,其中2个key属于shard1,1个key属于shard0,故该事务属于多存储实例的事务。
例子3:设用户需创建文件/a.txt,/b/c.txt,/d/e.c,/f/g.h,其中/的inode为1,/b/的inode为5,/d/的inode为7,/f/的inode为11。在聚合生成事务时,会将属于同一个存储实例的create操作聚合成一个事务,因此会将/a.txt,/b/c.txt两个操作聚合成一个事务tx1,而/d/e.c,/f/g.h两个操作聚合成另一个事务tx2。Tx1和tx2均为单存储实例的事务。
以上是对本申请实施例提供的基于键值存储系统的数据管理方法所进行的详细说明,以下将对本申请实施例提供的基于键值存储系统的数据管理装置进行介绍。图6为本申请实施例提供的基于键值存储系统的数据管理装置的一个结构示意图,键值存储系统包含缓存以及多个存储实例,每个存储实例的用户数据表存储有键值对,如图6所示,该装置包括:
创建模块601,用于创建用户的事务;例如,创建模块601可用于实现图3所示实施例中的步骤301。
第一获取模块602,用于获取事务中所需读取的多个键,并对多个键添加事务的前台锁;例如,第一获取模块602可用于实现图3所示实施例中的步骤302。
第一读取模块603,用于若缓存中存储有多个键的值,则从缓存中读取多个键的值,并向用户提供多个键的值;例如,第一读取模块603可用于实现图3所示实施例中的步骤304。
第二读取模块604,用于若缓存中未存储有多个键的值,则从多个存储实例中确定多个键所在的存储实例,并从多个键所在的存储实例的用户数据表中,读取多个键的值,向用户提供多个键的值,并向缓存写入多个键的值;例如,第二读取模块604可用于实现图3所示实施例中的步骤305。
处理模块605,用于对多个键解除前台锁;
结束模块606,用于结束事务。例如,结束模块606可用于实现图3所示实施例中的步骤310。
本申请实施例中,键值存储系统在创建用户的事务后,可获取事务中所需读取的多个键,并对多个键添加事务的前台锁。若缓存中存储有多个键的值,键值存储系统则从缓存中读取多个键的值,并向用户提供多个键的值,若缓存中未存储有多个键的值,则从多个存储实例中确定多个键所在的存储实例,从多个键所在的存储实例的用户数据表中,读取多个键的值,向用户提供多个键的值,并向缓存写入多个键的值。然后,键值存储系统可对多个键解除前台锁,并结束用户的事务。基于前述过程可知,键值存储系统包含多个存储实例,可充分利用键值存储系统所在的服务器的CPU资源以及内存资源,且当用户需要读取多个键的值时,键值存储系统在多个键所在的存储实例中,既可逐个读取这多个键的值,也可以并发读取这多个键的值,以返回给用户使用,这样可以有效地发挥键值存储系统的并发能力。
在一种可能实现的方式中,该装置还包括:第二获取模块,用于获取事务中所需写入的多个键的新值,多个键的新值由用户对多个键的值进行修改得到;第一写入模块,用于若多个键存储于同一个存储实例中,则对多个键添加事务的后台锁,将多个键的新值写入存储实例的用户数据表以及缓存,对多个键解除事务的后台锁;通知模块,用于通知用户已成功写入多个键的新值。
在一种可能实现的方式中,每个存储实例还包含事务状态表,该装置还包括:第二获取模块,用于获取事务中所需写入的多个键的新值,多个键的新值由用户对多个键的值进行修改得到;第二写入模块,用于若多个键存储于若干个存储实例中,则在多个键中选择目标键,将多个键的新值写入目标键所在的存储实例的事务状态表以及缓存;通知模块,用于通知用户已成功写入多个键的新值;第三写入模块,用于对多个键添加事务的后台锁,将多个键的新值并发写入若干个存储实例的用户数据表,对多个键解除事务的后台锁,并在目标键所在的存储实例的事务状态表中,删除多个键的新值。
在一种可能实现的方式中,第二读取模块,用于确定多个键对应的存储实例编号,并基于多个键对应的存储实例编号,确定多个键所在的存储实例。
在一种可能实现的方式中,键值存储系统设置于文件系统中,在多个键中,每个键包含文件或目录的元数据,元数据包含文件或目录的索引编号,第二读取模块,用于将多个键包含的索引编号除以多个存储实例的数量所得到的余数,作为多个键对应的存储实例编号。
在一种可能实现的方式中,对多个键添加或解除前台锁的操作在缓存中实现,且对多个键添加或解除后台锁的操作在缓存中实现。
在一种可能实现的方式中,缓存还存储有以下至少一项:与多个键相关联的时间戳,与事务相关联的时间戳以及事务的状态。
需要说明的是,上述装置各模块/单元之间的信息交互、执行过程等内容,由于与本申请方法实施例基于同一构思,其带来的技术效果与本申请方法实施例相同,具体内容可参考本申请实施例前述所示的方法实施例中的叙述,此处不再赘述。
图7为本申请实施例提供的基于键值存储系统的数据管理装置的另一结构示意图。如图7所示,基于键值存储系统的数据管理装置的一个实施例可以包括一个或一个以上中央处理器701,存储器702,输入输出接口703,有线或无线网络接口704,电源705。
存储器702可以是短暂存储或持久存储。更进一步地,中央处理器701可以配置为与存储器702通信,在基于键值存储系统的数据管理装置上执行存储器702中的一系列指令操作。
本实施例中,中央处理器701可以执行前述图3所示实施例中的方法步骤,具体此处不再赘述。
本实施例中,中央处理器701中的具体功能模块划分可以与前述图6中的各个模块的划分方式类似,此处不再赘述。
本申请实施例还涉及一种计算机存储介质,该计算机可读存储介质中存储有用于进行信号处理的程序,当其在计算机上运行时,使得计算机执行如图3所示实施例中的步骤。
本申请实施例还涉及一种计算机程序产品,该计算机程序产品存储有指令,该指令在由计算机执行时使得计算机执行如图3所示实施例中的步骤。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read-only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。

Claims (17)

1.一种基于键值存储系统的数据管理方法,其特征在于,所述键值存储系统包含缓存以及多个存储实例,每个存储实例的用户数据表存储有键值对,所述方法包括:
创建用户的事务;
获取所述事务中所需读取的多个键,并对所述多个键添加所述事务的前台锁;
若所述缓存中存储有所述多个键的值,则从所述缓存中读取所述多个键的值,并向所述用户提供所述多个键的值;
若所述缓存中未存储有所述多个键的值,则从所述多个存储实例中确定所述多个键所在的存储实例,从所述多个键所在的存储实例的用户数据表中,读取所述多个键的值,向所述用户提供所述多个键的值,并向所述缓存写入所述多个键的值;
对所述多个键解除所述前台锁;
结束所述事务。
2.根据权利要求1所述的方法,其特征在于,所述对所述多个键解除所述前台锁之前,所述方法还包括:
获取所述事务中所需写入的所述多个键的新值,所述多个键的新值由所述用户对所述多个键的值进行修改得到;
若所述多个键存储于同一个存储实例中,则对所述多个键添加所述事务的后台锁,将所述多个键的新值写入所述存储实例的用户数据表以及所述缓存,对所述多个键解除所述事务的后台锁;
所述对所述多个键解除所述前台锁之后,所述方法还包括:
通知所述用户已成功写入所述多个键的新值。
3.根据权利要求1所述的方法,其特征在于,每个存储实例还包含事务状态表,所述对所述多个键解除所述前台锁之前,所述方法还包括:
获取所述事务中所需写入的所述多个键的新值,所述多个键的新值由所述用户对所述多个键的值进行修改得到;
若所述多个键存储于若干个存储实例中,则在所述多个键中选择目标键,并将所述多个键的新值写入所述目标键所在的存储实例的事务状态表以及所述缓存;
所述对所述多个键解除所述前台锁之后,所述方法还包括:
通知所述用户已成功写入所述多个键的新值;
对所述多个键添加所述事务的后台锁,将所述多个键的新值并发写入所述若干个存储实例的用户数据表,对所述多个键解除所述事务的后台锁,并在所述目标键所在的存储实例的事务状态表中,删除所述多个键的新值。
4.根据权利要求1至3任意一项所述的方法,其特征在于,所述从所述多个存储实例中确定所述多个键所在的存储实例包括:
确定所述多个键对应的存储实例编号,并基于所述多个键对应的存储实例编号,确定所述多个键所在的存储实例。
5.根据权利要求4所述的方法,其特征在于,所述键值存储系统设置于文件系统中,在所述多个键中,每个键包含文件或目录的元数据,所述元数据包含文件或目录的索引编号,所述确定所述多个键对应的存储实例编号包括:
将所述多个键包含的索引编号除以所述多个存储实例的数量所得到的余数,作为所述多个键对应的存储实例编号。
6.根据权利要求2或3所述的方法,其特征在于,对所述多个键添加或解除所述前台锁的操作在所述缓存中实现,且对所述多个键添加或解除所述后台锁的操作在所述缓存中实现。
7.根据权利要求1至6任意一项所述的方法,其特征在于,所述缓存还存储有以下至少一项:与所述多个键相关联的时间戳,与所述事务相关联的时间戳以及所述事务的状态。
8.一种基于键值存储系统的数据管理装置,其特征在于,所述键值存储系统包含缓存以及多个存储实例,每个存储实例的用户数据表存储有键值对,所述装置包括:
创建模块,用于创建用户的事务;
第一获取模块,用于获取所述事务中所需读取的多个键,并对所述多个键添加所述事务的前台锁;
第一读取模块,用于若所述缓存中存储有所述多个键的值,则从所述缓存中读取所述多个键的值,并向所述用户提供所述多个键的值;
第二读取模块,用于若所述缓存中未存储有所述多个键的值,则从所述多个存储实例中确定所述多个键所在的存储实例,并从所述多个键所在的存储实例的用户数据表中,读取所述多个键的值,向所述用户提供所述多个键的值,并向所述缓存写入所述多个键的值;
处理模块,用于对所述多个键解除所述前台锁;
结束模块,用于结束所述事务。
9.根据权利要求8所述的装置,其特征在于,所述装置还包括:
第二获取模块,用于获取所述事务中所需写入的所述多个键的新值,所述多个键的新值由所述用户对所述多个键的值进行修改得到;
第一写入模块,用于若所述多个键存储于同一个存储实例中,则对所述多个键添加所述事务的后台锁,将所述多个键的新值写入所述存储实例的用户数据表以及所述缓存,对所述多个键解除所述事务的后台锁;
通知模块,用于通知所述用户已成功写入所述多个键的新值。
10.根据权利要求8所述的装置,其特征在于,每个存储实例还包含事务状态表,所述装置还包括:
第二获取模块,用于获取所述事务中所需写入的所述多个键的新值,所述多个键的新值由所述用户对所述多个键的值进行修改得到;
第二写入模块,用于若所述多个键存储于若干个存储实例中,则在所述多个键中选择目标键,将所述多个键的新值写入所述目标键所在的存储实例的事务状态表以及所述缓存;
通知模块,用于通知所述用户已成功写入所述多个键的新值;
第三写入模块,用于对所述多个键添加所述事务的后台锁,将所述多个键的新值并发写入所述若干个存储实例的用户数据表,对所述多个键解除所述事务的后台锁,并在所述目标键所在的存储实例的事务状态表中,删除所述多个键的新值。
11.根据权利要求8至10任意一项所述的装置,其特征在于,所述第二读取模块,用于确定所述多个键对应的存储实例编号,并基于所述多个键对应的存储实例编号,确定所述多个键所在的存储实例。
12.根据权利要求11所述的装置,其特征在于,所述键值存储系统设置于文件系统中,在所述多个键中,每个键包含文件或目录的元数据,所述元数据包含文件或目录的索引编号,所述第二读取模块,用于将所述多个键包含的索引编号除以所述多个存储实例的数量所得到的余数,作为所述多个键对应的存储实例编号。
13.根据权利要求9或10所述的装置,其特征在于,对所述多个键添加或解除所述前台锁的操作在所述缓存中实现,且对所述多个键添加或解除所述后台锁的操作在所述缓存中实现。
14.根据权利要求8至13任意一项所述的装置,其特征在于,所述缓存还存储有以下至少一项:与所述多个键相关联的时间戳,与所述事务相关联的时间戳以及所述事务的状态。
15.一种基于键值存储系统的数据管理装置,其特征在于,所述装置包括存储器和处理器;所述存储器存储有代码,所述处理器被配置为执行所述代码,当所述代码被执行时,所述装置执行如权利要求1至7任意一项所述的方法。
16.一种计算机存储介质,其特征在于,所述计算机存储介质存储有一个或多个指令,所述指令在由一个或多个计算机执行时使得所述一个或多个计算机实施权利要求1至7任一所述的方法。
17.一种计算机程序产品,其特征在于,所述计算机程序产品存储有指令,所述指令在由计算机执行时,使得所述计算机实施权利要求1至7任意一项所述的方法。
CN202211336267.9A 2022-07-25 2022-10-28 一种基于键值存储系统的数据管理方法及其相关设备 Pending CN117493388A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
PCT/CN2023/109096 WO2024022329A1 (zh) 2022-07-25 2023-07-25 一种基于键值存储系统的数据管理方法及其相关设备

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN2022108771026 2022-07-25
CN202210877102 2022-07-25

Publications (1)

Publication Number Publication Date
CN117493388A true CN117493388A (zh) 2024-02-02

Family

ID=89678779

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211336267.9A Pending CN117493388A (zh) 2022-07-25 2022-10-28 一种基于键值存储系统的数据管理方法及其相关设备

Country Status (2)

Country Link
CN (1) CN117493388A (zh)
WO (1) WO2024022329A1 (zh)

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110347852B (zh) * 2019-06-06 2021-11-02 华中科技大学 嵌入横向扩展键值存储系统的文件系统及文件管理方法
CN114253908A (zh) * 2020-09-23 2022-03-29 华为云计算技术有限公司 键值存储系统的数据管理方法及其装置
CN113568908A (zh) * 2021-07-16 2021-10-29 华中科技大学 一种键值请求并行调度方法及系统
CN113704261B (zh) * 2021-08-26 2024-05-24 平凯星辰(北京)科技有限公司 基于云存储的键值存储系统
CN114780564A (zh) * 2022-04-21 2022-07-22 京东科技控股股份有限公司 数据处理方法、数据处理装置、电子设备和存储介质

Also Published As

Publication number Publication date
WO2024022329A1 (zh) 2024-02-01

Similar Documents

Publication Publication Date Title
US9767131B2 (en) Hierarchical tablespace space management
Vora Hadoop-HBase for large-scale data
US7257690B1 (en) Log-structured temporal shadow store
US5613113A (en) Consistent recreation of events from activity logs
US11132350B2 (en) Replicable differential store data structure
US7664799B2 (en) In-memory space management for database systems
CN108509462B (zh) 一种同步活动事务表的方法及装置
CN105868228A (zh) 为olap和oltp事务提供无锁读取和写入操作的内存数据库系统
CN111259004B (zh) 一种存储引擎中数据索引的方法以及相关装置
US11468011B2 (en) Database management system
Liu et al. Cfs: A distributed file system for large scale container platforms
US9922043B1 (en) Data management platform
Sinnamohideen et al. A {Transparently-Scalable} Metadata Service for the Ursa Minor Storage System
JP2007501476A (ja) オブジェクトおよび従属オブジェクトをドロップしないデータベースシステム
CN108351801A (zh) 多版本移除管理器
CN115048046B (zh) 日志文件系统以及数据管理方法
CN117493388A (zh) 一种基于键值存储系统的数据管理方法及其相关设备
CN115422137A (zh) 文件创建方法、装置、电子设备及计算机可读存储介质
EP3696688B1 (en) Locking based on categorical memory allocation
US10976959B2 (en) Method and system for accessing virtual machine state while virtual machine restoration is underway
CN108376104B (zh) 节点调度方法及装置、计算机可读存储介质
CN117539841B (zh) 一种分布式文件系统元数据管理系统及其操作方法
US12007971B2 (en) Pageable hash index for document store
CN117235185B (zh) 数据平衡处理方法、装置及电子设备
CN113485639B (zh) 分布式存储的io速度优化方法、系统、终端及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication