CN107003816A - 数据访问方法和相关装置及系统 - Google Patents
数据访问方法和相关装置及系统 Download PDFInfo
- Publication number
- CN107003816A CN107003816A CN201680004080.5A CN201680004080A CN107003816A CN 107003816 A CN107003816 A CN 107003816A CN 201680004080 A CN201680004080 A CN 201680004080A CN 107003816 A CN107003816 A CN 107003816A
- Authority
- CN
- China
- Prior art keywords
- key
- value
- orders
- pointers
- pointer
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/062—Securing storage systems
- G06F3/0622—Securing storage systems in relation to access
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
- G06F3/0611—Improving I/O performance in relation to response time
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0652—Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0658—Controller construction arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0688—Non-volatile semiconductor memory arrays
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/40—Bus structure
- G06F13/4004—Coupling between buses
- G06F13/4022—Coupling between buses using switching circuits, e.g. switching matrix, connection or expansion network
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4282—Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/0026—PCI express
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- User Interface Of Digital Computer (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Information Transfer Systems (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
数据访问方法和相关装置及系统,数据访问方法包括NVMe接收来自处理器的格式符合NVMe接口标准的第一Key‑Value命令。所述第一Key‑Value命令携带第一操作方式指示和第一操作对象类型指示,所述第一操作对象类型指示所指示的操作对象类型包括Value。所述NVMe获取所述第一Key‑Value命令对应的N个Key。所述NVMe针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作。本发明实施例的技术方案有利于推展NVMe技术的数据访问方式。
Description
技术领域
本发明涉及了计算机技术领域,具体涉及了数据访问方法和相关装置和相关系统。
背景技术
近两年以来,信息技术(IT,Information Technology)行业正在加速向以云计算、移动互联、大数据和社交媒体为代表的第三平台转移。第三平台的核心技术是云计算、软件定义和大数据,体现到存储领域就是非关系型数据库应用的比例大大上升,而传统结构化查询语言(SQL,Structured Query Language)数据库应用的增长陷入停滞。
高速非易失性存储器(NVMe,Non-Volatile Memory Express)具有很高的存储性能。大数据的发展需要一些高性能和高扩展的存储技术,基于网络的高速非易失性存储器(NoF,NVMe over Fabric)正是在这种需求下产生。作为固态硬盘(SSD,Solid StateDrives)的接口标准,NVMe一般只支持高速外设部件互连标准(PCIe,PeripheralComponent Interconnect express),而将其扩展到网络(Fabric)上就成为了NoF。NoF使存储设备可在网络上提供与本地SSD性能相当的存储服务。
传统NoF技术和NVMe技术还只支持块访问方式,由于传统的NoF技术和NVMe技术单一的访问方式支持能力,这较大的限制了NoF技术和NVMe技术的应用范围。
发明内容
本发明实施例提供数据访问方法和相关装置及系统。
本发明实施例第一方面提供一种数据访问方法,包括:NVMe接收来自处理器的格式符合NVMe接口标准的第一键-值(Key-Value)命令。所述第一Key-Value命令携带第一操作方式指示和第一操作对象类型指示,所述第一操作对象类型指示所指示的操作对象类型包括Value。所述NVMe获取所述第一Key-Value命令对应的N个Key。所述NVMe针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作。
其中,所述N为大于或等于1的整数。
例如所述N可为1、2、3、4、5、6、7、9、10、15、51、80、97、100或其他值。
其中,所述NVMe和所述处理器属于同一计算机设备,计算机设备可为台式个人电脑、笔记本个人电脑、服务器或其他类型的计算机设备。NVMe可看作是存储服务提供设备,而处理器可看作是存储服务请求设备。NVMe包括NVM(Non-Volatile Memory,高速非易失性存储介质)和NVMe控制器(NVMe中的NVMe控制器可简称控制器)。
其中,上述符合NVMe标准的Key-Value命令例如为如下Key-Value命令中的任意一条:请求获取Value和/或元数据的Key-Value命令、请求写入Key、Value和/或元数据的Key-Value命令、请求删除Key、Value和/或元数据的Key-Value命令等。
当N等于1时,针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作,也即,针对所述1个Key对应的Value执行所述第一操作方式指示所指示的操作。
可以看出,本发明一些实施例的技术方案中,创新引入了格式符合NVMe接口标准的Key-Value命令,即,将Key-Value命令和NVMe接口标准进行了有机融合,使得可支持NVMe接口标准的NVMe识别和执行Key-Value命令变得有了可能。当接收到格式符合NVMe接口标准的Key-Value命令,NVMe获取所述Key-Value命令对应的N个Key,针对所述N个Key之中的每个Key分别对应的Value执行所述Key-Value命令对应的操作,这种新型的访问机制拓展了NVMe技术的访问方式支持能力,使得NVMe技术可支持Key-value访问方式而不仅限于支持传统块访问方式,进而有利于拓展NVMe技术的应用范围,进而有利于更好的适应例如大数据应用等新需求。
可选的,在本发明的一些可能的实施方式之中,所述第一Key-Value命令还携带了所述N个Key,其中,所述获取所述第一Key-Value命令对应的N个Key可以包括:通过解析所述第一Key-Value命令获取所述Key-Value命令携带的所述N个Key。
可以理解,通过Key-Value命令直接携带N个Key,则有利于减少NVMe访问缓存的次数。
可选的,在本发明的一些可能的实施方式之中,所述第一Key-Value命令还携带了N个Key指针,其中,所述获取所述第一Key-Value命令对应的N个Key可包括:(例如通过直接内存读取(DMA,Direct MemoryAccess)方式)从所述N个Key指针所指向的缓存区获取所述第一Key-Value命令对应的所述N个Key。
可以理解,通过Key-Value命令携带N个Key指针,则有利于增强Key-Value命令的指示能力,因为Key指针通常比Key本身要小,因此通过携带N个Key指针有利于指示更多的Key。
可选的,在本发明的一些可能的实施方式中,所述第一Key-Value命令还携带了N个Value指针,其中,所述第一操作方式指示所指示的操作方式为获取操作。
所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作包括:
从所述NVMe的NVM中获取所述N个Key对应的N条Value,将获取的所述N条Value中的每条Value写入所述N个Value指针中的不同Value指针所指向的缓存区。其中,所述N条Value之中的与Key-i对应的Value,被写入了到所述N个Value指针中的与所述Key-i对应的Value指针所指向的缓存区,所述Key-i为所述N个Key中的任意一个Key。
可以理解,利用上述举例的获取机制,有利于协助处理器快速批量的从NVMe获取到的所需的Value等。
可选的,在本发明的一些可能的实施方式中,接收所述第一Key-Value命令之前所述方法还包括:
所述NVMe接收格式符合NVMe接口标准的第二Key-Value命令,所述第二Key-Value携带第二操作方式指示和第二操作对象类型指示,所述第二操作方式指示所指示的操作方式为获取操作。其中,所述第二操作对象类型指示所指示的操作对象类型包括Value的元数据,所述第二Key-Value命令还携带N个元数据指针。
在第二Key-Value命令还携带N个Key指针的情况下,所述NVMe(例如通过DMA方式)从所述N个Key指针所指向的缓存区获取所述N个Key;或在所述第二Key-Value命令还携带所述N个Key的情况下,所述NVMe通过解析所述第二Key-Value命令获取所述第二Key-Value命令携带的所述N个Key。
所述NVMe在所述NVMe的NVM中查找所述N个Key对应的N条Value的元数据;所述NVMe将所述N条Value中的每条Value的元数据写入所述N个元数据指针之中的不同元数据指针所指向的缓存区,所述N条Value的元数据之中与Key-i对应的Value的元数据,被写入到所述N个元数据指针中的与所述Key-i对应的元数据指针所指向的缓存区,其中,所述Key-i对应的Value的元数据包含Key-i对应的Value的长度信息。
相应的,处理器例如可基于Key-i对应的Value的长度信息来为Key-i对应的Value分配非常匹配Value长度需求的缓存区,这样的机制,有利于协助处理器合理有效的分配缓存区。
可选的,在本发明的一些可能的实施方式中,所述第一操作方式指示所指示的操作方式为写入操作,所述第一Key-Value命令还携带N个Value指针或N条Value;
其中,在所述第一Key-Value命令还携带N个Value指针的情况下,所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作包括:从所述第一Key-Value命令携带的N个Value指针所指向的缓存区获取所述N个Key对应的N条Value,将所述N条Value写入到所述NVMe的NVM中;
或者,在所述第一Key-Value命令还携带N条Value情况下,所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作包括:通过解析所述第一Key-Value命令获取所述第一Key-Value命令携带的所述N条Value,将所述N条Value写入所述NVMe的NVM中。
可以理解,利用上述举例的写入机制,有利于协助处理器快速批量的向NVMe写入Value等。
可选的,在本发明的一些可能的实施方式中,所述第一操作方式指示所指示的操作方式为删除操作,所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作包括:将所述N个Key对应的Value从所述NVMe的NVM中删除。
可以理解,利用上述举例的写入机制,有利于协助处理器快速批量的从NVMe删除Value等。
可选的,在本发明的一些可能的实施方式中,接收来自处理器的格式符合NVMe接口标准的Key-Value命令之前,所述方法还包括:所述NVMe接收格式符合NVMe接口标准的第三命令,其中,所述第三命令携带第三操作方式指示和第三操作对象类型指示,其中,所述第三操作方式指示所指示的操作方式为获取操作,所述第三操作对象指示所指示的操作对象类型包括Key;所述第三命令还携带Key集合指针;
当第三命令还携带了规则指针的情况下,(例如通过DMA方式)从所述规则指针所指向的缓存区获取Key集合遍历规则;或者,当所述第三命令还携带了Key集合遍历规则的情况下,通过解析所述第三命令获取所述第三命令携带的所述Key集合遍历规则;
基于所述Key集合遍历规则从所述NVMe的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的缓存区,所述N个Key中的部分或全部Key为所述Key集合中的部分或全部Key。
其中,可以是列表的形式或其他形式记录Key集合(Key集合可包括一个或多个Key)。其中,Key集合遍历规则可以通过正则表达式或其他形式进行描述。
可以理解,利用上述举例的Key集合获取机制,可以快速批量的获取到的所需的Key。
本发明实施例第二方面还提供一种数据访问方法,包括:
目标器接收来自启动器的格式符合高速非易失性存储器(NVMe)接口标准的第一Key-Value命令。其中,所述第一Key-Value命令携带第一操作方式指示和第一操作对象类型指示,所述第一操作对象类型指示所指示的操作对象类型包括Value。获取所述第一Key-Value命令对应的N个Key,其中,所述N为大于或者等于1的整数。针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作。
其中,所述N为大于或等于1的整数。
例如所述N可为1、2、3、4、5、6、7、9、10、13、52、80、97、101或其他值。
其中,所述启动器和所述目标器均为计算机设备,其中,启动器可为台式个人电脑、笔记本个人电脑、服务器或其他类型的计算机设备。目标器例如可为存储服务器、存储阵列、存储云等或其他类型的计算机设备。目标器可看作是存储服务提供设备,而启动器可看作是存储服务请求设备。
目标器包括网卡、NVM和NVMe控制器(目标器中的NVMe控制器可简称控制器)等。也可将网卡与NVMe控制器合称NoF控制器,NVMe控制器与网卡甚至可一体集成。
可以看出,本发明一些实施例的技术方案中,创新引入了格式符合NVMe接口标准的Key-Value命令,即,将Key-Value命令和NVMe接口标准进行了有机融合,使得可支持NVMe接口标准的目标器识别和执行Key-Value命令变得有了可能。当接收到格式符合NVMe接口标准的Key-Value命令,目标器获取所述Key-Value命令对应的N个Key,针对所述N个Key之中的每个Key分别对应的Value执行所述Key-Value命令对应的操作,这种新型的访问机制拓展了NoF技术的访问方式支持能力,使得NoF技术可支持Key-value访问方式而不仅限于支持传统块访问方式,进而有利于拓展NoF技术的应用范围,进而有利于更好的适应例如大数据应用和云存储等新需求。
可选的,在本发明的一些可能的实施方式中,所述第一Key-Value命令还携带N个Key或N个Key指针指向N个Key指针的指针;
在所述第一Key-Value命令还携带指向N个Key指针的指针的情况下,所述获取所述第一Key-Value命令对应的N个Key包括:基于所述第一Key-Value命令携带的指向所述N个Key指针的指针,从所述启动器的缓存区或者所述第一Key-Value命令的随命令数据区获取所述N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述第一Key-Value命令对应的所述N个Key。
或者,
在所述第一Key-Value命令携带N个Key指针情况下,所述获取所述第一Key-Value命令对应的N个Key包括:通过解析所述第一Key-Value命令以获取所述第一Key-Value命令携带的所述N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述第一Key-Value命令对应的所述N个Key;
或者,
在所述第一Key-Value命令携带所述N个Key情况下,所述获取所述第一Key-Value命令对应的N个Key包括:通过解析所述第一Key-Value命令以获取所述第一Key-Value命令携带的所述N个Key。
可以理解,通过Key-Value命令直接携带N个Key,则有利于减少目标去访问启动器缓存的次数。然而,通过Key-Value命令携带N个Key指针或指向N个Key指针的指针,则有利于增强Key-Value命令的指示能力,因为Key指针通常比Key本身要小,因此通过携带N个Key指针有利于指示更多的Key。
可选的,在本发明的一些可能的实施方式中,所述第一操作方式指示所指示的操作方式为获取操作,所述第一Key-Value命令还携带N个Value指针或指向N个Value指针的指针;
所述方法还包括:
在所述第一Key-Value命令还携带了N个Value指针的情况下,所述目标器通过解析所述第一Key-Value命令以获得所述第一Key-Value命令携带的N个Value指针;或者在所述第一Key-Value命令还携带指向N个Value指针的指针的情况下,所述目标器基于所述第一Key-Value命令携带的指向所述N个Value指针的指针,从所述启动器的缓存区或所述第一Key-Value命令的随命令数据区获取所述N个Value指针;
其中,所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作包括:
从所述目标器的NVM中获取所述N个Key对应的N条Value,将获取的所述N条Value中的每条Value写入所述N个Value指针中的不同Value指针所指向的所述启动器的缓存区,其中,所述N条Value之中的与Key-i对应的Value,被写入了到所述N个Value指针中的与所述Key-i对应的Value指针所指向的所述启动器的缓存区,其中,所述Key-i为所述N个Key中的任意一个Key。
可以理解,利用上述举例的Key集合获取机制,可以快速批量的获取到的所需的Key。
可选的,在本发明的一些可能的实施方式中,接收所述第一Key-Value命令之前所述方法还包括:
所述目标器接收格式符合NVMe接口标准的第四Key-Value命令,所述第四Key-Value命令携带第四操作方式指示和第四操作对象类型指示,所述第四操作方式指示所指示的操作方式为获取操作,所述第四操作对象类型指示所指示的操作对象类型包括Value的元数据;
在所述第四Key-Value命令还携带了N个Key的情况下,通过解析所述第四Key-Value命令获得所述第四Key-Value命令携带的所述N个Key,或在所述第四Key-Value命令还携带N个Key指针的情况下,通过解析所述第四Key-Value命令获得所述第四Key-Value命令携带的N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述N个Key;或在所述第四Key-Value命令携带指向N个Key指针的指针的情况下,基于所述第四Key-Value命令携带的指向所述N个Key指针的指针,从所述启动器的缓存区或所述第四Key-Value命令的随命令数据区获取所述N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述N个Key;
在所述第四Key-Value命令还携带了N个元数指针的情况下,通过解析所述第四Key-Value命令获得所述第四Key-Value命令携带的N个元数据指针;或者在所述第四Key-Value命令还携带了指向N个元数据指针的指针的情况下,基于所述第四Key-Value命令所携带的指向所述N个元数据指针的指针,从所述启动器的缓存区或者所述第四Key-Value命令的随命令数据区获取所述N个元数据指针;
在所述目标器的NVM中查找所述N个Key对应的N条Value的元数据;将所述N条Value中的每条Value的元数据写入所述N个元数据指针之中的不同元数据指针所指向的所述启动器的缓存区,所述N条Value的元数据之中与Key-i对应的Value的元数据,被写入到所述N个元数据指针中的与所述Key-i对应的元数据指针所指向的所述启动器的缓存区,所述Key-i对应的Value的元数据包含Key-i对应的Value的长度信息。
相应的,启动器例如可基于Key-i对应的Value的长度信息来为Key-i对应的Value分配非常匹配Value长度需求的缓存区,这样的机制,有利于协助启动器合理有效的分配缓存区。
可选的,在本发明的一些可能的实施方式中,所述第一操作方式指示所指示的操作方式为写入操作,所述第一Key-Value命令还携带了N条Value或者N个Value指针或者指向N个Value指针的指针;
其中,在所述第一Key-Value命令携带N条Value的情况下,所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作包括:通过解析所述第一Key-Value命令获得所述第一Key-Value命令携带的N条Value;将所述N条Value写入所述目标器的NVM中;
或者,
在所述第一Key-Value命令还携带N个Value指针的情况下,所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作包括:通过解析所述第一Key-Value命令获得所述第一Key-Value命令携带的N个Value指针;从所述N个Value指针所指向的所述启动器的缓存区获取所述N个Key对应的N条Value,将所述N条Value写入所述目标器中的NVM中;
或者,在所述第一Key-Value命令还携带了指向N个Value指针的指针的情况下,所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作包括:基于所述第一Key-Value命令携带的所述指向N个Value指针的指针,从所述启动器的缓存区或所述第一Key-Value命令的随命令数据区获取所述N个Value指针;从所述N个Value指针所指向的所述启动器的缓存区获取所述N个Key对应的N条Value,将所述N条Value写入所述目标器中的NVM中。
可以理解,利用上述举例的写入机制,有利于协助启动器快速批量的向目标器写入Value等。
可选的,在本发明的一些可能的实施方式中,所述第一操作方式指示所指示的操作方式为删除操作,所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作包括:将所述N个Key对应的Value从所述目标器的NVM中删除。
可以理解,利用上述举例的删除机制,有利于协助启动器快速批量的从目标器删除Value等。
可选的,在本发明的一些可能的实施方式中,在接收第一Key-Value命令之前所述方法还包括:
所述目标器接收格式符合NVMe接口标准的第五命令,所述第五命令携带第五操作方式指示和第五操作对象类型指示,其中,所述第五操作方式指示所指示的操作方式为获取操作,其中,所述第五操作对象类型指示所指示的操作对象类型包括Key;当所述第五命令还携带指向规则指针的指针和指向Key集合指针的指针的情况下,基于所述第五命令携带的指向规则指针的指针,从所述启动器的缓存区或所述第五命令的随命令数据区获取所述规则指针;基于所述第五命令携带的指向Key集合指针的指针,从所述启动器的缓存区或所述第五命令的随命令数据区获取所述Key集合指针;从所述规则指针所指向的所述启动器的缓存区获取Key集合遍历规则;基于所述Key集合遍历规则从所述目标器的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的所述启动器的缓存区,所述N个Key中的部分或全部Key为所述Key集合中的部分或全部Key;
或者,
所述目标器接收格式符合NVMe接口标准的第五命令,所述第五命令携带第五操作方式指示和第五操作对象类型指示,其中,所述第五操作方式指示所指示的操作方式为获取操作,所述第五操作对象类型指示所指示的操作对象类型包括Key;当所述第五命令还携带规则指针和Key集合指针的情况下,从所述规则指针所指向的所述启动器的缓存区获取Key集合遍历规则;基于所述Key集合遍历规则从所述目标器的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的所述启动器的缓存区,所述N个Key中的部分或全部Key为所述Key集合中的部分或全部Key;
或者,
所述目标器接收格式符合NVMe接口标准的第五命令,其中,所述第五命令携带第五操作方式指示和第五操作对象类型指示,其中,所述第五操作方式指示所指示的操作方式为获取操作,其中,所述第五操作对象类型指示所指示的操作对象类型包括Key;当所述第五命令还携带了Key集合遍历规则和携带Key集合指针的情况下,通过解析所述第五命令获取所述第五命令所携带的所述Key集合遍历规则;基于所述Key集合遍历规则从所述目标器的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的所述启动器的缓存区,其中,所述N个Key中的部分或全部Key为所述Key集合中的部分或全部Key。
其中,可以是列表的形式或其他形式记录Key集合(Key集合可包括一个或多个Key)。其中,Key集合遍历规则可以通过正则表达式或其他形式进行描述。
可以理解,利用上述举例的Key集合获取机制,可以快速批量的获取到的所需的Key。
可选的,在本发明的一些可能的实施方式中,Key-Value命令中所携带的例如指针(例如key指针、指向key指针的指针、Value指针、指向Value指针的指针、指向元数据指针的指针等)和key等等,例如可通过散列表的形式或其他数据格式携带在Key-Value命令。
本发明实施例的第三方面提供一种NVMe,包括:
接收单元,用于接收来自处理器的格式符合NVMe接口标准的第一Key-Value命令。其中,所述第一Key-Value命令携带第一操作方式指示和第一操作对象类型指示,其中,所述第一操作对象类型指示所指示的操作对象类型包括Value。
获取单元,用于获取所述第一Key-Value命令对应的N个Key,所述N为大于或者等于1的整数。
操作单元,用于针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作。
可选的,在本发明的一些可能的实施方式中,所述第一Key-Value命令还携带了所述N个Key,所述获取单元具体用于,通过解析所述第一Key-Value命令获取所述Key-Value命令携带的所述N个Key;
或者,所述第一Key-Value命令还携带了N个Key指针,所述获取单元具体用于,从所述N个Key指针所指向的缓存区获取所述第一Key-Value命令对应的所述N个Key。
可选的,在本发明的一些可能的实施方式中,所述第一Key-Value命令还携带了N个Value指针,其中,所述第一操作方式指示所指示的操作方式为获取操作。所述操作单元具体用于,从所述NVMe的非易失性存储介质(NVM)中获取所述N个Key对应的N条Value,将获取的所述N条Value中的每条Value写入所述N个Value指针中的不同Value指针所指向的缓存区,其中,所述N条Value之中的与Key-i对应的Value,被写入了到所述N个Value指针中的与所述Key-i对应的Value指针所指向的缓存区,其中,所述Key-i为所述N个Key中的任意一个Key。
可选的,在本发明的一些可能的实施方式中,所述接收单元还用于,在接收所述第一Key-Value命令之前,接收格式符合NVMe接口标准的第二Key-Value命令,所述第二Key-Value携带第二操作方式指示和第二操作对象类型指示,所述第二操作方式指示所指示的操作方式为获取操作,其中,所述第二操作对象类型指示所指示的操作对象类型包括Value的元数据,所述第二Key-Value命令还携带N个元数据指针;
所述获取单元还可用于,在所述第二Key-Value命令还携带N个Key指针的情况下,从所述N个Key指针所指向的缓存区获取所述N个Key;或在所述第二Key-Value命令还携带所述N个Key的情况下,通过解析所述第二Key-Value命令获取所述第二Key-Value命令携带的所述N个Key。
所述操作单元还用于,在所述NVMe的NVM中查找所述N个Key对应的N条Value的元数据;将所述N条Value中的每条Value的元数据写入所述N个元数据指针之中的不同元数据指针所指向的缓存区,所述N条Value的元数据之中与Key-i对应的Value的元数据,被写入到所述N个元数据指针中的与所述Key-i对应的元数据指针所指向的缓存区,其中,所述Key-i对应的Value的元数据包含Key-i对应的Value的长度信息。
可选的,在本发明的一些可能的实施方式中,所述第一操作方式指示所指示的操作方式为写入操作,所述第一Key-Value命令还携带N个Value指针或N条Value。
其中,所述操作单元具体用于,在所述第一Key-Value命令还携带N个Value指针的情况下,从所述第一Key-Value命令携带的N个Value指针所指向的缓存区获取所述N个Key对应的N条Value,将所述N条Value写入到所述NVMe的NVM中。
或者,所述操作单元具体用于,在所述第一Key-Value命令还携带N条Value情况下,通过解析所述第一Key-Value命令获取所述第一Key-Value命令携带的所述N条Value,将所述N条Value写入所述NVMe的NVM中。
可选的,在本发明的一些可能的实施方式中,所述第一操作方式指示所指示的操作方式为删除操作,所述操作单元具体用于,将所述N个Key对应的Value从所述NVMe的NVM中删除。
可选的,在本发明的一些可能的实施方式中,所述接收单元还用于,接收格式符合NVMe接口标准的第三命令,所述第三命令携带第三操作方式指示和第三操作对象类型指示,其中,所述第三操作方式指示所指示的操作方式为获取操作,所述第三操作对象指示所指示的操作对象类型包括Key;所述第三命令还携带Key集合指针。
所述获取单元还用于,当所述第三命令还携带了规则指针的情况下,从所述规则指针所指向的缓存区获取Key集合遍历规则;或者,当所述第三命令还携带了Key集合遍历规则的情况下,通过解析所述第三命令获取所述第三命令携带的所述Key集合遍历规则。
其中,所述操作单元还可用于,基于所述Key集合遍历规则从所述NVMe的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的缓存区,其中,所述N个Key中的部分或全部Key为所述Key集合中的部分或全部Key。
本发明实施例第四方面提供一种目标器,包括:
接收单元,用于接收来自启动器的格式符合高速非易失性存储器(NVMe)接口标准的第一键-值(Key-Value)命令;其中,所述第一Key-Value命令携带第一操作方式指示和第一操作对象类型指示,所述第一操作对象类型指示所指示的操作对象类型包括Value。
获取单元,用于获取所述第一Key-Value命令对应的N个Key,所述N为大于或者等于1的整数。
操作单元,用于针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作。
可选的,在本发明的一些可能的实施方式中,所述第一Key-Value命令还携带N个Key或N个Key指针指向N个Key指针的指针。
所述获取单元具体用于,在所述第一Key-Value命令还携带指向N个Key指针的指针的情况下,基于所述第一Key-Value命令携带的指向所述N个Key指针的指针,从所述启动器的缓存区或者所述第一Key-Value命令的随命令数据区获取所述N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述第一Key-Value命令对应的所述N个Key。
或者,所述获取单元具体用于,在所述第一Key-Value命令携带N个Key指针情况下,通过解析所述第一Key-Value命令以获取所述第一Key-Value命令携带的所述N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述第一Key-Value命令对应的所述N个Key。
或者,所述获取单元具体用于,在所述第一Key-Value命令携带所述N个Key情况下,通过解析所述第一Key-Value命令以获取所述第一Key-Value命令携带的所述N个Key。
可选的,在本发明的一些可能的实施方式中,所述第一操作方式指示所指示的操作方式为获取操作,所述第一Key-Value命令还携带N个Value指针或指向N个Value指针的指针;
所述获取单元还用于,在所述第一Key-Value命令还携带了N个Value指针的情况下,通过解析所述第一Key-Value命令以获得所述第一Key-Value命令携带的N个Value指针;或者在所述第一Key-Value命令还携带指向N个Value指针的指针的情况下,基于所述第一Key-Value命令携带的指向所述N个Value指针的指针,从所述启动器的缓存区或所述第一Key-Value命令的随命令数据区获取所述N个Value指针。
所述操作单元具体用于,从所述目标器的非易失性存储介质(NVM)中获取所述N个Key对应的N条Value,将获取的所述N条Value中的每条Value写入所述N个Value指针中的不同Value指针所指向的所述启动器的缓存区,所述N条Value之中的与Key-i对应的Value,被写入了到所述N个Value指针中的与所述Key-i对应的Value指针所指向的所述启动器的缓存区,其中,所述Key-i为所述N个Key中的任意一个Key。
可选的,在本发明的一些可能的实施方式中,所述接收单元还用于,在接收所述第一Key-Value命令之前,接收格式符合NVMe接口标准的第四Key-Value命令,所述第四Key-Value命令携带第四操作方式指示和第四操作对象类型指示,所述第四操作方式指示所指示的操作方式为获取操作,所述第四操作对象类型指示所指示的操作对象类型包括Value的元数据。
其中,所述获取单元还用于,在所述第四Key-Value命令还携带了N个Key的情况下,通过解析所述第四Key-Value命令获得所述第四Key-Value命令携带的所述N个Key,或在所述第四Key-Value命令还携带N个Key指针的情况下,通过解析所述第四Key-Value命令获得所述第四Key-Value命令携带的N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述N个Key;或在所述第四Key-Value命令携带指向N个Key指针的指针的情况下,基于所述第四Key-Value命令携带的指向所述N个Key指针的指针,从所述启动器的缓存区或所述第四Key-Value命令的随命令数据区获取所述N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述N个Key。
所述获取单元还用于,在所述第四Key-Value命令还携带了N个元数指针的情况下,通过解析所述第四Key-Value命令获得所述第四Key-Value命令携带的N个元数据指针;或者在所述第四Key-Value命令还携带了指向N个元数据指针的指针的情况下,基于所述第四Key-Value命令所携带的指向所述N个元数据指针的指针,从所述启动器的缓存区或者所述第四Key-Value命令的随命令数据区获取所述N个元数据指针;
所述操作单元还用于,在所述目标器的NVM中查找所述N个Key对应的N条Value的元数据;将所述N条Value中的每条Value的元数据写入所述N个元数据指针之中的不同元数据指针所指向的所述启动器的缓存区,所述N条Value的元数据之中与Key-i对应的Value的元数据,被写入到所述N个元数据指针中的与所述Key-i对应的元数据指针所指向的所述启动器的缓存区,所述Key-i对应的Value的元数据包含Key-i对应的Value的长度信息。
可选的,在本发明的一些可能的实施方式中,所述第一操作方式指示所指示的操作方式为写入操作,所述第一Key-Value命令还携带了N条Value或者N个Value指针或者指向N个Value指针的指针;
其中,所述操作单元具体用于,在所述第一Key-Value命令携带N条Value的情况下,通过解析所述第一Key-Value命令获得所述第一Key-Value命令携带的N条Value;将所述N条Value写入所述目标器的NVM中。
或者,
所述操作单元具体用于,在所述第一Key-Value命令还携带N个Value指针的情况下,通过解析所述第一Key-Value命令获得所述第一Key-Value命令携带的N个Value指针;从所述N个Value指针所指向的所述启动器的缓存区获取所述N个Key对应的N条Value,将所述N条Value写入所述目标器中的NVM中;
或者,所述操作单元具体用于,在所述第一Key-Value命令还携带了指向N个Value指针的指针的情况下,基于所述第一Key-Value命令携带的所述指向N个Value指针的指针,从所述启动器的缓存区或所述第一Key-Value命令的随命令数据区获取所述N个Value指针;从所述N个Value指针所指向的所述启动器的缓存区获取所述N个Key对应的N条Value,将所述N条Value写入所述目标器中的NVM中。
可选的,在本发明的一些可能的实施方式中,所述第一操作方式指示所指示的操作方式为删除操作,所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作包括:将所述N个Key对应的Value从所述目标器的NVM中删除。
可选的,在本发明的一些可能的实施方式中,所述接收单元还用于,接收格式符合NVMe接口标准的第五命令,所述第五命令携带第五操作方式指示和第五操作对象类型指示,其中,所述第五操作方式指示所指示的操作方式为获取操作,其中,所述第五操作对象类型指示所指示的操作对象类型包括Key;
其中,所述获取单元还用于,当所述第五命令还携带指向规则指针的指针和指向Key集合指针的指针的情况下,基于所述第五命令携带的指向规则指针的指针,从所述启动器的缓存区或所述第五命令的随命令数据区获取所述规则指针;基于所述第五命令携带的指向Key集合指针的指针,从所述启动器的缓存区或所述第五命令的随命令数据区获取所述Key集合指针;从所述规则指针所指向的所述启动器的缓存区获取Key集合遍历规则;
所述操作单元还用于,基于所述Key集合遍历规则从所述目标器的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的所述启动器的缓存区,所述N个Key中的部分或全部Key为所述Key集合中的部分或全部Key。或者,
所述接收单元还用于,接收格式符合NVMe接口标准的第五命令,所述第五命令携带第五操作方式指示和第五操作对象类型指示,其中,所述第五操作方式指示所指示的操作方式为获取操作,所述第五操作对象类型指示所指示的操作对象类型包括Key;
其中,所述获取单元还用于,当所述第五命令还携带规则指针和Key集合指针的情况下,从所述规则指针所指向的所述启动器的缓存区获取Key集合遍历规则;
所述操作单元还可用于,基于所述Key集合遍历规则从所述目标器的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的所述启动器的缓存区,其中,所述N个Key中的部分或全部Key为所述Key集合中的部分或全部Key;或者,
所述接收单元还用于,接收格式符合NVMe接口标准的第五命令,所述第五命令携带第五操作方式指示和第五操作对象类型指示,其中,所述第五操作方式指示所指示的操作方式为获取操作,其中,所述第五操作对象类型指示所指示的操作对象类型包括Key。
所述获取单元还用于,当所述第五命令还携带了Key集合遍历规则和携带Key集合指针的情况下,通过解析所述第五命令获取所述第五命令所携带的所述Key集合遍历规则。
所述操作单元还用于,基于所述Key集合遍历规则从所述目标器的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的所述启动器的缓存区,其中,所述N个Key中的部分或全部Key为所述Key集合中的部分或全部Key。
本发明第五方面提供一种NVMe,包括:
控制器(NVMe控制器)和NVM;
其中,所述NVM用于为例如值(Value)等数据提供存储空间。例如所述NVM还可用于为Key和元数据等等提供存储空间。
其中,所述控制器,用于接收来自处理器的格式符合NVMe接口标准的第一Key-Value命令;其中,所述第一Key-Value命令携带第一操作方式指示和第一操作对象类型指示,所述第一操作对象类型指示所指示的操作对象类型包括Value;获取所述第一Key-Value命令对应的N个Key,其中,所述N为大于或者等于1的整数;针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作。
可选的,在本发明的一些可能的实施方式中,所述第一Key-Value命令还携带了所述N个Key,其中,在所述获取所述第一Key-Value命令对应的N个Key的方面,所述控制器具体用于,通过解析所述第一Key-Value命令获取所述Key-Value命令携带的所述N个Key。
或者,所述第一Key-Value命令还携带了N个Key指针,在所述获取所述第一Key-Value命令对应的N个Key的方面,所述控制器具体用于,从所述N个Key指针所指向的缓存区获取所述第一Key-Value命令对应的所述N个Key。
可选的,在本发明的一些可能的实施方式中,所述第一Key-Value命令还携带了N个Value指针,其中,所述第一操作方式指示所指示的操作方式为获取操作;
在所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作的方面,所述控制器具体用于,从所述NVMe的非易失性存储介质(NVM)中获取所述N个Key对应的N条Value,将获取的所述N条Value中的每条Value写入所述N个Value指针中的不同Value指针所指向的缓存区,其中,所述N条Value之中的与Key-i对应的Value,被写入了到所述N个Value指针中的与所述Key-i对应的Value指针所指向的缓存区,所述Key-i为所述N个Key中的任意一个Key。
可选的,在本发明的一些可能的实施方式中,
所述控制器还可用于,在接收所述第一Key-Value命令之前,接收格式符合NVMe接口标准的第二Key-Value命令,所述第二Key-Value携带第二操作方式指示和第二操作对象类型指示,所述第二操作方式指示所指示的操作方式为获取操作,所述第二操作对象类型指示所指示的操作对象类型包括Value的元数据,所述第二Key-Value命令还携带N个元数据指针;在所述第二Key-Value命令还携带N个Key指针的情况下,从所述N个Key指针所指向的缓存区获取所述N个Key;或在所述第二Key-Value命令还携带所述N个Key的情况下,通过解析所述第二Key-Value命令获取所述第二Key-Value命令携带的所述N个Key;在所述NVMe的NVM中查找所述N个Key对应的N条Value的元数据;将所述N条Value中的每条Value的元数据写入所述N个元数据指针之中的不同元数据指针所指向的缓存区,其中,所述N条Value的元数据之中与Key-i对应的Value的元数据,被写入到所述N个元数据指针中的与所述Key-i对应的元数据指针所指向的缓存区,其中,所述Key-i对应的Value的元数据包含Key-i对应的Value的长度信息。
可选的,在本发明的一些可能的实施方式中,所述第一操作方式指示所指示的操作方式为写入操作,所述第一Key-Value命令还携带N个Value指针或N条Value;
其中,在所述第一Key-Value命令还携带N个Value指针的情况下,在所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作的方面,所述控制器具体用于,从所述第一Key-Value命令携带的N个Value指针所指向的缓存区获取所述N个Key对应的N条Value,将所述N条Value写入到所述NVMe的NVM中;
或者,在所述第一Key-Value命令还携带N条Value情况下,在所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作的方面,所述控制器具体用于,通过解析所述第一Key-Value命令获取所述第一Key-Value命令携带的所述N条Value,将所述N条Value写入所述NVMe的NVM中。
可选的,在本发明的一些可能的实施方式中,所述第一操作方式指示所指示的操作方式为删除操作,所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作包括:将所述N个Key对应的Value从所述NVMe的NVM中删除。
可选的,在本发明的一些可能的实施方式中,所述控制器可还用于,接收来自处理器的格式符合NVMe接口标准的键-值(Key-Value)命令之前,接收格式符合NVMe接口标准的第三命令,所述第三命令携带第三操作方式指示和第三操作对象类型指示,其中,所述第三操作方式指示所指示的操作方式为获取操作,所述第三操作对象指示所指示的操作对象类型包括Key;所述第三命令还携带Key集合指针;
当所述第三命令还携带了规则指针的情况下,从所述规则指针所指向的缓存区获取Key集合遍历规则;或者,当所述第三命令还携带了Key集合遍历规则的情况下,通过解析所述第三命令获取所述第三命令携带的所述Key集合遍历规则;
基于所述Key集合遍历规则从所述NVMe的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的缓存区,所述N个Key中的部分或全部Key为所述Key集合中的部分或全部Key。
本发明实施例第六方面提供一种目标器,包括:控制器(例如NVMe控制器或NoF控制器)和NVM。
其中,所述NVM用于为例如值(Value)等数据提供存储空间。例如所述NVM还可用于为Key和元数据等等提供存储空间。
其中,所述控制器用于,接收来自启动器的格式符合高速非易失性存储器接口标准的第一Key-Value命令;所述第一Key-Value命令携带第一操作方式指示和第一操作对象类型指示,所述第一操作对象类型指示所指示的操作对象类型包括Value;获取所述第一Key-Value命令对应的N个Key,所述N为大于或者等于1的整数;针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作。
可选的,在本发明的一些可能的实施方式中,所述第一Key-Value命令还携带N个Key或N个Key指针指向N个Key指针的指针;
其中,在所述第一Key-Value命令还携带了指向N个Key指针的指针的情况之下,在所述获取所述第一Key-Value命令对应的N个Key的方面,控制器具体用于基于所述第一Key-Value命令携带的指向所述N个Key指针的指针,从所述启动器的缓存区或者所述第一Key-Value命令的随命令数据区获取所述N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述第一Key-Value命令对应的所述N个Key;
或者,
在所述第一Key-Value命令携带N个Key指针情况下,在所述获取所述第一Key-Value命令对应的N个Key的方面,所述控制器具体用于通过解析所述第一Key-Value命令以获取所述第一Key-Value命令携带的所述N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述第一Key-Value命令对应的所述N个Key。
或者,
在所述第一Key-Value命令携带所述N个Key情况下,在所述获取所述第一Key-Value命令对应的N个Key的方面,所述控制器具体用于通过解析所述第一Key-Value命令以获取所述第一Key-Value命令携带的所述N个Key。
可选的,在本发明的一些可能的实施方式中,所述第一操作方式指示所指示的操作方式为获取操作,所述第一Key-Value命令还携带N个Value指针或指向N个Value指针的指针;
所述控制器还用于,在所述第一Key-Value命令还携带了N个Value指针的情况下,所述目标器通过解析所述第一Key-Value命令以获得所述第一Key-Value命令携带的N个Value指针;或者在所述第一Key-Value命令还携带指向N个Value指针的指针的情况下,所述目标器基于所述第一Key-Value命令携带的指向所述N个Value指针的指针,从所述启动器的缓存区或所述第一Key-Value命令的随命令数据区获取所述N个Value指针;
其中,在所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作的方面,所述控制器具体用于,从所述目标器的非易失性存储介质中获取所述N个Key对应的N条Value,将获取的所述N条Value中的每条Value写入所述N个Value指针中的不同Value指针所指向的所述启动器的缓存区,其中,所述N条Value之中的与Key-i对应的Value,被写入了到所述N个Value指针中的与所述Key-i对应的Value指针所指向的所述启动器的缓存区,其中,所述Key-i为所述N个Key中的任意一个Key。
可选的,在本发明的一些可能的实施方式中,
所述控制器具体用于,在接收所述第一Key-Value命令之前,接收格式符合高速非易失性存储器接口标准的第四Key-Value命令,所述第四Key-Value命令携带第四操作方式指示和第四操作对象类型指示,所述第四操作方式指示所指示的操作方式为获取操作,所述第四操作对象类型指示所指示的操作对象类型包括Value的元数据;
在所述第四Key-Value命令还携带了N个Key的情况下,通过解析所述第四Key-Value命令获得所述第四Key-Value命令携带的所述N个Key,或在所述第四Key-Value命令还携带N个Key指针的情况下,通过解析所述第四Key-Value命令获得所述第四Key-Value命令携带的N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述N个Key;或在所述第四Key-Value命令携带指向N个Key指针的指针的情况下,基于所述第四Key-Value命令携带的指向所述N个Key指针的指针,从所述启动器的缓存区或所述第四Key-Value命令的随命令数据区获取所述N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述N个Key;
在所述第四Key-Value命令还携带了N个元数指针的情况下,通过解析所述第四Key-Value命令获得所述第四Key-Value命令携带的N个元数据指针;或者在所述第四Key-Value命令还携带了指向N个元数据指针的指针的情况下,基于所述第四Key-Value命令所携带的指向所述N个元数据指针的指针,从所述启动器的缓存区或者所述第四Key-Value命令的随命令数据区获取所述N个元数据指针;
在所述目标器的NVM中查找所述N个Key对应的N条Value的元数据;将所述N条Value中的每条Value的元数据写入所述N个元数据指针之中的不同元数据指针所指向的所述启动器的缓存区,所述N条Value的元数据之中与Key-i对应的Value的元数据,被写入到所述N个元数据指针中的与所述Key-i对应的元数据指针所指向的所述启动器的缓存区,所述Key-i对应的Value的元数据包含Key-i对应的Value的长度信息。
可选的,在本发明的一些可能的实施方式中,所述第一操作方式指示所指示的操作方式为写入操作,所述第一Key-Value命令还携带了N条Value或者N个Value指针或者指向N个Value指针的指针;
其中,在所述第一Key-Value命令携带N条Value的情况下,在所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作的方面,所述控制器具体用于:通过解析所述第一Key-Value命令获得所述第一Key-Value命令携带的N条Value;将所述N条Value写入所述目标器的NVM中;或者,
在所述第一Key-Value命令还携带N个Value指针的情况下,在所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作的方面,所述控制器具体用于:通过解析所述第一Key-Value命令获得所述第一Key-Value命令携带的N个Value指针;从所述N个Value指针所指向的所述启动器的缓存区获取所述N个Key对应的N条Value,将所述N条Value写入所述目标器中的NVM中;
或者,在所述第一Key-Value命令还携带了指向N个Value指针的指针的情况下,在针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作的方面,所述控制器具体用于:基于所述第一Key-Value命令携带的所述指向N个Value指针的指针,从所述启动器的缓存区或所述第一Key-Value命令的随命令数据区获取所述N个Value指针;从所述N个Value指针所指向的所述启动器的缓存区获取所述N个Key对应的N条Value,将所述N条Value写入所述目标器中的NVM中。
可选的,在本发明的一些可能的实施方式中,所述第一操作方式指示所指示的操作方式为删除操作,在所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作的方面,所述控制器具体用于将所述N个Key对应的Value从所述目标器的NVM中删除。
可选的,在本发明的一些可能的实施方式中,
所述控制器还可用于,在接收来自启动器的格式符合NVMe接口标准的第一Key-Value命令之前,接收格式符合NVMe接口标准的第五命令,所述第五命令携带第五操作方式指示和第五操作对象类型指示,其中,所述第五操作方式指示所指示的操作方式为获取操作,所述第五操作对象类型指示所指示的操作对象类型包括Key;当所述第五命令还携带指向规则指针的指针和指向Key集合指针的指针的情况下,基于所述第五命令携带的指向规则指针的指针,从所述启动器的缓存区或所述第五命令的随命令数据区获取所述规则指针;基于所述第五命令携带的指向Key集合指针的指针,从所述启动器的缓存区或所述第五命令的随命令数据区获取所述Key集合指针;从所述规则指针所指向的所述启动器的缓存区获取Key集合遍历规则;基于所述Key集合遍历规则从所述目标器的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的所述启动器的缓存区,所述N个Key中的部分或全部Key为所述Key集合中的部分或全部Key;或者,
所述控制器还用于,在接收来自启动器的格式符合NVMe接口标准的第一Key-Value命令之前,接收格式符合NVMe接口标准的第五命令,所述第五命令携带第五操作方式指示和第五操作对象类型指示,其中,所述第五操作方式指示所指示的操作方式为获取操作,所述第五操作对象类型指示所指示的操作对象类型包括Key;当所述第五命令还携带规则指针和Key集合指针的情况下,从所述规则指针所指向的所述启动器的缓存区获取Key集合遍历规则;基于所述Key集合遍历规则从所述目标器的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的所述启动器的缓存区,所述N个Key中的部分或全部Key为所述Key集合中的部分或全部Key;或者,
所述控制器还用于,在接收来自启动器的格式符合NVMe接口标准的第一Key-Value命令之前,接收格式符合NVMe接口标准的第五命令,其中,所述第五命令携带第五操作方式指示和第五操作对象类型指示,其中,所述第五操作方式指示所指示的操作方式为获取操作,其中,所述第五操作对象类型指示所指示的操作对象类型包括Key;当所述第五命令还携带了Key集合遍历规则和携带Key集合指针的情况下,通过解析所述第五命令获取所述第五命令所携带的所述Key集合遍历规则;基于所述Key集合遍历规则从所述目标器的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的所述启动器的缓存区,其中,所述N个Key中的部分或全部Key为所述Key集合中的部分或全部Key。
本发明实施例第七方面还提供一种计算机设备,包括:
处理器和NVMe,所述NVMe可为本发明实施例的任意一种NVMe。
本发明实施例第八方面还提供一种数据访问系统,包括:
启动器和目标器,所述目标器为所述NVMe可为本发明实施例的任意一种目标器。
此外,本发明实施例第九方面提供了一种计算机可读存储介质,所述计算机可读存储介质存储了NVMe所执行的用于数据访问的程序代码。所述程序代码包括用于执行在第一方面中NVMe所执行方法的指令。
此外,本发明实施例第十方面提供了一种计算机可读存储介质,所述计算机可读存储介质存储了目标器所执行的用于数据访问的程序代码。所述程序代码包括用于执行在第二方面中目标器所执行方法的指令。
此外,本发明实施例的第十一方面还提供了一种数据访问装置。所述装置包括的单元能够执行在第一方面中的NVMe所执行的方法。
此外,本发明实施例的第十二方面还提供了一种数据访问装置。所述装置包括的单元能够执行在第二方面中的目标器所执行的方法。
附图说明
为了更清楚地说明本发明实施例技术方案,下面将对实施例和现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
图1-A是本发明实施例举例提供的一种针对NVMe场景的架构示意图;
图1-B~图1-C是本发明实施例举例提供的针对NoF场景的架构示意图;
图2是本发明实施例提供一种数据访问方法的流程示意图;
图3-A和图3-B是本发明实施例提供一些符合NVMe标准的命令的说明示意图;
图4-A是本发明实施例提供另一种数据访问方法的流程示意图;
图4-B~图4-C是本发明实施例提供几种Kget命令的格式和指针映射关系示意图;
图5-A是本发明实施例提供另一种数据访问方法的流程示意图;
图5-B~图5-E是本发明实施例提供几种Kget命令的格式和指针映射关系示意图;
图6-A是本发明实施例提供另一种数据访问方法的流程示意图;
图6-B是本发明实施例提供一种Kput命令的格式和指针映射关系示意图;
图7-A~图7-B是本发明实施例提供几种Kput命令的格式和指针映射关系示意图;
图7-C是本发明实施例提供另一种数据访问方法的流程示意图;
图8-A是本发明实施例提供一种Kdel命令的格式和指针映射关系示意图;
图8-B是本发明实施例提供另一种数据访问方法的流程示意图;
图9-A是本发明实施例提供另一种数据访问方法的流程示意图;
图9-B~图9-C是本发明实施例提供几种Kdel命令的格式和指针映射关系示意图;
图10-A和图10-C是本发明实施例提供几种Kmget命令的格式和指针映射关系示意图;
图10-B是本发明实施例提供另一种数据访问方法的流程示意图;
图11-A是本发明实施例提供另一种数据访问方法的流程示意图;
图11-B~图11-E是本发明实施例提供几种Kmget命令的格式和指针映射关系示意图;
图12-A是本发明实施例提供另一种数据访问方法的流程示意图;
图12-B是本发明实施例提供一种Kmput命令格式和指针映射关系示意图;
图13-A~图13-B是本发明实施例提供几种Kmput命令的格式和指针映射关系示意图;
图13-C是本发明实施例提供另一种数据访问方法的流程示意图;
图14-A是本发明实施例提供另一种数据访问方法的流程示意图;
图14-B是本发明实施例提供一种Kmdel命令格式和指针映射关系示意图;
图15-A~图15-B是本发明实施例提供几种Kmdel命令的格式和指针映射关系示意图;
图15-C是本发明实施例提供另一种数据访问方法的流程示意图;
图16-A是本发明实施例提供另一种数据访问方法的流程示意图;
图16-B是本发明实施例提供Kkeylist命令格式和指针映射关系示意图;
图17-A是本发明实施例提供另一种数据访问方法的流程示意图;
图17-B~图17-C是本发明实施例提供几种Kkeylist命令的格式和指针映射关系示意图;
图18是本发明实施例提供一种NVMe的示意图;
图19是本发明实施例提供一种目标器的示意图;
图20是本发明实施例提供另一种NVMe的示意图;
图21是本发明实施例提供另一种目标器的示意图;
图22是本发明实施例提供一种计算机设备的示意图;
图23是本发明实施例提供一种数据访问系统的示意图。
具体实施方式
本发明的说明书和权利要求书及上述附图中的术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包括。例如包括了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或者可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。
本发明的发明人致力于NoF技术和/或NVMe技术的访问方式支持能力的拓展,期望通过拓展NoF技术和/或NVMe技术的访问方式支持能力来拓展NoF技术和NVMe技术的应用范围。
键-值(Key-Value)技术是被较广泛应用的一种技术,Key-Value技术特点是键(Key)与对应的值(Value)成对组织和存放。相对于基于文件系统的传统关系型数据库,Key-Value技术具有较大优势。本发明发明人据此认为Key-Value技术在云存储领域可能会有很大应用前景。然而由于传统NoF技术和NVMe技术还只支持块访问方式,因此如何将Key-Value技术较好的融合应用到NoF技术和/或NVMe技术之中,进而有益的拓展传统NoF技术和NVMe技术的访问方式支持能力,就变成了1个需攻克的且有很大意义的技术问题。下面通过具体实施例来阐述上述技术问题的解决思路。
请参见图1-A、图1-B和图1-C,本发明实施例的一些技术方案可基于1-A或图1-B或图1-C举例所示系统架构或其变形架构来具体实施。图1-A所示计算机设备架构主要针对的是NVMe场景。其中,图1-A举例所示的计算机设备主要包括处理器、缓存和NVMe,NVMe包括NVMe控制器(NVMe中的NVMe控制器简称控制器)和非易失性存储介质(NVM,Non-VolatileMemory)等等内部器件。处理器可看作是存储服务请求设备,而NVMe可看作是存储服务提供设备。处理器和NVMe属于同一计算机设备(例如台式个人电脑、笔记本个人电脑、工作站、服务器或其他类型的计算机设备)。处理器和NVMe之间可通过总线(例如PCIe总线)连接。
图1-B和图1-C所示架构主要针对的是NoF场景,NoF场景主要涉及到启动器(Initiator)和目标器(Target)等设备。图1-B和图1-C还具体举例示出了启动器和目标器可能包括的一些内部器件。例如目标器可包括网卡(目标器中的网卡例如可为支持远程直接内存访问(RDMA,Remote Direct MemoryAccess)的网卡)和NVMe(包括NVMe控制器和NVM)等等内部器件。其中,目标器中的网卡和NVMe控制器也可能融合形成一个器件(融合形成的器件例如可称为NoF控制器),或者也可以将目标器中的网卡和NVMe控制器合称为NoF控制器。NoF控制器可负责目标器的主要功能。又例如启动器可包括网卡、处理器和缓存等等内部器件。启动器和目标器的内部部件并不限于图1-B和图1-C的举例。
启动器和目标器为不同的计算机设备。在一些情况下,若存储服务提供设备和存储服务请求设备是通过网络(fabric)连接,那么存储服务提供设备为目标器,存储服务请求设备为启动器。在另一些情况下,如果存储服务提供设备和存储服务请求设备使用总线或其他方式连接,但存储服务提供设备和存储服务请求设备并不在统一个机框之内,那么存储服务提供设备为目标器,存储服务请求设备为启动器。
其中,启动器和目标器的实际产品形态可能是多种多样的,例如目标器可能是存储服务器、存储阵列等等存储服务提供设备。而启动器例如可能是个人电脑、工作站、应用服务器或站点服务器等存储服务请求设备。
总的来说,例如对于NVMe场景,存储服务请求设备为处理器且存储服务提供设备为NVMe。例如对于NoF场景,存储服务请求设备为启动器且存储服务提供设备为目标器。
请参见图2,图2是本发明的一个实施例提供的一种数据访问方法的流程示意图。其中,如图2举例所示,本发明的一个实施例提供的一种数据访问方法可以包括:
S201、存储服务请求设备向存储服务提供设备发送格式符合NVMe接口标准的第一Key-Value命令。
其中,所述第一Key-Value命令携带第一操作方式指示和第一操作对象类型指示,所述第一操作对象类型指示所指示的操作对象类型包括Value。所述第一操作对象类型指示所指示的操作对象类型当然也还可包括Key和/或Value的元数据等。
其中,本申请实施例中涉及的操作对象类型可包括Key、Value和Value的元数据等。
S202、存储服务提供设备接收来自存储服务请求设备的格式符合NVMe接口标准的第一Key-Value命令,存储服务提供设备获取所述Key-Value命令对应的N个Key。
其中,所述N为大于或者等于1的整数。
例如所述N可为1、2、3、4、5、6、7、9、10、15、51、80、97、100或其他值。
S203、存储服务提供设备针对所述N个Key之中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作。其中,所述第一操作方式指示所指示的操作方式例如可以是获取(即读取)操作、写入操作或删除操作等等操作。
其中,格式符合NVMe接口标准的第一Key-Value命令例如为如下Key-Value命令中的任意一条:请求获取Value和/或元数据的Key-Value命令(例如第一操作方式指示所指示的操作方式为获取操作)、请求写入Key、Value和/或元数据的Key-Value命令(例如第一操作方式指示所指示的操作方式为写入操作)、请求删除Key、Value和/或元数据的Key-Value命令(例如第一操作方式指示所指示的操作方式为删除操作)。
其中,请求获取Value和/或元数据的Key-Value命令例如可为请求批量获取Value和/或元数据的Key-Value命令(例如可称为Kmget命令或其他名称)或请求单量获取Value和/或元数据的Key-Value命令(例如可称为Kget命令或者其他名称)。其中,请求批量获取Value和/或元数据的Key-Value命令用于请求一次性获取多条Value和/或多条元数据。请求单量获取Value和/或元数据的Key-Value命令用于请求一次性获取单条Value和/或单条元数据。
其中,请求写入Key、Value和/或元数据的Key-Value命令例如可为请求批量写入Key、Value和/或元数据的Key-Value命令(例如可称为Kmput命令或其他名称)或请求单量写入Key、Value和/或元数据的Key-Value命令(例如可以称为Kmput命令或其他名称)。其中,请求批量写入Key、Value和/或元数据的Key-Value命令用于请求一次性写入多个Key、多条Value和/或多条元数据。而请求单量写入Key、Value和/或元数据的Key-Value命令用于请求一次性写入单个Key、单条Value和/或单条元数据。
其中,请求删除Key、Value和/或元数据的Key-Value命令例如可为请求批量删除Key、Value和/或元数据的Key-Value命令(例如可称为Kmput命令或其他名称)或请求单量删除Key、Value和/或元数据的Key-Value命令(例如可以称为Kmput命令或其他名称)。其中,请求批量删除Key、Value和/或元数据的Key-Value命令用于请求一次性删除多个Key、多条Value和/或多条元数据。而请求单量删除Key、Value和/或元数据的Key-Value命令用于请求一次性删除单个Key、单条Value和/或单条元数据。
参见图3-A和图3-B,图3-A举例所示表中举例示出了格式符合NVMe接口标准的一些命令(其中,包括本申请实施例举例拓展出的Key-Value命令)的简要描述。可以理解,格式符合NVMe接口标准的Key-Value命令并不限于上述举例。
图3-B举例示出了格式符合NVMe接口标准的命令一般性格式。符合NVMe接口标准的命令的格式特征包括:命令长度固定为64字节(64字节不包含随命令数据区),即16个DW(1个DW表示4个字节)。命令中的DW0用于标识命令的关键特征。NVMe接口标准中规定其他字段(如DW0~DW15)可根据需要自定义。
例如,DW0可包括可用于表示命令用途的Opcode(操作码)字段。DW0还可包括可用于唯一识别本命令的CommandID(命令标识)字段。DW0还可包括用于指示数据格式的PDSP(PRPor SGLfor DataTransfer,数据传送格式选择)字段,DW0还可包括可用于指示本命令是否可与其他命令合并为1个批处理命令的FUSE(Fused Operation,合并操作)字段。
例如,Opcode字段可位于第0~7bit(即位0~7),Opcode字段例如可携带操作方式指示等信息,操作方式指示所指示的操作方式例如可为获取、写入或删除等操作。
例如FUSE字段可位于第8~9bit(即位8~9)。
例如CommandID)字段可位于第16~31bit(即位16-31)。
例如PDSP字段例如第14~15bit(即位14-15),PDSP字段所指示的数据格式例如为散列表(SGL)或页面列表(Page list)等。例如当PDSP所指示的数据格式为SGL,那么例如本命令的DW6~DW9所携带的数据格式为SGL,以此类推。
关于NVMe接口标准的详细内容请参考相关标准规范文档,此处不再进行详细罗列。
下面针对一些NVMe场景和NoF场景进行一些举例说明。
例如针对NVMe场景(即存储服务请求设备为处理器且存储服务提供设备为NVMe),在本发明一些可能实施方式中,所述第一Key-Value命令还携带了所述N个Key,所述获取所述第一Key-Value命令对应的N个Key包括:通过解析所述第一Key-Value命令获取所述Key-Value命令携带的所述N个Key。或者所述第一Key-Value命令还携带了N个Key指针,所述获取所述第一Key-Value命令对应的N个Key包括:从所述N个Key指针所指向的缓存区获取所述第一Key-Value命令对应的所述N个Key。
例如针对NoF场景(即存储服务请求设备为启动器且存储服务提供设备为目标器),在本发明一些可能实施方式中,所述第一Key-Value命令还可携带N个Key或N个Key指针指向N个Key指针的指针。
具体例如,在所述第一Key-Value命令还携带指向N个Key指针的指针的情况下,所述获取所述第一Key-Value命令对应的N个Key包括:基于所述第一Key-Value命令携带的指向所述N个Key指针的指针,从所述启动器的缓存区或者所述第一Key-Value命令的随命令数据区获取所述N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述第一Key-Value命令对应的所述N个Key。
或者,在所述第一Key-Value命令携带N个Key指针情况下,所述获取所述第一Key-Value命令对应的N个Key包括:通过解析所述第一Key-Value命令以获取所述第一Key-Value命令携带的所述N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述第一Key-Value命令对应的所述N个Key。
或者,在所述第一Key-Value命令携带所述N个Key情况下,所述获取所述第一Key-Value命令对应的N个Key包括:通过解析所述第一Key-Value命令以获取所述第一Key-Value命令携带的所述N个Key。
可以理解的是,指向启动器的缓存区的指针和指向Key-Value命令的随命令数据区的指针的格式和/或长度通常是不同的,因此,例如可以基于指针的长度来确定其到底是指向启动器的缓存区还是指向Key-Value命令的随命令数据区。
下面针对不同功能的Key-Value命令进行举例说明。
例如针对NVMe场景,假设,所述第一Key-Value命令还携带了N个Value指针,其中,所述第一操作方式指示所指示的操作方式为获取操作,那么针对所述N个Key中的每个Key分别对应的Value执行第一操作方式指示所指示的操作可包括:从所述NVMe的NVM中获取所述N个Key对应的N条Value,将获取的所述N条Value中的每条Value写入所述N个Value指针中的不同Value指针所指向的缓存区,其中,所述N条Value之中的与Key-i对应的Value,被写入了到所述N个Value指针中的与所述Key-i对应的Value指针所指向的缓存区,所述Key-i为所述N个Key中的任意一个Key。
其中,上述举例示例性的给出了在NoF场景下进行获取Value操作的一些可能的实施方式。
针对NVMe场景,在一些可能实施方式中,接收所述第一Key-Value命令之前所述方法还包括:
所述NVMe接收格式符合NVMe接口标准的第二Key-Value命令,所述第二Key-Value携带第二操作方式指示和第二操作对象类型指示,所述第二操作方式指示所指示的操作方式为获取操作,其中,所述第二操作对象类型指示所指示的操作对象类型包括Value的元数据,所述第二Key-Value命令还携带N个元数据指针。在所述第二Key-Value命令还携带N个Key指针的情况下,从所述N个Key指针所指向的缓存区获取所述N个Key;或在所述第二Key-Value命令还携带所述N个Key的情况下,通过解析所述第二Key-Value命令获取所述第二Key-Value命令携带的所述N个Key。在所述NVMe的NVM中查找所述N个Key对应的N条Value的元数据;将所述N条Value中的每条Value的元数据写入所述N个元数据指针之中的不同元数据指针所指向的缓存区,所述N条Value的元数据之中与Key-i对应的Value的元数据,被写入到所述N个元数据指针中的与所述Key-i对应的元数据指针所指向的缓存区,其中,所述Key-i对应的Value的元数据包含Key-i对应的Value的长度信息。
其中,上述举例示例性的给出了在NoF场景下进行获取Value的元数据的一些可能的实施方式。相应的,处理器可基于Key-i对应的Value的长度信息来为Key-i对应的Value分配匹配Value长度的缓存区,针对其他Key对应的Value的情况可以此类推。
针对NoF场景,在一些可能实施方式中,假设所述第一操作方式指示所指示的操作方式为获取操作,所述第一Key-Value命令还携带N个Value指针或指向N个Value指针的指针;
所述方法还可包括:在所述第一Key-Value命令还携带了N个Value指针的情况下,所述目标器通过解析所述第一Key-Value命令以获得所述第一Key-Value命令携带的N个Value指针;或者在所述第一Key-Value命令还携带指向N个Value指针的指针的情况下,所述目标器基于所述第一Key-Value命令携带的指向所述N个Value指针的指针,从所述启动器的缓存区或所述第一Key-Value命令的随命令数据区获取所述N个Value指针;
其中,所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作包括:从所述目标器的NVM中获取所述N个Key对应的N条Value,将获取的所述N条Value中的每条Value写入所述N个Value指针中的不同Value指针所指向的所述启动器的缓存区,其中,所述N条Value之中的与Key-i对应的Value,被写入了到所述N个Value指针中的与所述Key-i对应的Value指针所指向的所述启动器的缓存区,其中,所述Key-i为所述N个Key中的任意一个Key。
其中,上述举例示例性的给出了在NoF场景下进行获取Value的一些可能的实施方式。
针对NVMe场景,在一些可能实施方式中,接收所述第一Key-Value命令之前所述方法还包括:
所述目标器接收格式符合NVMe接口标准的第四Key-Value命令,所述第四Key-Value命令携带第四操作方式指示和第四操作对象类型指示,所述第四操作方式指示所指示的操作方式为获取操作,所述第四操作对象类型指示所指示的操作对象类型包括Value的元数据;
在所述第四Key-Value命令还携带了N个Key的情况下,通过解析所述第四Key-Value命令获得所述第四Key-Value命令携带的所述N个Key,或在所述第四Key-Value命令还携带N个Key指针的情况下,通过解析所述第四Key-Value命令获得所述第四Key-Value命令携带的N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述N个Key;或在所述第四Key-Value命令携带指向N个Key指针的指针的情况下,基于所述第四Key-Value命令携带的指向所述N个Key指针的指针,从所述启动器的缓存区或所述第四Key-Value命令的随命令数据区获取所述N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述N个Key;
在所述第四Key-Value命令还携带了N个元数指针的情况下,通过解析所述第四Key-Value命令获得所述第四Key-Value命令携带的N个元数据指针;或者在所述第四Key-Value命令还携带了指向N个元数据指针的指针的情况下,基于所述第四Key-Value命令所携带的指向所述N个元数据指针的指针,从所述启动器的缓存区或者所述第四Key-Value命令的随命令数据区获取所述N个元数据指针;
在所述目标器的NVM中查找所述N个Key对应的N条Value的元数据;将所述N条Value中的每条Value的元数据写入所述N个元数据指针之中的不同元数据指针所指向的所述启动器的缓存区,所述N条Value的元数据之中与Key-i对应的Value的元数据,被写入到所述N个元数据指针中的与所述Key-i对应的元数据指针所指向的所述启动器的缓存区,所述Key-i对应的Value的元数据包含Key-i对应的Value的长度信息。
其中,上述举例示例性的给出了在NoF场景下进行获取Value的元数据的一些可能的实施方式。相应的,启动器可基于Key-i对应的Value的长度信息来为Key-i对应的Value分配匹配Value长度的缓存区,针对其他Key对应的Value的情况可以此类推。
又例如,针对NVMe场景,假设所述第一操作方式指示所指示的操作方式为删除操作,那么,所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作包括:将所述N个Key对应的Value从所述NVMe的NVM中删除。
其中,上述举例示例性的给出了在NVMe场景下进行删除Value的一些可能的实施方式。
又例如,针对NoF场景,假设所述第一操作方式指示所指示的操作方式为删除操作,那么,所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作可包括:将所述N个Key对应的Value从所述目标器的NVM中删除。
其中,上述举例示例性的给出了在NoF场景下进行删除Value的一些可能的实施方式。
又例如,针对NVMe场景,假设所述第一操作方式指示所指示的操作方式为写入操作,所述第一Key-Value命令还携带N个Value指针或N条Value;
那么,在所述第一Key-Value命令还携带N个Value指针的情况下,所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作包括:从所述第一Key-Value命令携带的N个Value指针所指向的缓存区获取所述N个Key对应的N条Value,将所述N条Value写入到所述NVMe的NVM中;
或者,在所述第一Key-Value命令还携带N条Value情况下,所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作包括:通过解析所述第一Key-Value命令获取所述第一Key-Value命令携带的所述N条Value,将所述N条Value写入所述NVMe的NVM中。
其中,上述举例示例性的给出了在NVMe场景下进行写入Value的一些可能的实施方式。
又例如,针对NoF场景,假设所述第一操作方式指示所指示的操作方式为写入操作,所述第一Key-Value命令还携带了N条Value或者N个Value指针或者指向N个Value指针的指针。
那么,在所述第一Key-Value命令携带N条Value的情况下,所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作包括:通过解析所述第一Key-Value命令获得所述第一Key-Value命令携带的N条Value;将所述N条Value写入所述目标器的NVM中。
或者,在所述第一Key-Value命令还携带N个Value指针的情况下,针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作包括:通过解析所述第一Key-Value命令获得所述第一Key-Value命令携带的N个Value指针;从所述N个Value指针所指向的所述启动器的缓存区获取所述N个Key对应的N条Value,将所述N条Value写入所述目标器中的NVM中。
或者,在所述第一Key-Value命令还携带了指向N个Value指针的指针的情况下,针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作包括:基于所述第一Key-Value命令携带的所述指向N个Value指针的指针,从所述启动器的缓存区或所述第一Key-Value命令的随命令数据区获取所述N个Value指针;从所述N个Value指针所指向的所述启动器的缓存区获取所述N个Key对应的N条Value,将所述N条Value写入所述目标器中的NVM中。
其中,上述举例示例性的给出了在NoF场景下进行写入Value的一些可能的实施方式。
针对NoF场景,在一些可能实施方式中,在接收所述第一Key-Value命令之前所述方法还包括:所述NVMe接收格式符合NVMe接口标准的第三命令,所述第三命令携带第三操作方式指示和第三操作对象类型指示,其中,所述第三操作方式指示所指示的操作方式为获取操作,所述第三操作对象指示所指示的操作对象类型包括Key;所述第三命令还携带Key集合指针;当所述第三命令还携带了规则指针的情况下,从所述规则指针所指向的缓存区获取Key集合遍历规则;或者,当所述第三命令还携带了Key集合遍历规则的情况下,通过解析所述第三命令获取所述第三命令携带的所述Key集合遍历规则;基于所述Key集合遍历规则从所述NVMe的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的缓存区。
其中,上述举例示例性的给出了在NVMe场景下进行获取Key的一些可能的实施方式。
针对NoF场景,在一些可能实施方式中,接收所述第四Key-Value命令之前所述方法还可包括:所述目标器接收格式符合NVMe接口标准的第五命令,所述第五命令携带第五操作方式指示和第五操作对象类型指示,其中,所述第五操作方式指示所指示的操作方式为获取操作,其中,所述第五操作对象类型指示所指示的操作对象类型包括Key;当所述第五命令还携带指向规则指针的指针和指向Key集合指针的指针的情况下,基于所述第五命令携带的指向规则指针的指针,从所述启动器的缓存区或所述第五命令的随命令数据区获取所述规则指针;基于所述第五命令携带的指向Key集合指针的指针,从所述启动器的缓存区或所述第五命令的随命令数据区获取所述Key集合指针;从所述规则指针所指向的所述启动器的缓存区获取Key集合遍历规则;基于所述Key集合遍历规则从所述目标器的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的所述启动器的缓存区。
或者,
所述目标器接收格式符合NVMe接口标准的第五命令,所述第五命令携带第五操作方式指示和第五操作对象类型指示,其中,所述第五操作方式指示所指示的操作方式为获取操作,所述第五操作对象类型指示所指示的操作对象类型包括Key;当所述第五命令还携带规则指针和Key集合指针的情况下,从所述规则指针所指向的所述启动器的缓存区获取Key集合遍历规则;基于所述Key集合遍历规则从所述目标器的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的所述启动器的缓存区。
或者,
所述目标器接收格式符合NVMe接口标准的第五命令,其中,所述第五命令携带第五操作方式指示和第五操作对象类型指示,其中,所述第五操作方式指示所指示的操作方式为获取操作,其中,所述第五操作对象类型指示所指示的操作对象类型包括Key;当所述第五命令还携带了Key集合遍历规则和携带Key集合指针的情况下,通过解析所述第五命令获取所述第五命令所携带的所述Key集合遍历规则;基于所述Key集合遍历规则从所述目标器的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的所述启动器的缓存区。
其中,上述举例示例性的给出了在NoF场景下获取Key的一些可能的实施方式。
其中,所述N个Key中的部分或全部Key例如可为所述Key集合中的部分或全部Key。
本申请各实施例中提及的“指针”也可称“指针描述符”。例如“Value指针”也可称“Value指针描述符”。例如“元数据指针”也可称“元数据指针描述符”。例如“Key指针”也可称“Key指针描述符”,其他情况可以此类推。其中,可以理解的是,Key指针表示指向Key的指针,Value指针表示指向Value的指针,元数据指针表示指向Value的元数据的指针,其他情况则可以此类推。
本申请各实施例中,分配给key的缓存区可简称“key缓存区”;分配给元数据的缓存区可简称“元数据缓存区”,分配给Value的缓存区可简称“Value缓存区”,其他情况则可以此类推。
可以看出,本实施例技术方案中,创新引入了格式符合NVMe接口标准的Key-Value命令,即将Key-Value命令和NVMe接口标准进行了有机融合,使得可支持NVMe接口标准的目标器(或NVMe)识别和执行Key-Value命令变得有了可能。当接收格式符合NVMe接口标准的Key-Value命令,目标器(或NVMe)获取所述Key-Value命令对应的N个Key,针对所述N个Key之中的每个Key分别对应的Value执行所述Key-Value命令对应的操作,这种新型的访问机制拓展了NoF技术(NVMe技术)的访问方式支持能力,使NoF技术(NVMe技术)可支持Key-value访问方式而不仅限于支持传统块访问方式,进而有利于拓展NoF技术(NVMe技术)的应用范围,进而有利于更好适应例如大数据应用和云存储等新需求。
为便于更好的理解上述技术方案,下面结合一些具体应用场景进行详细举例描述。
请参见图4-A,图4-A是本发明另一实施例提供的Kget命令对应的NVMe场景的一种数据访问方法流程示意图。如图4-A举例所示,本发明的另一个实施例提供的一种数据访问方法可以包括:
S401、处理器发送第一Kget命令。
假设第一Kget命令的格式如图4-B举例所示,其中,第一Kget命令包括元数据字段、Key字段和Value字段等等。其中,Key字段和Value字段可合称KV字段(DW6:9)。其中,所述第一Kget命令的元数据字段(DW10:13)携带元数据指针,所述元数据指针分别指向处理器为元数据分配的缓存区。第一Kget命令的Key字段携带Key指针。此处假设第一Kget命令Value字段为空,即Value字段不携带指向任何缓存区的Value指针(此处假设处理器还未获知所述第一Kmget命令的N个Key分别对应的Value的长度为多少,故而暂无法针对性为之分配满足长度需求的缓存区,因此Value字段暂时为空)。其中,所述第一Kget命令的操作选项字段(DW14:15)指示第一Kget命令为用于请求获取Value的元数据的命令。
例如第一Kget命令的操作选项字段所携带的操作对象类型指示所指示的操作对象类型包括(或为)Value的元数据。例如第一Kget命令的opcode字段所携带的操作方式指示所指示的操作方式为获取操作。
需要说明,本申请各实施例中,当命令的某字段(如元数据字段、Key字段和Value字段)携带多条内容(例如多个指针)时,多条内容之间的排列顺序可以是任意的,并没有特别限定。其中,多条内容的组织形式也可以是多种多样的,例如如果是多个指针,那么这些指针例如可以以散列表(SGL)或者其他形式来组织。
S402、NVMe控制器接收所述第一Kget命令,NVMe控制器通过解析所述第一Kget命令获得所述第一Kget命令的Key字段携带的Key指针,NVMe控制器通过直接内存存取(DMA,Direct MemoryAccess)方式从所述Key指针所指向的缓存区获取Key。
S403、NVMe控制器基于获取的Key从NVM获取所述Key对应的Value的元数据。所述Value的元数据中包含所述Key对应的Value的长度信息(可进一步包括Value版本号等)。
S404、NVMe控制器通过DMA方式,将所述Key对应的Value的元数据写入所述第一Kget命令的元数据字段记录的元数据指针所指向的缓存区。
S405、NVMe控制器通知处理器所述第一Kget命令执行完成。
S406、处理器确认所述第一Kget命令执行完成。
S407、处理器根据被写入缓存区的所述Key对应的Value的元数据,获悉所述Key对应的Value的长度,进而据此为所述Key对应的Value分配满足长度需求的缓存区。
S408、处理器发送第二Kget命令。
其中,假设第二Kget命令的格式如图4-C举例所示,其中,第二Kget命令包括元数据字段、Key字段和Value字段等。其中,Key字段和Value字段可合称KV字段(DW6:9)。
所述第二Kget命令的元数据字段(DW10:13)携带元数据指针,所述元数据指针指向处理器为元数据分配的缓存区(其中,所述第二Kget命令的元数据字段携带的元数据指针所指向的缓存区,可能同于或不同于所述第一Kget命令的元数据字段携带的元数据指针所指向的缓存区)。所述第二Kget命令的Key字段携带Key指针。所述第二Kget命令的Value字段携带Value指针(Value指针指向在步骤S407中处理器为所述Key对应的Value分配的缓存区)。
所述第二Kget命令的操作选项字段(DW14:15)指示第二Kget命令为获取Value的命令。
例如第二Kget命令的操作选项字段所携带的操作对象类型指示所指示的操作对象类型包括Value(还可包括元数据)。例如第二Kget命令的opcode字段所携带的操作方式指示所指示的操作方式为获取操作。
S409、NVMe控制器接收所述第二Kget命令,NVMe控制器通过解析所述第二Kget命令获得所述第二Kget命令的Key字段携带的Key指针,NVMe控制器通过DMA方式从该Key指针所指向的缓存区获取Key。
S410、NVMe控制器基于获取的所述Key获取所述Key对应的Value和所述Key对应的Value的元数据。
S411、NVMe控制器通过DMA方式将获取的所述Key对应的Value的元数据写入所述第二Kget命令的元数据字段(DW10:13)携带的元数据指针所指向的缓存区。NVMe控制器通过DMA方式将获取的所述Key对应的Value写入所述第二Kget命令的Value字段携带的Value指针所指向的缓存区。
S412、NVMe控制器可通知处理器所述第二Kget命令执行完成。
S413、处理器可进一步确认所述第二Kget命令执行完成。
可以看出,上述举例示例性的给出了在NVMe场景下高效获取Value的一些可能的实施方式。
请参见图5-A,图5-A是本发明另一实施例提供的Kget命令对应的NoF场景的一种数据访问方法流程示意图。如图5-A举例所示,本发明的另一个实施例提供的一种数据访问方法可以包括:
S501、启动器(Initiator)向目标器(Target)发送第三Kget命令。
假设第三Kget命令的格式如图5-B举例所示,其中,第三Kget命令包括元数据字段、Key字段和Value字段。其中,Key字段和Value字段可以合称为KV字段(DW6:9)。第三Kget命令的Value字段为空,此处假设启动器还未获知所述第三Kget命令的Key对应的Value的长度为多少,故而暂无法针对性为之分配满足长度需求的缓存区,因此Value字段暂时为空。所述第三Kget命令的元数据字段(DW10:13)携带指向元数据指针的指针,所述元数据指针指向处理器为元数据分配的缓存区。其中,所述第三Kget命令的Key字段携带指向Key指针的指针。其中,所述第三Kget命令的操作选项字段(DW14:15)指示第三Kget命令为用于请求获取Value的元数据的命令。
例如第三Kget命令的操作选项字段所携带的操作对象类型指示所指示的操作对象类型包括或为Value的元数据。例如第三Kget命令的opcode字段所携带的操作方式指示所指示的操作方式为获取操作。
S502、目标器接收所述第三Kget命令。目标器通过解析所述第三Kget命令来获得第三Kget命令的Key字段携带的指向Key指针的指针和第三Kget命令的元数据字段携带的指向元数据指针的指针。
其中,若第三Kget命令的Key字段携带的指向Key指针的指针具体指向了启动器缓存区(例如图5-B举例所示),目标器可基于第三Kget命令的Key字段所携带的指向Key指针的指针,通过远程直接内存存取(RDMA,Remote DMA)方式从启动器缓存区获取Key指针。并且,若第三Kget命令的元数据字段携带的指向元数据指针的指针具体指向了启动器缓存区,那么,目标器可基于第三Kget命令的元数据字段携带的指向元数据指针的指针,通过RDMA方式从启动器缓存区获取元数据指针。
或者,若第三Kget命令的Key字段携带的指向Key指针的指针具体指向第三Kget命令的随命令数据区(如图5-C举例所示),那么目标器可以基于所述第三Kget命令的Key字段所携带的指向Key指针的指针,从第三Kget命令的随命令数据区获取Key指针。并且若第三Kget命令的元数据字段携带的指向元数据指针的指针具体指向了第三Kget命令的随命令数据区,那么,目标器可基于第三Kget命令的元数据字段携带的指向元数据指针的指针,从第三Kget命令的随命令数据区获取元数据指针。
S503、目标器基于获取的Key指针,通过RDMA方式从启动器缓存区获取所述Key指针所指向的Key。
S504、目标器从NVM获取所述Key对应的Value的元数据。所述Value的元数据中包含所述Key对应的Value的长度信息(所述Value的元数据可进一步包含Value版本号等)。
S505、目标器通过RDMA方式,将所述Key对应的Value的元数据写入所述元数据指针所指向的启动器缓存区。
S506、目标器还可进一步通知启动器所述第三Kget命令执行完成。
S507、启动器确认所述第三Kget命令执行完成。
S508、启动器根据被写入缓存区的所述Key对应的Value的元数据,获悉所述Key对应的Value的长度,进而据此为所述Key对应的Value分配满足长度需求的启动器缓存区。
S509、启动器发送第四Kget命令。
其中,假设第四Kget命令的格式如图5-D举例所示,其中,第四Kget命令包括元数据字段、Key字段和Value字段。其中,Key字段和Value字段可合称KV字段(DW6:9)。
第四Kget命令的Value字段携带指向Value指针的指针(Value指针指向在步骤S508中启动器为所述Key对应的Value分配的启动器缓存区)。所述第四Kget命令的元数据字段(DW10:13)携带指向元数据指针的指针,所述元数据指针指向启动器为元数据分配的启动器缓存区。所述第四Kget命令的Key字段携带指向Key指针的指针。第四Kget命令的操作选项字段(DW14:15)指示第四Kget命令为用于请求获取Value的命令。第四Kget命令对应的元数据指针(即第四Kget命令的元数据字段(DW10:13)携带的指针所指向的元数据指针)所指向的缓存区,可能同于或不同于所述第三Kget命令对应的元数据指针(即所述第三Kget命令的元数据字段(DW10:13)携带的指针所指向的元数据指针)所指向的缓存区。
例如第四Kget命令的操作选项字段所携带的操作对象类型指示所指示的操作对象类型包括Value(还可包括元数据)。例如第四Kget命令的opcode字段所携带的操作方式指示所指示的操作方式为获取操作。
S510、目标器接收所述第四Kget命令,目标器通过解析所述第四Kget命令来获得第四Kget命令的Key字段携带的指向Key指针的指针、第四Kget命令的Value字段携带的指向Value指针的指针和第四Kget命令的元数据字段携带的指向元数据指针的指针。
其中,若第四Kget命令的Key字段携带的指向Key指针的指针具体指向启动器缓存区(例如图5-D举例所示),那么,目标器可基于所述第四Kget命令的Key字段所携带的指向Key指针的指针,通过RDMA方式从启动器缓存区获取Key指针。并且若第四Kget命令的元数据字段携带的指向元数据指针的指针具体指向启动器缓存区,那么目标器基于第四Kget命令的元数据字段携带的指向元数据指针的指针,通过RDMA方式从启动器缓存区获取元数据指针。并且若第四Kget命令的元数据字段携带的指向Value指针的指针具体指向启动器缓存区,那么,目标器可以基于第四Kget命令的Value字段携带的指向Value指针的指针,通过RDMA方式从启动器缓存区获取Value指针。
或者,若第四Kget命令的Key字段携带的指向Key指针的指针具体指向第四Kget命令的随命令数据区(例如图5-E举例所示),目标器基于所述第四Kget命令的Key字段所携带的指向Key指针的指针,从第四Kget命令的随命令数据区获取Key指针。并且若第四Kget命令的元数据字段携带的指向元数据指针的指针具体指向第四Kget命令的随命令数据区,目标器基于第四Kget命令的元数据字段携带的指向元数据指针的指针,从第四Kget命令的随命令数据区获取元数据指针。并且若第四Kget命令的Value字段携带的指向Value指针的指针具体指向第四Kget命令的随命令数据区,那么,目标器基于第四Kget命令的Value字段携带的指向Value指针的指针,从第四Kget命令的随命令数据区获取Value指针。
S511、目标器基于获取的Key指针,通过RDMA方式从启动器缓存区获取所述Key指针所指向的Key。
S512、目标器从NVM获取所述Key对应的Value和所述Key对应的Value的元数据。
S513、目标器通过DMA方式将所述Key对应的Value写入第四Kget命令对应的Value指针所指向的缓存区。目标器通过DMA方式将所述Key对应的Value的元数据写入第四Kget命令对应的元数据指针所指向的缓存区。
S514、目标器还可进一步通知启动器所述第四Kget命令执行完成。
S515、启动器确认所述第四Kget命令执行完成。
可以看出,上述举例示例性的给出了在NoF场景下高效获取Value的一些可能的实施方式。
请参见图6-A,图6-A是本发明另一实施例提供的Kput命令对应的NVMe场景的一种数据访问方法流程示意图。如图6-A举例所示,本发明的另一个实施例提供的一种数据访问方法可以包括:
S601、处理器发送第一Kput命令。
假设第一Kput命令的格式如图6-B举例所示,其中,第一Kput命令包括元数据字段、Key字段和Value字段,其中,Key字段和Value字段可以合称为KV字段(DW6:9)。
其中,所述第一Kput命令的Key字段携带Key指针,所述Key指针指向处理器为Key分配的缓存区,第一Kput命令的Value字段携带Value指针,Value指针指向处理器为所述Key对应的Value分配的缓存区。其中,所述第一Kput命令的元数据字段(DW10:13)携带元数据指针,所述元数据指针指向处理器为所述Value的元数据分配的缓存区。所述第一Kput命令的操作选项字段(DW14:15)指示第一Kput命令为用于请求写入Value的命令。
例如第一Kput命令的操作选项字段所携带的操作对象类型指示所指示的操作对象类型包括Value(还可包括Key和/或元数据)。例如第一Kput命令的opcode字段所携带的操作方式指示所指示的操作方式为写入操作。
S602、NVMe控制器接收所述第一Kput命令,NVMe控制器通过解析所述第一Kput命令获得所述第一Kput命令的Key字段携带的Key指针,元数据字段携带的元数据指针和Value字段携带的Value指针。
S603、NVMe控制器可通过DMA方式从所述Key指针所指向的缓存区获取Key。NVMe控制器通过DMA方式从所述Value指针所指向的缓存区获取所述Key对应的Value。NVMe控制器通过DMA方式从所述元数据指针所指向的缓存区获取所述Value的元数据。
S604、NVMe控制器将获取的所述Key、所述Key对应的Value和所述Value的元数据写入NVM。
S605、NVMe控制器通知处理器所述第一Kput命令执行完成。
S606、处理器可进一步确认所述第一Kput命令执行完成。
可以看出,上述举例示例性的给出了在NVMe场景下高效写入Value的一些可能的实施方式。
请参见图7-C,图7-C是本发明另一实施例提供的Kput命令对应的NoF场景的一种数据访问方法流程示意图。如图7-C举例所示,本发明的另一个实施例提供的一种数据访问方法可以包括:
S701、启动器向目标器发送第二Kput命令。
假设第二Kput命令的格式如图7-A举例所示,其中,第二Kput命令包括元数据字段、Key字段和Value字段。其中,Key字段和Value字段可以合称为KV字段(DW6:9)。
所述第二Kput命令的Key字段携带指向Key指针的指针,所述Key指针指向处理器为Key分配的缓存区。第二Kput命令的Value字段携带指向Value指针的指针,Value指针指向处理器为所述Key对应的Value分配的缓存区。所述第二Kput命令的元数据字段(DW10:13)携带指向元数据指针的指针,所述元数据指针指向处理器为所述Value的元数据分配的缓存区。第二Kput命令的操作选项字段(DW14:15)指示第二Kput命令为用于请求写入Value的命令。
例如第二Kput命令的操作选项字段所携带的操作对象类型指示所指示的操作对象类型包括Value(还可包括Key和元数据等)。例如第二Kput命令的opcode字段所携带的操作方式指示所指示的操作方式为写入操作。
S702、目标器接收所述第二Kput命令,目标器通过解析所述第二Kput命令来获得所述第二Kput命令的Key字段携带的指向Key指针的指针、元数据字段携带的指向元数据指针的指针和Value字段携带的指向Value指针的指针。
其中,若所述第二Kput命令的Key字段携带的指向Key指针的指针具体指向了启动器缓存区(如图7-A举例),目标器基于第二Kput命令的Key字段携带的指向Key指针的指针,通过RDMA方式从启动器缓存区获取Key指针。并且若第二Kput命令的元数据字段携带的指向元数据指针的指针具体指向了启动器缓存区,目标器基于第二Kput命令的元数据字段携带的指向元数据指针的指针,通过RDMA方式从启动器缓存区获取元数据指针。并且,若第二Kput命令的Value字段携带的指向Value指针的指针具体指向了启动器缓存区,目标器基于第二Kput命令的Value字段携带的指向Value指针的指针,通过RDMA方式从启动器缓存区获取Value指针。
或者,若第二Kput命令的Key字段携带的指向Key指针的指针具体指向了第二Kput命令的随命令数据区(如图7-B举例),那么,目标器基于第二Kput命令的Key字段携带的指向Key指针的指针,从第二Kput命令的随命令数据区获取Key指针。并且若第二Kput命令的元数据字段携带的指向元数据指针的指针具体指向了第二Kput命令的随命令数据区,目标器基于第二Kput命令的元数据字段携带的指向元数据指针的指针,从第二Kput命令的随命令数据区获取元数据指针。并且若所述第二Kput命令的Value字段携带的指向Value指针的指针具体指向了第二Kput命令的随命令数据区,目标器基于第二Kput命令的Value字段携带的指向Value指针的指针,从第二Kput命令的随命令数据区获取Value指针。
S703、目标器通过RDMA方式,从所述Key指针所指向的启动器缓存区获取Key。目标器通过RDMA方式,从所述Value指针所指向的启动器缓存区获取所述Key对应的Value。目标器通过RDMA方式,从所述元数据指针所指向的启动器缓存区获取所述Value的元数据。
S704、目标器将获取的所述Key、所述Key对应的Value和所述Value的元数据写入NVM。
S705、目标器通知启动器所述第二Kput命令执行完成。
S706、启动器可进一步确认所述第二Kput命令执行完成。
可以看出,上述举例示例性的给出了在NoF场景下高效写入Value的一些可能的实施方式。
请参见图8-B,图8-B是本发明另一实施例提供的Kdel命令对应的NVMe场景的一种数据访问方法流程示意图。如图8-B举例所示,本发明的另一个实施例提供的一种数据访问方法可以包括:
S801、处理器发送第一Kdel命令。
假设第一Kdel命令的格式如图8-A举例所示,其中,第一Kdel命令包括元数据字段(可选)、Key字段和Value字段(可选),Key字段和Value字段可合称KV SGL字段(DW6:9)。
其中,所述第一Kdel命令的Key字段携带Key指针,所述Key指针指向处理器为Key分配的缓存区。所述第一Kdel命令的元数据字段(DW10:13)携带元数据指针,其中,所述元数据指针指向处理器为元数据分配的缓存区。所述第一Kdel命令的操作选项字段(DW14:15)指示第一Kdel命令为用于请求删除Value的命令。
例如第一Kdel命令的操作选项字段所携带的操作对象类型指示所指示的操作对象类型包括Value(还可包括Key和元数据等)。例如第一Kdel命令的opcode字段所携带的操作方式指示所指示的操作方式为删除操作。
S802、NVMe控制器接收所述第一Kdel命令,NVMe控制器通过解析所述第一Kdel命令获得所述第一Kdel命令的Key字段携带的Key指针。若所述第一Kdel命令的元数据字段携带元数据指针,NVMe控制器还可通过解析所述第一Kdel命令获得所述第一Kdel命令的元数据字段携带的元数据指针。
S803、NVMe控制器可通过DMA方式,从所述Key指针所指向的缓存区获取Key。
此外,若所述第一Kdel命令的元数据字段携带元数据指针,NVMe控制器可通过DMA方式,从所述元数据指针所指向的缓存区获取Key对应的Value的元数据(元数据包括Value版本号)。
S804、NVMe控制器在NVM中查找并删除所述Key对应的Value。
其中,若第一Kdel命令的元数据字段未携带元数据指针,NVMe控制器将NVM中所述Key对应的所有版本的Value进行删除。此外,若第一Kdel命令的元数据字段携带元数据指针,并且,NVMe控制器通过DMA方式从所述元数据指针所指向的缓存区获取到了所述Key对应的Value的元数据(元数据包括Value版本号),那么,NVMe控制器将NVM中的所述Key对应的所有版本的Value中,与所述元数据包括的Value版本号对应的Value进行删除,而可保留其它版本的Value。
S805、NVMe控制器通知处理器所述第一Kdel命令执行完成。
S806、处理器可进一步确认所述第一Kdel命令执行完成。
可以看出,上述举例示例性的给出了在NVMe场景下高效刹删除Value的一些可能的实施方式。
请参见图9-A,图9-A是本发明另一实施例提供的Kdel命令对应的NoF场景的一种数据访问方法流程示意图。如图9-A举例所示,本发明的另一个实施例提供的一种数据访问方法可以包括:
S901、启动器向目标器发送第二Kdel命令。
假设第二Kdel命令的格式如图9-B举例所示,其中,第二Kdel命令可包括元数据字段(可选)、Key字段和Value字段(可选),Key字段和Value字段可合称KV SGL字段(DW6:9)。
其中,第二Kdel命令的Key字段携带指向Key指针的指针,所述Key指针指向启动器为Key分配的缓存区。第二Kdel命令的元数据字段(DW10:13)携带指向元数据指针的指针,其中,所述元数据指针指向启动器为元数据分配的缓存区。所述第二Kdel命令的操作选项字段(DW14:15)指示第二Kdel命令为用于请求删除Value的命令。
例如第二Kdel命令的操作选项字段所携带的操作对象类型指示所指示的操作对象类型包括Value(还可包括Key和元数据等)。例如第二Kdel命令的opcode字段所携带的操作方式指示所指示的操作方式为删除操作。
S902、目标器接收所述第二Kdel命令,目标器通过解析所述第二Kdel命令获得所述第二Kdel命令的Key字段携带的指向Key指针的指针。此外,若所述第二Kdel命令的元数据字段携带指向元数据指针的指针,目标器还可通过解析所述第二Kdel命令获得所述第二Kdel命令的元数据字段携带的指向元数据指针的指针。
其中,若所述第二Kdel命令的Key字段携带的指向Key指针的指针具体指向了启动器缓存区(如图9-B举例所示),那么,目标器可以基于第二Kdel命令的Key字段携带的指向Key指针的指针,通过RDMA方式从启动器缓存区获取Key指针。并且,若第二Kdel命令的元数据字段携带的指向元数据指针的指针具体指向了启动器缓存区,那么,目标器可以基于第二Kdel命令的元数据字段携带的指向元数据指针的指针,通过RDMA方式从启动器缓存区获取元数据指针。
或者,若第二Kdel命令的Key字段携带的指向Key指针的指针具体指向了第二Kdel命令的随命令数据区(如图9-C举例所示),目标器基于第二Kdel命令的Key字段携带的指向Key指针的指针,从第二Kdel命令的随命令数据区获取Key指针。并且若第二Kdel命令的元数据字段携带的指向元数据指针的指针具体指向了第二Kdel命令的随命令数据区,目标器基于第二Kdel命令的元数据字段携带的指向元数据指针的指针,从第二Kdel命令的随命令数据区获取元数据指针。
S903、目标器可通过RDMA方式从所述Key指针所指向的启动器缓存区获取Key。此外,如果所述第二Kdel命令的元数据字段携带了指向元数据指针的指针,目标器可通过DMA方式从所述元数据指针所指向的启动器缓存区获取所述Key对应的Value的元数据(元数据包括Value版本号)。
S904、目标器在NVM中查找并删除所述Key对应的Value。
若第二Kdel命令的元数据字段未携带指向元数据指针的指针,目标器将NVM中所述Key对应的所有版本的Value进行删除。此外,若第二Kdel命令的元数据字段携带指向元数据指针的指针,并且,目标器通过RDMA方式从所述元数据指针所指向的缓存区获取到了所述Key对应的Value的元数据(元数据包括Value版本号),那么,目标器可以将NVM中的所述Key对应的所有版本的Value中,与所述元数据所包括Value版本号对应的Value进行删除,而可保留所述Key对应的其它版本的Value。
S905、目标器通知启动器所述第二Kdel命令执行完成。
S906、启动器可进一步确认所述第二Kdel命令执行完成。
可以看出,上述举例示例性的给出了在NoF场景下高效删除Value的一些可能的实施方式。
请参见图10-B,图10-B是本发明另一实施例提供的Kmget命令对应的NVMe场景的一种数据访问方法流程示意图。如图10-B举例所示,本发明的另一个实施例提供的一种数据访问方法可以包括:
S1001、处理器发送第一Kmget命令。
假设第一Kmget命令的格式如图10-A举例所示,其中,第一Kmget命令包括元数据字段、Key字段和Value字段。其中,Key字段和Value字段可合称KV字段(DW6:9)。其中,所述第一Kmget命令的元数据字段(DW10:13)携带N个元数据指针,所述N个元数据指针分别指向处理器为元数据分配的N个缓存区。其中,所述第一Kmget命令的Key字段携带N个Key指针。其中,所述N个Key指针与所述N个元数据指针之间是一一对应关系。此处假设第一Kmget命令的Value字段为空,即Value字段不携带指向任何缓存区的Value指针(此处假设处理器还未获知所述第一Kmget命令的N个Key分别对应的Value的长度为多少,故而暂无法针对性为之分配满足长度需求的缓存区,因此,Value字段暂时为空)。
本实施例中所述N为大于1的整数。
所述第一Kmget命令的操作选项字段(DW14:15)指示第一Kmget命令为获取Value的元数据的命令,操作选项字段还可携带所述第一Kmget命令的Key字段携带的Key指针数量信息(N个),操作选项字段还可携带第一Kmget命令的Key字段携带的N个Key指针的总长度信息。
例如第一Kmget命令的操作选项字段所携带的操作对象类型指示所指示的操作对象类型包括(或为)Value的元数据。例如第一Kmget命令的opcode字段所携带的操作方式指示所指示的操作方式为获取操作。
S1002、NVMe控制器接收所述第一Kmget命令,NVMe控制器通过解析所述第一Kmget命令获得第一Kmget命令的Key字段携带的N个Key指针,NVMe控制器可以通过DMA方式从所述N个Key指针所分别指向的N个缓存区获取N个Key。
S1003、NVMe控制器基于获取的N个Key从NVM获取所述N个Key分别对应的Value的元数据(总计N条Value的元数据)。N条Value的元数据与所述N个Key之间是一一对应关系。任意一个Value的元数据中包含相应Value的长度信息(可进一步包括Value版本号等)。
S1004、NVMe控制器通过DMA方式,将所述N个Key对应的Value的元数据写入到所述第一Kmget命令的元数据字段记录的N个元数据指针所指向的缓存区。其中,所述N条Value的元数据之中与Key-i(所述Key-i为所述N个Key之中的任意一个Key)对应的Value的元数据,被写入到所述N个元数据指针中的与所述Key-i对应的元数据指针所指向的缓存区,所述Key-i对应的Value的元数据包含所述Key-i对应的Value的长度信息。
S1005、NVMe控制器通知处理器所述第一Kmget命令执行完成。
S1006、处理器确认所述第一Kmget命令执行完成。
S1007、处理器可根据被写入相应缓存区的所述N个Key对应的Value的元数据,获悉所述N个Key对应的Value的长度,进而据此为所述N个Key对应的Value分配满足长度需求的N个缓存区。
S1008、处理器发送第二Kmget命令。
其中,假设第二Kmget命令的格式如图10-C举例所示,第二Kmget命令包括元数据字段、Key字段和Value字段,其中,Key字段和Value字段可合称KV字段(DW6:9)。所述第二Kmget命令的元数据字段(DW10:13)携带N个元数据指针,其中,所述N个元数据指针分别指向处理器为元数据分配的N个缓存区。其中,所述第二Kmget命令的Key字段携带N个Key指针。所述第二Kmget命令的Value字段携带N个Value指针。其中,所述N个Key指针与所述N个元数据指针之间是一一对应关系,而所述N个Value指针和所述N个元数据指针之间是一一对应关系。因此,所述N个Key指针和所述N个元数据指针之间是一一对应关系。其中,所述第二Kmget命令的元数据字段携带的N个元数据指针所指向的缓存区,可能完全同于或部分同于或完全不同于所述第一Kmget命令的元数据字段携带的N个元数据指针所指向的缓存区。其中,N个Value指针指向在步骤S1007中处理器为所述N个Key对应的Value分配的N个缓存区。
所述第二Kmget命令的操作选项字段(DW14:15)指示第二Kmget命令为用于请求获取Value的命令,操作选项字段还可携带所述第二Kmget命令的Key字段携带的Key指针数量信息(N个),操作选项字段还可携带第二Kmget命令的Key字段携带的N个Key指针的总长度信息。
例如第二Kmget命令的操作选项字段所携带的操作对象类型指示所指示的操作对象类型包括Value(还可包括元数据等)。例如第二Kmget命令的opcode字段所携带的操作方式指示所指示的操作方式为获取操作。
S1009、NVMe控制器接收所述第二Kmget命令,NVMe控制器通过解析所述第二Kmget命令获得第二Kmget命令的Key字段携带的N个Key指针,NVMe控制器通过DMA方式从第二Kmget命令的Key字段携带的所述N个Key指针所指向的缓存区获取N个Key。
S1010、NVMe控制器基于获取的N个Key获取所述N个Key对应的Value和所述N个Key对应的Value的元数据。
S1011、NVMe控制器通过DMA方式将获取的所述N个Key对应的Value的元数据写入所述第二Kmget命令的元数据字段携带的N个元数据指针所指向的缓存区。NVMe控制器通过DMA方式将获取的所述N个Key对应的Value写入所述第二Kmget命令的Value字段携带的N个Value指针所指向的缓存区。
其中,所述N条Value的元数据之中与Key-i(所述Key-i为所述N个Key中的任意一个Key)对应的Value的元数据,被写入到所述N个元数据指针中的与所述Key-i对应的元数据指针所指向的缓存区。
S1012、NVMe控制器通知处理器所述第二Kmget命令执行完成。
S1013、处理器可进一步确认所述第二Kmget命令执行完成。
可以看出,上述举例示例性的给出了在NVMe场景下高效获取Value的一些可能的实施方式。
请参见图11-A,图11-A是本发明另一实施例提供的Kmget命令对应的NoF场景的一种数据访问方法流程示意图。如图11-A举例所示,本发明的另一个实施例提供的一种数据访问方法可包括:
S1101、启动器向目标器发送第三Kmget命令。
假设第三Kmget命令的格式如图11-B举例所示,其中,第三Kmget命令包括元数据字段、Key字段和Value字段。其中,Key字段和Value字段可合称KV字段(DW6:9)。
其中,所述第三Kmget命令的元数据字段(DW11:13)携带指向N个元数据指针的指针,其中,所述N个元数据指针分别指向启动器为元数据分配的N个缓存区,可以理解的是,所述N个元数据指针为第三Kmget命令对应的元数据指针。
其中,所述第三Kmget命令的Key字段携带指向N个Key指针的指针。所述N个Key指针分别指向启动器为Key分配的N个缓存区,可以理解,所述N个Key指针为第三Kmget命令对应的Key指针。
所述N个Key指针与所述N个元数据指针之间是一一对应关系。
此处假设第三Kmget命令的Value字段为空,此处假设启动器还未获知所述第三Kmget命令的N个Key分别对应的Value的长度为多少,故而暂无法针对性为之分配满足长度需求的缓存区,因此Value字段暂时为空。
本实施例中所述N为大于1的整数。
所述第三Kmget命令的操作选项字段(DW14:15)指示第三Kmget命令为获取Value的元数据的命令,操作选项字段还可携带所述第三Kmget命令的Key字段对应的Key指针数量信息(N个),操作选项字段还可携带第三Kmget命令的Key字段对应的N个Key指针的总长度信息。
例如第三Kmget命令的操作选项字段所携带的操作对象类型指示所指示的操作对象类型包括或为Value的元数据。例如第三Kmget命令的opcode字段所携带的操作方式指示所指示的操作方式为获取操作。
S1102、目标器接收所述第三Kmget命令,目标器通过解析第三Kmget命令获得第三Kmget命令的Key字段携带的指向N个Key指针的指针,目标器通过解析第三Kmget命令获得第三Kmget命令的Key字段携带的指向N个元数据指针的指针。
其中,若第三Kmget命令的Key字段携带的指向N个Key指针的指针具体指向了启动器缓存区(如图11-B举例所示),那么,目标器可以基于所述第三Kmget命令的Key字段所携带的指向N个Key指针的指针,通过RDMA方式从启动器缓存区获取N个Key指针。并且如果第三Kmget命令的元数据字段携带的指向N个元数据指针的指针具体指向了启动器缓存区,那么,目标器可以基于第三Kmget命令的元数据字段所携带的指向N个元数据指针的指针,通过RDMA方式从启动器缓存区获取N个元数据指针。
或者,若第三Kmget命令的Key字段携带的指向N个Key指针的指针具体指向了第三Kmget命令的随命令数据区(如图11-C举例所示),目标器可以基于所述第三Kmget命令的Key字段所携带的指向N个Key指针的指针,从第三Kmget命令的随命令数据区获取N个Key指针。并且,若第三Kmget命令的元数据字段携带的指向N个元数据指针的指针具体指向了第三Kmget命令的随命令数据区,那么,目标器可基于第三Kmget命令的元数据字段携带的指向N个元数据指针的指针,从第三Kmget命令的随命令数据区获取N个元数据指针。
S1103、目标器基于获取的N个Key指针,通过RDMA方式从启动器缓存区获取所述N个Key指针所指向的N个Key。
S1104、目标器基于获取的N个Key从NVM获取所述N个Key分别对应的Value的元数据(总计N条Value的元数据)。N条Value的元数据与所述N个Key之间是一一对应关系。任意1个Value的元数据中包含相应Value的长度信息(可进一步包括Value版本号等)。
S1105、目标器通过RDMA方式,将所述N个Key对应的Value的元数据写入到所述第三Kmget命令对应的N个元数据指针所指向的启动器缓存区。所述N条Value的元数据之中与Key-i(所述Key-i为所述N个Key之中的任意一个Key)对应的Value的元数据,被写入到所述N个元数据指针中的与所述Key-i对应的元数据指针所指向的缓存区,所述Key-i对应的Value的元数据包含所述Key-i对应的Value的长度信息。
S1106、目标器可进一步通知启动器所述第三Kmget命令执行完成。
S1107、启动器确认所述第三Kmget命令执行完成。
S1108、启动器可根据被写入相应缓存区的所述N个Key对应的Value的元数据,获悉所述N个Key对应的Value的长度,进而据此为所述N个Key对应的Value分配满足长度需求的N个缓存区。
S1109、启动器发送第四Kmget命令。
其中,假设第四Kmget命令的格式如图11-D举例所示,第四Kmget命令包括元数据字段、Key字段和Value字段,其中,Key字段和Value字段可合称KV字段(DW6:9)。
其中,所述第四Kmget命令的元数据字段(DW11:13)携带指向N个元数据指针的指针,其中,所述N个元数据指针分别指向启动器为元数据分配的N个缓存区,可以理解的是,所述N个元数据指针为第四Kmget命令对应的元数据指针。
其中,所述第四Kmget命令的Key字段携带指向N个Key指针的指针。所述N个Key指针分别指向启动器为Key分配的N个缓存区,可以理解,所述N个Key指针为第四Kmget命令对应的Key指针。
所述第四Kmget命令的Value字段携带指向N个Value指针的指针。所述N个Value指针分别指向启动器为Value分配的N个缓存区,可以理解,所述N个Value指针为第四Kmget命令对应的Value指针。
所述N个Key指针与所述N个元数据指针之间是一一对应关系,而所述N个Value指针和所述N个元数据指针之间是一一对应关系。因此,所述N个Key指针和所述N个元数据指针之间是一一对应关系。其中,所述第四Kmget命令对应的N个元数据指针所指向的缓存区,可能完全同于或部分同于或完全不同于所述第三Kmget命令对应的N个元数据指针所指向的缓存区。其中,N个Value指针指向了在步骤S1108中启动器为所述N个Key对应的Value所分配的N个缓存区。
所述第四Kmget命令的操作选项字段(DW14:15)指示第四Kmget命令为获取Value的元数据的命令,操作选项字段还可携带所述第四Kmget命令对应的Key指针数量信息(N个),操作选项字段还可携带第四Kmget命令对应的N个Key指针的总长度信息。
例如第四Kmget命令的操作选项字段所携带的操作对象类型指示所指示的操作对象类型包括Value(还可包括元数据等)。例如第四Kmget命令的opcode字段所携带的操作方式指示所指示的操作方式为获取操作。
S1110、目标器接收所述第四Kmget命令,目标器通过解析第四Kmget命令获得第四Kmget命令的Key字段携带的指向N个Key指针的指针。目标器通过解析第四Kmget命令获得第四Kmget命令的Key字段携带的指向N个元数据指针的指针。目标器通过解析第四Kmget命令获得第四Kmget命令的Value字段携带的指向N个Value指针的指针。
其中,若第四Kmget命令的Key字段携带的指向N个Key指针的指针具体指向了启动器缓存区(如图11-D举例所示),那么目标器基于所述第四Kmget命令的Key字段所携带的指向N个Key指针的指针,通过RDMA方式从启动器缓存区获取N个Key指针。并且如果第四Kmget命令的元数据字段携带的指向N个元数据指针的指针具体指向了启动器缓存区,那么,目标器可以基于第四Kmget命令的元数据字段所携带的指向N个元数据指针的指针,通过RDMA方式从启动器缓存区获取N个元数据指针。并且如果第四Kmget命令的元数据字段携带的指向N个Value指针的指针具体指向了启动器缓存区,那么,目标器可以基于第四Kmget命令的Value字段所携带的指向N个Value指针的指针,通过RDMA方式从启动器缓存区获取N个Value指针。
或者,若第四Kmget命令的Key字段携带的指向N个Key指针的指针具体指向了第四Kmget命令的随命令数据区(如图11-E举例所示),那么,目标器可以基于所述第四Kmget命令的Key字段所携带的指向N个Key指针的指针,从第四Kmget命令的随命令数据区获取N个Key指针。并且若第四Kmget命令的元数据字段携带的指向N个元数据指针的指针具体指向了第四Kmget命令的随命令数据区,那么目标器可基于第四Kmget命令的元数据字段携带的指向N个元数据指针的指针,从第四Kmget命令的随命令数据区获取N个元数据指针。并且若第四Kmget命令的Value字段携带的指向N个Value指针的指针具体指向了第四Kmget命令的随命令数据区,那么目标器可基于第四Kmget命令的Value字段携带的指向N个Value指针的指针,从第四Kmget命令的随命令数据区获取N个Value指针。
S1111、目标器通过RDMA方式从获取的N个Key指针所指向的启动器缓存区获取获取N个Key。
S1112、目标器基于获取的N个Key,从NVM中获取所述N个Key对应的Value(总计N条Value)和所述N个Key对应的Value的元数据(总计N条Value的元数据)。N条Value的元数据与所述N个Key之间是一一对应关系,因此N条Value的元数据与所述N个Key之间是一一对应关系。任意1个Value的元数据中包含相应Value的长度信息(还可进一步包括Value版本号等)。
S1113、目标器通过RDMA方式,将所述N个Key对应的N条Value的元数据写入第四Kmget命令对应的N个元数据指针所指向的启动器缓存区。所述N条Value的元数据之中与Key-i(所述Key-i为所述N个Key之中的任意一个Key)对应的Value的元数据,被写入到所述N个元数据指针中的与所述Key-i对应的元数据指针所指向的缓存区,所述Key-i对应的Value的元数据包含所述Key-i对应的Value的长度信息。
目标器通过RDMA方式,将所述N个Key对应的N条Value写入到所述第四Kmget命令对应的N个Value指针所指向的启动器缓存区。所述N条Value之中与Key-i(所述Key-i为所述N个Key之中的任意一个Key)对应的Value,被写入到所述N个Value指针中的与所述Key-i对应的Value指针所指向的缓存区。
S1114、目标器可进一步通知启动器所述第四Kmget命令执行完成。
S1115、启动器可进一步确认所述第四Kmget命令执行完成。
可以看出,上述举例示例性的给出了在NoF场景下高效获取Value的一些可能的实施方式。
请参见图12-A,图12-A是本发明另一实施例提供的Kmput命令对应的NVMe场景的一种数据访问方法流程示意图。如图12-A举例所示,本发明的另一个实施例提供的一种数据访问方法可以包括:
S1201、处理器发送第一Kmput命令。
假设第一Kmput命令的格式如图12-B举例所示,其中,第一Kmput命令包括元数据字段、Key字段和Value字段,其中,Key字段和Value字段可以合称KV字段(DW6:9)。
其中,所述第一Kmput命令的Key字段携带N个Key指针,所述N个Key指针指向处理器为Key分配的N个缓存区。其中,第一Kmput命令的Value字段携带N个Value指针,N个Value指针指向处理器为所述Key对应的Value分配的N个缓存区。其中,所述第一Kmput命令的元数据字段(DW10:13)携带N个元数据指针,所述N个元数据指针指向了处理器为所述Value的元数据分配的N个缓存区。所述第一Kmput命令的操作选项字段(DW14:15)指示第一Kmput命令为用于请求写入Value的命令。
例如第一Kmput命令的操作选项字段所携带的操作对象类型指示所指示的操作对象类型包括Value(还可包括Key和/或元数据等)。例如第一Kmput命令的opcode字段所携带的操作方式指示所指示的操作方式为写入操作。
所述N个Key指针与所述N个元数据指针之间是一一对应关系,而所述N个Value指针和所述N个元数据指针之间是一一对应关系。因此,所述N个Key指针和所述N个元数据指针之间是一一对应关系。
S1202、NVMe控制器接收所述第一Kmput命令,NVMe控制器通过解析所述第一Kmput命令获得第一Kmput命令的Key字段携带的N个Key指针,元数据字段携带的N个元数据指针和Value字段携带的N个Value指针。
S1203、NVMe控制器可通过DMA方式从所述N个Key指针所指向的缓存区获取N个Key。NVMe控制器通过DMA方式从所述N个Value指针所指向的缓存区获取所述N个Key对应的N个Value。NVMe控制器通过DMA方式从所述N个元数据指针所指向的缓存区获取所述N个Value的元数据。
S1204、NVMe控制器将获取的所述N个Key、所述N个Key对应的N个Value和所述N个Value的元数据写入NVM。
S1205、NVMe控制器通知处理器所述第一Kmput命令执行完成。
S1206、处理器可进一步确认所述第一Kmput命令执行完成。
可以看出,上述举例示例性的给出了在NVMe场景下高效写入Value的一些可能的实施方式。
请参见图13-C,图13-C是本发明另一实施例提供的Kmput命令对应的NoF场景的一种数据访问方法流程示意图。如图13-C举例所示,本发明的另一个实施例提供的一种数据访问方法可以包括:
S1301、启动器向目标器发送第二Kmput命令。
假设第二Kmput命令的格式如图13-A举例所示,其中,第二Kmput命令包括元数据字段、Key字段和Value字段。其中,Key字段和Value字段可以合称KV字段(DW6:9)。
所述第二Kmput命令的Key字段携带指向N个Key指针的指针,所述Key指针指向启动器为N个Key分配的N个缓存区。第二Kmput命令的Value字段携带指向N个Value指针的指针,N个Value指针指向启动器为所述N个Key对应的N个Value分配的N个缓存区。第二Kmput命令的元数据字段(DW10:13)携带指向N个元数据指针的指针,所述N个元数据指针指向启动器为所述N个Value的元数据分配的N个缓存区。第二Kmput命令的操作选项字段(DW14:15)指示第二Kmput命令为用于请求写入Value的命令。
例如第二Kmput命令的操作选项字段所携带的操作对象类型指示所指示的操作对象类型包括Value(还可包括Key和/或元数据等)。例如第二Kmput命令的opcode字段所携带的操作方式指示所指示的操作方式为写入操作。
S1302、目二Kmput标器接收所述第命令,目标器通过解析所述第二Kmput命令来获得第二Kmput命令的Key字段携带的指向N个Key指针的指针、元数据字段携带的指向N个元数据指针的指针和Value字段携带的指向N个Value指针的指针。
其中,若所述第二Kmput命令的Key字段携带的指向N个Key指针的指针具体指向了启动器缓存区(如图13-A举例所示),目标器基于第二Kmput命令的Key字段携带的指向N个Key指针的指针,通过RDMA方式从启动器缓存区获取N个Key指针。并且若第二Kmput命令的元数据字段携带的指向N个元数据指针的指针具体指向了启动器缓存区,目标器基于第二Kmput命令的元数据字段携带的指向N个元数据指针的指针,通过RDMA方式从启动器缓存区获取N个元数据指针。并且,若第二Kmput命令的Value字段携带的指向N个Value指针的指针具体指向了启动器缓存区,那么目标器基于第二Kmput命令的Value字段携带的指向N个Value指针的指针,通过RDMA方式从启动器缓存区获取N个Value指针。
或者,若第二Kmput命令的Key字段携带的指向N个Key指针的指针具体指向了第二Kmput命令的随命令数据区(如图13-B举例所示),目标器基于第二Kmput命令的Key字段携带的指向N个Key指针的指针,从第二Kmput命令的随命令数据区获取N个Key指针。并且若第二Kmput命令的元数据字段携带的指向N个元数据指针的指针具体指向了第二Kmput命令的随命令数据区,目标器基于第二Kmput命令的元数据字段携带的指向N个元数据指针的指针,从第二Kmput命令的随命令数据区获取N个元数据指针。并且若所述第二Kmput命令的Value字段携带的指向N个Value指针的指针具体指向了第二Kmput命令的随命令数据区,目标器基于第二Kmput命令的Value字段携带的指向N个Value指针的指针,从第二Kmput命令的随命令数据区获取N个Value指针。
S1303、目标器通过RDMA方式,从所述N个Key指针所指向的启动器缓存区获取N个Key。目标器通过RDMA方式,从所述N个Value指针所指向的启动器缓存区获取所述N个Key对应的Value。目标器通过RDMA方式,从所述N个元数据指针所指向的启动器缓存区获取所述N个Value的元数据。
S1304、目标器将获取的所述N个Key、所述N个Key对应的N个Value和所述N个Value的元数据写入NVM。
S1305、目标器通知启动器所述第二Kmput命令执行完成。
S1306、启动器可进一步确认所述第二Kmput命令执行完成。
可以看出,上述举例示例性的给出了在NoF场景下高效写入Value的一些可能的实施方式。
请参见图14-A,图14-A是本发明另一实施例提供的Kmdel命令对应的NVMe场景的一种数据访问方法流程示意图。如图14-A举例所示,本发明的另一个实施例提供的一种数据访问方法可以包括:
S1401、处理器发送第一Kmdel命令。
假设第一Kmdel命令的格式如图14-B举例所示,其中,第一Kmdel命令包括元数据字段(可选)、Key字段和Value字段(可选),Key字段和Value字段可合称KV字段(DW6:9)。
其中,第一Kmdel命令的Key字段携带N个Key指针,所述N个Key指针指向处理器为N个Key分配的缓存区。第一Kmdel命令的元数据字段(DW10:13)携带N个元数据指针,其中,所述N个元数据指针指向处理器为Value的元数据分配的缓存区。第一Kmdel命令的操作选项字段(DW14:15)指示第一Kmdel命令为用于请求删除Value的命令。
例如第一Kmdel命令的操作选项字段所携带的操作对象类型指示所指示的操作对象类型包括Value(还可包括Key和/或元数据等)。例如第一Kmdel命令的opcode字段所携带的操作方式指示所指示的操作方式为删除操作。
S1402、NVMe控制器接收所述第一Kmdel命令,NVMe控制器通过解析所述第一Kmdel命令获得第一Kmdel命令的Key字段携带的N个Key指针。若所述第一Kmdel命令的元数据字段携带N个元数据指针,NVMe控制器还可通过解析所述第一Kmdel命令获得所述第一Kmdel命令的元数据字段携带的N个元数据指针。
S1403、NVMe控制器可通过DMA方式,从所述N个Key指针所指向的缓存区获取N个Key。
此外,若所述第一Kmdel命令的元数据字段携带N个元数据指针,NVMe控制器可通过DMA方式,从所述元数据指针所指向的缓存区获取所述N个Key对应的N个Value的元数据(元数据包括Value版本号)。
S1404、NVMe控制器在NVM中查找并删除所述Key对应的Value。
其中,若第一Kmdel命令的元数据字段未携带元数据指针,NVMe控制器将NVM中所述N个Key对应的所有版本的Value进行删除。
此外,若第一Kmdel命令的元数据字段携带了元数据指针,且NVMe控制器通过DMA方式从所述N个元数据指针所指向的缓存区获取到了所述N个Key对应的N个Value的元数据(元数据包括Value版本号),那么,NVMe控制器将NVM中的所述N个Key中的每个Key所对应的所有版本的Value中,与相应元数据包括的Value版本号对应的Value进行删除,而可保留其它版本的Value。举例来说,NVMe控制器可将Key-i(所述Key-i为所述N个Key之中的任意一个Key)对应的Value的元数据所包括的Value版本号对应的Value进行删除从NVM之中删除,而可保留NVM中所述Key-i对应的其它版本Value。
S1405、NVMe控制器通知处理器所述第一Kmdel命令执行完成。
S1406、处理器可进一步确认所述第一Kmdel命令执行完成。
可以看出,上述举例示例性的给出了在NVMe场景下高效删除Value的一些可能的实施方式。
请参见图15-C,图15-C是本发明另一实施例提供的Kmdel命令对应的NoF场景的一种数据访问方法流程示意图。如图15-C举例所示,本发明的另一个实施例提供的一种数据访问方法可以包括:
S1501、启动器向目标器发送第二Kmdel命令。
假设第二Kmdel命令的格式如图15-A举例所示,其中,第二Kmdel命令可包括元数据字段(可选)、Value字段(可选)和Key字段,Key字段和Value字段可合称KV字段(DW6:9)。
其中,第二Kmdel命令的Key字段携带指向N个Key指针的指针,所述N个Key指针指向启动器为N个Key分配的缓存区。其中,第二Kmdel命令的元数据字段(DW10:13)携带指向N个元数据指针的指针,所述N个元数据指针指向了启动器为元数据分配的缓存区。第二Kmdel命令的操作选项字段(DW14:15)指示第二Kmdel命令为用于请求删除Value的命令。
例如第二Kmdel命令的操作选项字段所携带的操作对象类型指示所指示的操作对象类型包括Value(还可包括Key和/或元数据等)。例如第二Kmdel命令的opcode字段所携带的操作方式指示所指示的操作方式为删除操作。
S1502、目标器接收所述第二Kmdel命令,目标器通过解析所述第二Kmdel命令获得所述第二Kmdel命令的Key字段携带的指向N个Key指针的指针。
此外,若所述第二Kmdel命令的元数据字段携带了指向N个元数据指针的指针,目标器还可通过解析所述第二Kmdel命令获得所述第二Kmdel命令的元数据字段携带的指向N个元数据指针的指针。
其中,若所述第二Kmdel命令的Key字段携带的指向N个Key指针的指针具体指向了启动器缓存区(图15-A举例所示),那么,目标器可以基于第二Kmdel命令的Key字段携带的N个指向Key指针的指针,通过RDMA方式从启动器缓存区获取所述N个Key指针。此外,若第二Kmdel命令的元数据字段携带的指向N个元数据指针的指针具体指向了启动器缓存区,那么目标器可基于第二Kmdel命令的元数据字段携带的指向N个元数据指针的指针,通过RDMA方式从启动器缓存区获取N个元数据指针。
或者,若第二Kmdel命令的Key字段携带的指向N个Key指针的指针具体指向了第二Kmdel命令的随命令数据区(图15-B举例所示),目标器基于第二Kmdel命令的Key字段携带的指向N个Key指针的指针,从第二Kmdel命令的随命令数据区获取N个Key指针。此外,若第二Kmdel命令的元数据字段携带的指向N个元数据指针的指针具体指向了第二Kmdel命令的随命令数据区,目标器基于第二Kmdel命令的元数据字段携带的指向N个元数据指针的指针,从第二Kmdel命令的随命令数据区获取N个元数据指针。
S1503、目标器可通过RDMA方式从所述N个Key指针所指向的启动器缓存区获取N个Key。此外,如果所述第二Kmdel命令的元数据字段携带了指向元数据指针的指针,目标器可通过DMA方式从所述N个元数据指针所指向的启动器缓存区获取所述N个Key对应的N个Value的元数据(元数据包括Value版本号等信息)。
S1504、目标器在NVM中查找并删除所述N个Key对应的N条Value。
若第二Kmdel命令的元数据字段未携带指向元数据指针的指针,目标器将NVM中所述N个Key对应的所有版本的Value进行删除。
特别的,如果第二Kmdel命令的元数据字段携带了指向N个元数据指针的指针,并且目标器通过RDMA方式从所述N个元数据指针所指向的启动器缓存区获取到了所述N个Key对应的N个Value的元数据,那么,目标器可将NVM中的所述N个Key中的每个Key所对应的所有版本的Value中,与相应元数据包括的Value版本号对应的Value进行删除,而可保留其它版本的Value。例如目标器可将Key-i(所述Key-i为所述N个Key之中的任意一个Key)对应的Value的元数据所包括的Value版本号对应的Value从NVM中删除,而可保留NVM中所述Key-i对应的其它版本Value。
S1505、目标器通知启动器所述第二Kmdel命令执行完成。
S1506、启动器可进一步确认所述第二Kmdel命令执行完成。
可以看出,上述举例示例性的给出了在NoF场景下高效删除Value的一些可能的实施方式。
请参见图16-A,图16-A是本发明另一实施例提供的Kkeylist命令对应的NVMe场景的一种数据访问方法流程示意图。如图16-A举例所示,本发明的另一个实施例提供的一种数据访问方法可以包括:
S1601、处理器发送第一Kkeylist命令。
假设第一Kkeylist命令的格式如图16-B举例所示,其中,第一Kkeylist命令包括Key字段(DW6:9)和规则字段(DW10:13)等。
其中,第一Kkeylist命令的Key字段携带Key集合指针,所述Key集合指针指向处理器为Key集合分配的缓存区。第一Kkeylist命令的规则字段(DW10:13)携带规则指针,规则指针指向处理器为Key集合遍历规则分配的缓存区。所述第一Kkeylist命令的操作选项字段(DW14:15)指示第一Kkeylist命令为用于请求获取Key集合的命令。
例如第一Kkeylist命令的操作选项字段所携带的操作对象类型指示所指示的操作对象类型包括(或为)Key。例如第一Kkeylist命令的opcode字段所携带的操作方式指示所指示的操作方式为获取操作。
S1602、NVMe控制器接收所述第一Kkeylist命令,NVMe控制器通过解析第一Kkeylist命令获得第一Kkeylist命令的Key字段携带的Key集合指针。NVMe控制器通过解析所述第一Kkeylist命令获得第一Kkeylist命令的规则字段携带的规则指针。
S1603、NVMe控制器可通过DMA方式,从所述规则指针所指向的缓存区获取Key集合遍历规则。
其中,Key集合遍历规则可指定Key集合匹配方法等,比如可以指定起始的Key还是全部的Key等等。如果指定特定Key,则Key集合遍历规则中包含特定Key的信息。Key集合遍历规则可以是正则表达式或其他形式。
S1604、NVMe控制器基于Key集合遍历规则在NVM中查找得到满足Key集合遍历规则的Key集合(可包括一个或多个Key,特殊情况下也可能不包括任何Key)。
S1605、NVMe控制器可通过DMA方式,将得到的Key集合写入所述Key集合指针所指向的缓存区。
S1606、NVMe控制器通知处理器所述第一Kkeylist命令执行完成。
S1607、处理器可进一步确认所述第一Kkeylist命令执行完成。
可以看出,上述举例示例性的给出了在NVMe场景下高效获取Key的一些可能的实施方式。
请参见图17-A,图17-A是本发明另一实施例提供的Kkeylist命令对应的NoF场景的一种数据访问方法流程示意图。如图17-A举例所示,本发明的另一个实施例提供的一种数据访问方法可以包括:
S1701、启动器向目标器发送第二Kkeylist命令。
假设第二Kkeylist命令的格式如图17-B举例所示,第二Kkeylist命令包括Key字段(DW6:9)和规则字段(DW10:13)等。第二Kkeylist命令的Key字段携带指向Key集合指针的指针,所述Key集合指针指向启动器为Key集合分配的启动器的缓存区。
第二Kkeylist命令的规则字段(DW10:13)携带指向规则指针的,所述规则指针指向启动器为Key集合遍历规则分配的启动器的缓存区。所述第二Kkeylist命令的操作选项字段(DW14:15)指示第二Kkeylist命令为用于请求获取Key集合的命令。
例如第二Kkeylist命令的操作选项字段所携带的操作对象类型指示所指示的操作对象类型包括或为key。例如第二Kkeylist命令的opcode字段所携带的操作方式指示所指示的操作方式为获取操作。
S1702、目标器接收所述第二Kkeylist命令,目标器通过解析所述第二Kkeylist命令获得所述第二Kkeylist命令的Key字段携带的指向Key集合指针的指针。目标器通过解析所述第二Kkeylist命令获得所述第二Kkeylist命令的规则字段携带的指向规则指针的指针。
其中,若所述第二Kkeylist命令的Key字段携带的指向Key集合指针的指针具体指向了启动器缓存区(如图17-B举例所示),那么,目标器可以基于第二Kkeylist命令的Key字段携带的指向Key集合指针的指针,通过RDMA方式从启动器缓存区获取Key集合指针。其中,若所述第二Kkeylist命令的规则字段携带的指向规则指针的指针具体指向了启动器的缓存区,那么目标器可以基于第二Kkeylist命令的规则字段携带的指向规则指针的指针,通过RDMA方式从启动器缓存区获取规则指针。
或者,若所述第二Kkeylist命令的Key字段携带的指向Key集合指针的指针具体指向了第二Kkeylist命令的随命令数据区(如图17-C举例所示),目标器可基于第二Kkeylist命令的Key字段携带的指向Key集合指针的指针,从第二Kkeylist命令的随命令数据区获取Key集合指针。其中,若所述第二Kkeylist命令的规则字段携带的指向规则指针的指针具体指向了第二Kkeylist命令的随命令数据区,那么,目标器可以基于第二Kkeylist命令的规则字段携带的指向规则指针的指针,从第二Kkeylist命令的随命令数据区获取规则指针。
S1703、目标器可通过RDMA方式从所述规则指针所指向的缓存区获取Key集合遍历规则。
S1704、目标器基于Key集合遍历规则在NVM中查找得到满足Key集合遍历规则的Key集合。
S1705、目标器可通过RDMA方式,将得到的Key集合写入所述Key集合指针所指向的启动器的缓存区。
S1706、目标器通知启动器所述第二Kkeylist命令执行完成。
S1707、启动器可进一步确认所述第二Kkeylist命令执行完成。
可以看出,上述举例示例性的给出了在NoF场景下高效获取Key的一些可能的实施方式。
下面还提供用于实施上述方案的相关装置。
参见图18,本发明实施例提供的一种NVMe 1800,可包括:
接收单元1810、获取单元1820和操作单元1830。
其中,接收单元1810,用于接收来自处理器的格式符合NVMe接口标准的第一Key-Value命令。其中,所述第一Key-Value命令携带第一操作方式指示和第一操作对象类型指示,所述第一操作对象类型指示所指示的操作对象类型包括Value。
获取单元1820,用于获取所述第一Key-Value命令对应的N个Key,所述N为大于或者等于1的整数。
操作单元1830,用于针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作。
可选的,在本发明的一些可能的实施方式中,所述第一Key-Value命令还携带了所述N个Key,所述获取单元1820具体用于,通过解析所述第一Key-Value命令获取所述Key-Value命令携带的所述N个Key;
或者,所述第一Key-Value命令还携带了N个Key指针,所述获取单元1820具体用于,从所述N个Key指针所指向的缓存区获取所述第一Key-Value命令对应的所述N个Key。
可选的,在本发明的一些可能的实施方式中,所述第一Key-Value命令还携带了N个Value指针,其中,所述第一操作方式指示所指示的操作方式为获取操作。所述操作单元1830具体用于,从所述NVMe的非易失性存储介质(NVM)中获取所述N个Key对应的N条Value,将获取的所述N条Value中的每条Value写入所述N个Value指针中的不同Value指针所指向的缓存区,其中,所述N条Value之中的与Key-i对应的Value,被写入了到所述N个Value指针中的与所述Key-i对应的Value指针所指向的缓存区,其中,所述Key-i为所述N个Key中的任意一个Key。
可选的,在本发明一些可能实施方式中,所述接收单元1810还用于,在接收所述第一Key-Value命令之前,接收格式符合NVMe接口标准的第二Key-Value命令,所述第二Key-Value携带第二操作方式指示和第二操作对象类型指示,所述第二操作方式指示所指示的操作方式为获取操作,其中,所述第二操作对象类型指示所指示的操作对象类型包括Value的元数据,所述第二Key-Value命令还携带N个元数据指针;
所述获取单元1820还可用于,在所述第二Key-Value命令还携带N个Key指针的情况下,从所述N个Key指针所指向的缓存区获取所述N个Key;或在所述第二Key-Value命令还携带所述N个Key的情况下,通过解析所述第二Key-Value命令获取所述第二Key-Value命令携带的所述N个Key。
所述操作单元1830还用于,在所述NVMe的NVM中查找所述N个Key对应的N条Value的元数据;将所述N条Value中的每条Value的元数据写入所述N个元数据指针之中的不同元数据指针所指向的缓存区,所述N条Value的元数据之中与Key-i对应的Value的元数据,被写入到所述N个元数据指针中的与所述Key-i对应的元数据指针所指向的缓存区,其中,所述Key-i对应的Value的元数据包含Key-i对应的Value的长度信息。
可选的,在本发明的一些可能的实施方式中,所述第一操作方式指示所指示的操作方式为写入操作,所述第一Key-Value命令还携带N个Value指针或N条Value。
其中,所述操作单元1830具体用于,在所述第一Key-Value命令还携带N个Value指针的情况下,从所述第一Key-Value命令携带的N个Value指针所指向的缓存区获取所述N个Key对应的N条Value,将所述N条Value写入到所述NVMe的NVM中。
或者,所述操作单元1830具体用于,在所述第一Key-Value命令还携带N条Value情况下,通过解析所述第一Key-Value命令获取所述第一Key-Value命令携带的所述N条Value,将所述N条Value写入所述NVMe的NVM中。
可选的,在本发明的一些可能的实施方式中,所述第一操作方式指示所指示的操作方式为删除操作,所述操作单元1830具体用于,将所述N个Key对应的Value从所述NVMe的NVM中删除。
可选的,在本发明的一些可能的实施方式中,所述接收单元还用于,接收格式符合NVMe接口标准的第三命令,所述第三命令携带第三操作方式指示和第三操作对象类型指示,其中,所述第三操作方式指示所指示的操作方式为获取操作,所述第三操作对象指示所指示的操作对象类型包括Key;所述第三命令还携带Key集合指针。
所述获取单元1820还用于,当所述第三命令还携带了规则指针的情况下,从所述规则指针所指向的缓存区获取Key集合遍历规则;或者,当所述第三命令还携带了Key集合遍历规则的情况下,通过解析所述第三命令获取所述第三命令携带的所述Key集合遍历规则。
其中,所述操作单元1830还可用于,基于所述Key集合遍历规则从所述NVMe的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的缓存区,其中,所述N个Key中的部分或全部Key为所述Key集合中的部分或全部Key。
参见图19,本发明实施例还提供一种目标器1900,包括:
接收单元1910、获取单元1920和操作单元1930。
其中,接收单元1910,用于接收来自启动器的格式符合NVMe接口标准的第一Key-Value命令;其中,所述第一Key-Value命令携带第一操作方式指示和第一操作对象类型指示,所述第一操作对象类型指示所指示的操作对象类型包括Value。
获取单元1920,用于获取所述第一Key-Value命令对应的N个Key,所述N为大于或者等于1的整数。
操作单元1930,用于针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作。
可选的,在本发明的一些可能的实施方式中,所述第一Key-Value命令还携带N个Key或N个Key指针指向N个Key指针的指针。
所述获取单元1920具体用于,在所述第一Key-Value命令还携带指向N个Key指针的指针的情况下,基于所述第一Key-Value命令携带的指向所述N个Key指针的指针,从所述启动器的缓存区或者所述第一Key-Value命令的随命令数据区获取所述N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述第一Key-Value命令对应的所述N个Key。
或者,所述获取单元1920具体用于,在所述第一Key-Value命令携带N个Key指针情况下,通过解析所述第一Key-Value命令以获取所述第一Key-Value命令携带的所述N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述第一Key-Value命令对应的所述N个Key。
或者,所述获取单元1920具体用于,在所述第一Key-Value命令携带所述N个Key情况下,通过解析所述第一Key-Value命令以获取所述第一Key-Value命令携带的所述N个Key。
可选的,在本发明的一些可能的实施方式中,所述第一操作方式指示所指示的操作方式为获取操作,所述第一Key-Value命令还携带N个Value指针或指向N个Value指针的指针;
所述获取单元1920还用于,在所述第一Key-Value命令还携带了N个Value指针的情况下,通过解析所述第一Key-Value命令以获得所述第一Key-Value命令携带的N个Value指针;或者在所述第一Key-Value命令还携带指向N个Value指针的指针的情况下,基于所述第一Key-Value命令携带的指向所述N个Value指针的指针,从所述启动器的缓存区或所述第一Key-Value命令的随命令数据区获取所述N个Value指针。
所述操作单元1930具体用于,从所述目标器的非易失性存储介质(NVM)中获取所述N个Key对应的N条Value,将获取的所述N条Value中的每条Value写入所述N个Value指针中的不同Value指针所指向的所述启动器的缓存区,所述N条Value之中的与Key-i对应的Value,被写入了到所述N个Value指针中的与所述Key-i对应的Value指针所指向的所述启动器的缓存区,其中,所述Key-i为所述N个Key中的任意一个Key。
可选的,在本发明一些可能实施方式中,所述接收单元1910还用于,在接收所述第一Key-Value命令之前,接收格式符合NVMe接口标准的第四Key-Value命令,所述第四Key-Value命令携带第四操作方式指示和第四操作对象类型指示,所述第四操作方式指示所指示的操作方式为获取操作,所述第四操作对象类型指示所指示的操作对象类型包括Value的元数据。
其中,所述获取单元1920还用于,在所述第四Key-Value命令还携带了N个Key的情况下,通过解析所述第四Key-Value命令获得所述第四Key-Value命令携带的所述N个Key,或在所述第四Key-Value命令还携带N个Key指针的情况下,通过解析所述第四Key-Value命令获得所述第四Key-Value命令携带的N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述N个Key;或在所述第四Key-Value命令携带指向N个Key指针的指针的情况下,基于所述第四Key-Value命令携带的指向所述N个Key指针的指针,从所述启动器的缓存区或所述第四Key-Value命令的随命令数据区获取所述N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述N个Key。
所述获取单元1920还用于,在所述第四Key-Value命令还携带了N个元数指针的情况下,通过解析所述第四Key-Value命令获得所述第四Key-Value命令携带的N个元数据指针;或者在所述第四Key-Value命令还携带了指向N个元数据指针的指针的情况下,基于所述第四Key-Value命令所携带的指向所述N个元数据指针的指针,从所述启动器的缓存区或者所述第四Key-Value命令的随命令数据区获取所述N个元数据指针;
所述操作单元1930还用于,在所述目标器的NVM中查找所述N个Key对应的N条Value的元数据;将所述N条Value中的每条Value的元数据写入所述N个元数据指针之中的不同元数据指针所指向的所述启动器的缓存区,所述N条Value的元数据之中与Key-i对应的Value的元数据,被写入到所述N个元数据指针中的与所述Key-i对应的元数据指针所指向的所述启动器的缓存区,所述Key-i对应的Value的元数据包含Key-i对应的Value的长度信息。
可选的,在本发明的一些可能的实施方式中,所述第一操作方式指示所指示的操作方式为写入操作,所述第一Key-Value命令还携带了N条Value或者N个Value指针或者指向N个Value指针的指针;
其中,所述操作单元1930具体用于,在所述第一Key-Value命令携带N条Value的情况下,通过解析所述第一Key-Value命令获得所述第一Key-Value命令携带的N条Value;将所述N条Value写入所述目标器的NVM中。
或者,所述操作单元1930具体用于,在所述第一Key-Value命令还携带N个Value指针的情况下,通过解析所述第一Key-Value命令获得所述第一Key-Value命令携带的N个Value指针;从所述N个Value指针所指向的所述启动器的缓存区获取所述N个Key对应的N条Value,将所述N条Value写入所述目标器中的NVM中;
或者,所述操作单元1930具体用于,在所述第一Key-Value命令还携带了指向N个Value指针的指针的情况下,基于所述第一Key-Value命令携带的所述指向N个Value指针的指针,从所述启动器的缓存区或所述第一Key-Value命令的随命令数据区获取所述N个Value指针;从所述N个Value指针所指向的所述启动器的缓存区获取所述N个Key对应的N条Value,将所述N条Value写入所述目标器中的NVM中。
可选的,在本发明的一些可能的实施方式中,所述第一操作方式指示所指示的操作方式为删除操作,所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作包括:将所述N个Key对应的Value从所述目标器的NVM中删除。
可选的,在本发明一些可能实施方式中,所述接收单元1910还用于,接收格式符合NVMe接口标准的第五命令,所述第五命令携带第五操作方式指示和第五操作对象类型指示,其中,所述第五操作方式指示所指示的操作方式为获取操作,所述第五操作对象类型指示所指示的操作对象类型包括Key。
其中,所述获取单元1920还用于,当所述第五命令还携带指向规则指针的指针和指向Key集合指针的指针的情况下,基于所述第五命令携带的指向规则指针的指针,从所述启动器的缓存区或所述第五命令的随命令数据区获取所述规则指针;基于所述第五命令携带的指向Key集合指针的指针,从所述启动器的缓存区或所述第五命令的随命令数据区获取所述Key集合指针;从所述规则指针所指向的所述启动器的缓存区获取Key集合遍历规则;
所述操作单元1930还用于,基于所述Key集合遍历规则从所述目标器的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的所述启动器的缓存区,所述N个Key中的部分或全部Key为所述Key集合中的部分或全部Key。或者,
所述接收单元1910还用于,接收格式符合NVMe接口标准的第五命令,所述第五命令携带第五操作方式指示和第五操作对象类型指示,其中,所述第五操作方式指示所指示的操作方式为获取操作,所述第五操作对象类型指示所指示的操作对象类型包括Key;
其中,所述获取1920单元还用于,当所述第五命令还携带规则指针和Key集合指针的情况下,从所述规则指针所指向的所述启动器的缓存区获取Key集合遍历规则;
所述操作单元1930还可用于,基于所述Key集合遍历规则从所述目标器的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的所述启动器的缓存区,其中,所述N个Key中的部分或全部Key为所述Key集合中的部分或全部Key;或者,
接收单元1910还用于,接收格式符合NVMe接口标准的第五命令,所述第五命令携带第五操作方式指示和第五操作对象类型指示,其中,所述第五操作方式指示所指示的操作方式为获取操作,其中,所述第五操作对象类型指示所指示的操作对象类型包括Key。
所述获取单元1920还用于,当所述第五命令还携带了Key集合遍历规则和携带Key集合指针的情况下,通过解析所述第五命令获取所述第五命令所携带的所述Key集合遍历规则。
所述操作单元1930还用于,基于所述Key集合遍历规则从所述目标器的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的所述启动器的缓存区,其中,所述N个Key中的部分或全部Key为所述Key集合中的部分或全部Key。
参见图20,本发明实施例还提供一种NVMe 2000,包括:
控制器(NVMe控制器)2010和非易失性存储介质2020。
其中,NVM 2020用于为例如值(Value)等数据提供存储空间。例如所述NVM还可用于为Key和元数据等等提供存储空间。
其中,所述控制器2010,用于接收来自处理器的格式符合NVMe接口标准的第一Key-Value命令;其中,所述第一Key-Value命令携带第一操作方式指示和第一操作对象类型指示,所述第一操作对象类型指示所指示的操作对象类型包括Value;获取所述第一Key-Value命令对应的N个Key,其中,所述N为大于或者等于1的整数;针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作。
可选的,在本发明的一些可能的实施方式中,所述第一Key-Value命令还携带了所述N个Key,其中,在所述获取所述第一Key-Value命令对应的N个Key的方面,所述控制器2010具体用于,通过解析所述第一Key-Value命令获取所述Key-Value命令携带的所述N个Key。
或者,所述第一Key-Value命令还携带了N个Key指针,在所述获取所述第一Key-Value命令对应的N个Key的方面,所述控制器2010具体用于,从所述N个Key指针所指向的缓存区获取所述第一Key-Value命令对应的所述N个Key。
可选的,在本发明的一些可能的实施方式中,所述第一Key-Value命令还携带了N个Value指针,其中,所述第一操作方式指示所指示的操作方式为获取操作。
在所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作的方面,所述控制器2010具体用于,从所述NVMe的非易失性存储介质2020中获取所述N个Key对应的N条Value,将获取的所述N条Value中的每条Value写入所述N个Value指针中的不同Value指针所指向的缓存区,其中,所述N条Value之中的与Key-i对应的Value,被写入了到所述N个Value指针中的与所述Key-i对应的Value指针所指向的缓存区,所述Key-i为所述N个Key中的任意一个Key。
可选的,在本发明的一些可能的实施方式中,
控制器2010还可用于,在接收所述第一Key-Value命令之前,接收格式符合NVMe接口标准的第二Key-Value命令,所述第二Key-Value携带第二操作方式指示和第二操作对象类型指示,所述第二操作方式指示所指示的操作方式为获取操作,所述第二操作对象类型指示所指示的操作对象类型包括Value的元数据,所述第二Key-Value命令还携带N个元数据指针;在所述第二Key-Value命令还携带N个Key指针的情况下,从所述N个Key指针所指向的缓存区获取所述N个Key;或在所述第二Key-Value命令还携带所述N个Key的情况下,通过解析所述第二Key-Value命令获取所述第二Key-Value命令携带的所述N个Key;在所述NVMe的NVM中查找所述N个Key对应的N条Value的元数据;将所述N条Value中的每条Value的元数据写入所述N个元数据指针之中的不同元数据指针所指向的缓存区,其中,所述N条Value的元数据之中与Key-i对应的Value的元数据,被写入到所述N个元数据指针中的与所述Key-i对应的元数据指针所指向的缓存区,其中,所述Key-i对应的Value的元数据包含Key-i对应的Value的长度信息。
可选的,在本发明的一些可能的实施方式中,所述第一操作方式指示所指示的操作方式为写入操作,所述第一Key-Value命令还携带N个Value指针或N条Value;
其中,在所述第一Key-Value命令还携带N个Value指针的情况下,在所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作的方面,所述控制器2010具体用于,从所述第一Key-Value命令携带的N个Value指针所指向的缓存区获取所述N个Key对应的N条Value,将所述N条Value写入到所述NVMe的NVM中;
或者,在所述第一Key-Value命令还携带N条Value情况下,在所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作的方面,所述控制器2010具体用于,通过解析所述第一Key-Value命令获取所述第一Key-Value命令携带的所述N条Value,将所述N条Value写入所述NVMe的NVM中。
可选的,在本发明的一些可能的实施方式中,所述第一操作方式指示所指示的操作方式为删除操作,所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作包括:将所述N个Key对应的Value从所述NVMe的NVM中删除。
可选的,在本发明一些可能实施方式中,所述控制器2010可还用于,接收来自处理器的格式符合NVMe接口标准的第一Key-Value命令之前,接收格式符合NVMe接口标准的第三命令,所述第三命令携带第三操作方式指示和第三操作对象类型指示,所述第三操作方式指示所指示的操作方式为获取操作,所述第三操作对象指示所指示的操作对象类型包括Key;所述第三命令还携带Key集合指针。
当所述第三命令还携带了规则指针的情况下,从所述规则指针所指向的缓存区获取Key集合遍历规则;或者,当所述第三命令还携带了Key集合遍历规则的情况下,通过解析所述第三命令获取所述第三命令携带的所述Key集合遍历规则。
基于所述Key集合遍历规则从所述NVMe的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的缓存区,所述N个Key中的部分或全部Key为所述Key集合中的部分或全部Key。
参见图21,本发明实施例还提供一种目标器2100,包括:控制器(例如NVMe控制器或NoF控制器)2110和NVM 2120。
NVM 2120用于为例如值(Value)等数据提供存储空间。例如所述NVM还可用于为Key和元数据等等提供存储空间。
其中,所述控制器2110用于,接收来自启动器的格式符合高速非易失性存储器接口标准的第一Key-Value命令;所述第一Key-Value命令携带第一操作方式指示和第一操作对象类型指示,所述第一操作对象类型指示所指示的操作对象类型包括Value;获取所述第一Key-Value命令对应的N个Key,所述N为大于或者等于1的整数;针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作。
可选的,在本发明的一些可能的实施方式中,所述第一Key-Value命令还携带N个Key或N个Key指针指向N个Key指针的指针;
其中,在所述第一Key-Value命令还携带了指向N个Key指针的指针的情况之下,在获取所述第一Key-Value命令对应的N个Key的方面,控制器2110具体用于基于所述第一Key-Value命令携带的指向所述N个Key指针的指针,从所述启动器的缓存区或者所述第一Key-Value命令的随命令数据区获取所述N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述第一Key-Value命令对应的所述N个Key。
或者,在所述第一Key-Value命令携带N个Key指针情况下,在所述获取所述第一Key-Value命令对应的N个Key的方面,所述控制器2110具体用于通过解析所述第一Key-Value命令以获取所述第一Key-Value命令携带的所述N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述第一Key-Value命令对应的所述N个Key。或者,
在所述第一Key-Value命令携带所述N个Key情况下,在所述获取所述第一Key-Value命令对应的N个Key的方面,所述控制器2110具体用于通过解析所述第一Key-Value命令以获取所述第一Key-Value命令携带的所述N个Key。
可选的,在本发明的一些可能的实施方式中,所述第一操作方式指示所指示的操作方式为获取操作,所述第一Key-Value命令还携带N个Value指针或指向N个Value指针的指针;
所述控制器2110还用于,在所述第一Key-Value命令还携带了N个Value指针的情况下,所述目标器通过解析所述第一Key-Value命令以获得所述第一Key-Value命令携带的N个Value指针;或者在所述第一Key-Value命令还携带指向N个Value指针的指针的情况下,所述目标器基于所述第一Key-Value命令携带的指向所述N个Value指针的指针,从所述启动器的缓存区或所述第一Key-Value命令的随命令数据区获取所述N个Value指针;
其中,在所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作的方面,所述控制器具体用于,从所述目标器的非易失性存储介质中获取所述N个Key对应的N条Value,将获取的所述N条Value中的每条Value写入所述N个Value指针中的不同Value指针所指向的所述启动器的缓存区,其中,所述N条Value之中的与Key-i对应的Value,被写入了到所述N个Value指针中的与所述Key-i对应的Value指针所指向的所述启动器的缓存区,其中,所述Key-i为所述N个Key中的任意一个Key。
可选的,在本发明的一些可能的实施方式中,
所述控制器2110具体用于,在接收所述第一Key-Value命令之前,接收格式符合高速非易失性存储器接口标准的第四Key-Value命令,所述第四Key-Value命令携带第四操作方式指示和第四操作对象类型指示,所述第四操作方式指示所指示的操作方式为获取操作,所述第四操作对象类型指示所指示的操作对象类型包括Value的元数据;
在所述第四Key-Value命令还携带了N个Key的情况下,通过解析所述第四Key-Value命令获得所述第四Key-Value命令携带的所述N个Key,或在所述第四Key-Value命令还携带N个Key指针的情况下,通过解析所述第四Key-Value命令获得所述第四Key-Value命令携带的N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述N个Key;或在所述第四Key-Value命令携带指向N个Key指针的指针的情况下,基于所述第四Key-Value命令携带的指向所述N个Key指针的指针,从所述启动器的缓存区或所述第四Key-Value命令的随命令数据区获取所述N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述N个Key;
在所述第四Key-Value命令还携带了N个元数指针的情况下,通过解析所述第四Key-Value命令获得所述第四Key-Value命令携带的N个元数据指针;或者在所述第四Key-Value命令还携带了指向N个元数据指针的指针的情况下,基于所述第四Key-Value命令所携带的指向所述N个元数据指针的指针,从所述启动器的缓存区或者所述第四Key-Value命令的随命令数据区获取所述N个元数据指针;
在所述目标器的NVM中查找所述N个Key对应的N条Value的元数据;将所述N条Value中的每条Value的元数据写入所述N个元数据指针之中的不同元数据指针所指向的所述启动器的缓存区,所述N条Value的元数据之中与Key-i对应的Value的元数据,被写入到所述N个元数据指针中的与所述Key-i对应的元数据指针所指向的所述启动器的缓存区,所述Key-i对应的Value的元数据包含Key-i对应的Value的长度信息。
可选的,在本发明的一些可能的实施方式中,所述第一操作方式指示所指示的操作方式为写入操作,所述第一Key-Value命令还携带了N条Value或者N个Value指针或者指向N个Value指针的指针;
其中,在所述第一Key-Value命令携带N条Value的情况下,在所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作的方面,所述控制器具体用于:通过解析所述第一Key-Value命令获得所述第一Key-Value命令携带的N条Value;将所述N条Value写入所述目标器的NVM中;或者,
在所述第一Key-Value命令还携带N个Value指针的情况下,在所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作的方面,所述控制器具体用于:通过解析所述第一Key-Value命令获得所述第一Key-Value命令携带的N个Value指针;从所述N个Value指针所指向的所述启动器的缓存区获取所述N个Key对应的N条Value,将所述N条Value写入所述目标器中的NVM中;
或者,在所述第一Key-Value命令还携带了指向N个Value指针的指针的情况下,在针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作的方面,所述控制器具体用于:基于所述第一Key-Value命令携带的所述指向N个Value指针的指针,从所述启动器的缓存区或所述第一Key-Value命令的随命令数据区获取所述N个Value指针;从所述N个Value指针所指向的所述启动器的缓存区获取所述N个Key对应的N条Value,将所述N条Value写入所述目标器中的NVM中。
可选的,在本发明的一些可能的实施方式中,所述第一操作方式指示所指示的操作方式为删除操作,在所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作的方面,所述控制器具体用于将所述N个Key对应的Value从所述目标器的NVM中删除。
可选的,在本发明的一些可能的实施方式中,
所述控制器2110还可用于,在接收来自启动器的格式符合NVMe接口标准的第一Key-Value命令之前,接收格式符合NVMe接口标准的第五命令,所述第五命令携带第五操作方式指示和第五操作对象类型指示,其中,所述第五操作方式指示所指示的操作方式为获取操作,所述第五操作对象类型指示所指示的操作对象类型包括Key;当所述第五命令还携带指向规则指针的指针和指向Key集合指针的指针的情况下,基于所述第五命令携带的指向规则指针的指针,从所述启动器的缓存区或所述第五命令的随命令数据区获取所述规则指针;基于所述第五命令携带的指向Key集合指针的指针,从所述启动器的缓存区或所述第五命令的随命令数据区获取所述Key集合指针;从所述规则指针所指向的所述启动器的缓存区获取Key集合遍历规则;基于所述Key集合遍历规则从所述目标器的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的所述启动器的缓存区,所述N个Key中的部分或全部Key为所述Key集合中的部分或全部Key;或者,
所述控制器2110还用于,在接收来自启动器的格式符合NVMe接口标准的第一Key-Value命令之前,接收格式符合NVMe接口标准的第五命令,所述第五命令携带第五操作方式指示和第五操作对象类型指示,其中,所述第五操作方式指示所指示的操作方式为获取操作,所述第五操作对象类型指示所指示的操作对象类型包括Key;当所述第五命令还携带规则指针和Key集合指针的情况下,从所述规则指针所指向的所述启动器的缓存区获取Key集合遍历规则;基于所述Key集合遍历规则从所述目标器的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的所述启动器的缓存区,所述N个Key中的部分或全部Key为所述Key集合中的部分或全部Key;或者,
所述控制器2110还用于,在接收来自启动器的格式符合NVMe接口标准的第一Key-Value命令之前,接收格式符合NVMe接口标准的第五命令,所述第五命令携带第五操作方式指示和第五操作对象类型指示,其中,所述第五操作方式指示所指示的操作方式为获取操作,其中,所述第五操作对象类型指示所指示的操作对象类型包括Key;当所述第五命令还携带了Key集合遍历规则和携带Key集合指针的情况下,通过解析所述第五命令获取所述第五命令所携带的所述Key集合遍历规则;基于所述Key集合遍历规则从所述目标器的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的所述启动器的缓存区,其中,所述N个Key中的部分或全部Key为所述Key集合中的部分或全部Key。
参见图22,本发明实施例还提供一种计算机设备2200,包括:
处理器2210和NVMe 2220,所述NVMe可为本发明实施例提供的任意一种NVMe。计算机设备2200还可包括缓存2230等。计算机设备2200例如可能是个人电脑、工作站、应用服务器或站点服务器等计算机设备。
参见图23,本发明实施例还提供一种数据访问系统2300,包括:
启动器2310和目标器2320,所述目标器2320为所述NVMe可为本发明实施例的任意一种目标器。
启动器2310和目标器2320为不同的计算机设备,启动器和目标器的实际产品形态可能是多种多样的,例如目标器可能是存储服务器、存储阵列等等存储服务提供设备。而启动器例如可能是个人电脑、工作站、应用服务器或站点服务器等存储服务请求设备。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可能可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如上述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
上述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
上述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可获取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以为个人计算机、服务器或者网络设备等,具体可以是计算机设备中的处理器)执行本发明的各个实施例上述方法的全部或部分步骤。其中,而前述的存储介质可包括:U盘、移动硬盘、磁碟、光盘、只读存储器(ROM,Read-Only Memory)或者随机存取存储器(RAM,Random Access Memory)等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本发明的技术方案而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,然而本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (58)
1.一种数据访问方法,其特征在于,包括:
高速非易失性存储器(NVMe)接收来自处理器的格式符合NVMe接口标准的第一键-值(Key-Value)命令;其中,所述第一Key-Value命令携带第一操作方式指示和第一操作对象类型指示,所述第一操作对象类型指示所指示的操作对象类型包括Value;
获取所述第一Key-Value命令对应的N个Key,其中,所述N为大于或者等于1的整数;
针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作。
2.根据权利要求1所述的方法,其特征在于,所述第一Key-Value命令还携带了所述N个Key,其中,所述获取所述第一Key-Value命令对应的N个Key包括:通过解析所述第一Key-Value命令获取所述Key-Value命令携带的所述N个Key;
或者,所述第一Key-Value命令还携带了N个Key指针,所述获取所述第一Key-Value命令对应的N个Key包括:从所述N个Key指针所指向的缓存区获取所述第一Key-Value命令对应的所述N个Key。
3.根据权利要求2所述的方法,其特征在于,所述第一Key-Value命令还携带了N个Value指针,其中,所述第一操作方式指示所指示的操作方式为获取操作;
所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作包括:从所述NVMe的非易失性存储介质(NVM)中获取所述N个Key对应的N条Value,将获取的所述N条Value中的每条Value写入所述N个Value指针中的不同Value指针所指向的缓存区,其中,所述N条Value之中的与Key-i对应的Value,被写入了到所述N个Value指针中的与所述Key-i对应的Value指针所指向的缓存区,所述Key-i为所述N个Key中的任意一个Key。
4.根据权利要求3所述方法,其特征在于,接收所述第一Key-Value命令之前所述方法还包括:
所述NVMe接收格式符合NVMe接口标准的第二Key-Value命令,所述第二Key-Value携带第二操作方式指示和第二操作对象类型指示,所述第二操作方式指示所指示的操作方式为获取操作,其中,所述第二操作对象类型指示所指示的操作对象类型包括Value的元数据,所述第二Key-Value命令还携带N个元数据指针;
在所述第二Key-Value命令还携带N个Key指针的情况下,从所述N个Key指针所指向的缓存区获取所述N个Key;或在所述第二Key-Value命令还携带所述N个Key的情况下,通过解析所述第二Key-Value命令获取所述第二Key-Value命令携带的所述N个Key;
在所述NVMe的NVM中查找所述N个Key对应的N条Value的元数据;将所述N条Value中的每条Value的元数据写入所述N个元数据指针之中的不同元数据指针所指向的缓存区,所述N条Value的元数据之中与Key-i对应的Value的元数据,被写入到所述N个元数据指针中的与所述Key-i对应的元数据指针所指向的缓存区,其中,所述Key-i对应的Value的元数据包含Key-i对应的Value的长度信息。
5.根据权利要求2所述的方法,其特征在于,所述第一操作方式指示所指示的操作方式为写入操作,所述第一Key-Value命令还携带N个Value指针或N条Value;
其中,在所述第一Key-Value命令还携带N个Value指针的情况下,所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作包括:从所述第一Key-Value命令携带的N个Value指针所指向的缓存区获取所述N个Key对应的N条Value,将所述N条Value写入到所述NVMe的NVM中;
或者,在所述第一Key-Value命令还携带N条Value情况下,所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作包括:通过解析所述第一Key-Value命令获取所述第一Key-Value命令携带的所述N条Value,将所述N条Value写入所述NVMe的NVM中。
6.根据权利要求2所述的方法,其特征在于,所述第一操作方式指示所指示的操作方式为删除操作,所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作包括:将所述N个Key对应的Value从所述NVMe的NVM中删除。
7.根据权利要求2至6任一项所述的方法,其特征在于,在接收所述第一Key-Value命令之前所述方法还包括:
所述NVMe接收格式符合NVMe接口标准的第三命令,所述第三命令携带第三操作方式指示和第三操作对象类型指示,其中,所述第三操作方式指示所指示的操作方式为获取操作,所述第三操作对象指示所指示的操作对象类型包括Key;所述第三命令还携带Key集合指针;
当所述第三命令还携带了规则指针的情况下,从所述规则指针所指向的缓存区获取Key集合遍历规则;或者,当所述第三命令还携带了Key集合遍历规则的情况下,通过解析所述第三命令获取所述第三命令携带的所述Key集合遍历规则;
基于所述Key集合遍历规则从所述NVMe的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的缓存区,所述N个Key中的部分或全部Key为所述Key集合中的部分或全部Key。
8.一种数据访问方法,其特征在于,包括:
目标器接收来自启动器的格式符合高速非易失性存储器(NVMe)接口标准的第一键-值(Key-Value)命令;其中,所述第一Key-Value命令携带第一操作方式指示和第一操作对象类型指示,所述第一操作对象类型指示所指示的操作对象类型包括Value;
获取所述第一Key-Value命令对应的N个Key,其中,所述N为大于或者等于1的整数;
针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作。
9.根据权利要求8所述的方法,其特征在于,所述第一Key-Value命令还携带N个Key或N个Key指针指向N个Key指针的指针;
在所述第一Key-Value命令还携带指向N个Key指针的指针的情况下,所述获取所述第一Key-Value命令对应的N个Key包括:基于所述第一Key-Value命令携带的指向所述N个Key指针的指针,从所述启动器的缓存区或者所述第一Key-Value命令的随命令数据区获取所述N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述第一Key-Value命令对应的所述N个Key;
或者,
在所述第一Key-Value命令携带N个Key指针情况下,所述获取所述第一Key-Value命令对应的N个Key包括:通过解析所述第一Key-Value命令以获取所述第一Key-Value命令携带的所述N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述第一Key-Value命令对应的所述N个Key;
或者,
在所述第一Key-Value命令携带所述N个Key情况下,所述获取所述第一Key-Value命令对应的N个Key包括:通过解析所述第一Key-Value命令以获取所述第一Key-Value命令携带的所述N个Key。
10.根据权利要求9所述的方法,其特征在于,所述第一操作方式指示所指示的操作方式为获取操作,所述第一Key-Value命令还携带N个Value指针或指向N个Value指针的指针;
所述方法还包括:
在所述第一Key-Value命令还携带了N个Value指针的情况下,所述目标器通过解析所述第一Key-Value命令以获得所述第一Key-Value命令携带的N个Value指针;或者在所述第一Key-Value命令还携带指向N个Value指针的指针的情况下,所述目标器基于所述第一Key-Value命令携带的指向所述N个Value指针的指针,从所述启动器的缓存区或所述第一Key-Value命令的随命令数据区获取所述N个Value指针;
其中,所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作包括:
从所述目标器的非易失性存储介质(NVM)中获取所述N个Key对应的N条Value,将获取的所述N条Value中的每条Value写入所述N个Value指针中的不同Value指针所指向的所述启动器的缓存区,其中,所述N条Value之中的与Key-i对应的Value,被写入了到所述N个Value指针中的与所述Key-i对应的Value指针所指向的所述启动器的缓存区,其中,所述Key-i为所述N个Key中的任意一个Key。
11.根据权利要求10所述方法,其特征在于,接收所述第一Key-Value命令之前所述方法还包括:
所述目标器接收格式符合NVMe接口标准的第四Key-Value命令,所述第四Key-Value命令携带第四操作方式指示和第四操作对象类型指示,所述第四操作方式指示所指示的操作方式为获取操作,所述第四操作对象类型指示所指示的操作对象类型包括Value的元数据;
在所述第四Key-Value命令还携带了N个Key的情况下,通过解析所述第四Key-Value命令获得所述第四Key-Value命令携带的所述N个Key,或在所述第四Key-Value命令还携带N个Key指针的情况下,通过解析所述第四Key-Value命令获得所述第四Key-Value命令携带的N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述N个Key;或在所述第四Key-Value命令携带指向N个Key指针的指针的情况下,基于所述第四Key-Value命令携带的指向所述N个Key指针的指针,从所述启动器的缓存区或所述第四Key-Value命令的随命令数据区获取所述N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述N个Key;
在所述第四Key-Value命令还携带了N个元数指针的情况下,通过解析所述第四Key-Value命令获得所述第四Key-Value命令携带的N个元数据指针;或者在所述第四Key-Value命令还携带了指向N个元数据指针的指针的情况下,基于所述第四Key-Value命令所携带的指向所述N个元数据指针的指针,从所述启动器的缓存区或者所述第四Key-Value命令的随命令数据区获取所述N个元数据指针;
在所述目标器的NVM中查找所述N个Key对应的N条Value的元数据;将所述N条Value中的每条Value的元数据写入所述N个元数据指针之中的不同元数据指针所指向的所述启动器的缓存区,所述N条Value的元数据之中与Key-i对应的Value的元数据,被写入到所述N个元数据指针中的与所述Key-i对应的元数据指针所指向的所述启动器的缓存区,所述Key-i对应的Value的元数据包含Key-i对应的Value的长度信息。
12.根据权利要求9所述的方法,其特征在于,所述第一操作方式指示所指示的操作方式为写入操作,所述第一Key-Value命令还携带了N条Value或者N个Value指针或者指向N个Value指针的指针;
其中,在所述第一Key-Value命令携带N条Value的情况下,所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作包括:通过解析所述第一Key-Value命令获得所述第一Key-Value命令携带的N条Value;将所述N条Value写入所述目标器的NVM中;
或者,
在所述第一Key-Value命令还携带N个Value指针的情况下,所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作包括:通过解析所述第一Key-Value命令获得所述第一Key-Value命令携带的N个Value指针;从所述N个Value指针所指向的所述启动器的缓存区获取所述N个Key对应的N条Value,将所述N条Value写入所述目标器中的NVM中;
或者,在所述第一Key-Value命令还携带了指向N个Value指针的指针的情况下,所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作包括:基于所述第一Key-Value命令携带的所述指向N个Value指针的指针,从所述启动器的缓存区或所述第一Key-Value命令的随命令数据区获取所述N个Value指针;从所述N个Value指针所指向的所述启动器的缓存区获取所述N个Key对应的N条Value,将所述N条Value写入所述目标器中的NVM中。
13.根据权利要求9所述的方法,其特征在于,所述第一操作方式指示所指示的操作方式为删除操作,所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作包括:将所述N个Key对应的Value从所述目标器的NVM中删除。
14.根据权利要求8至13任一项所述的方法,其特征在于,接收所述第一Key-Value命令之前,所述方法还包括:
所述目标器接收格式符合NVMe接口标准的第五命令,所述第五命令携带第五操作方式指示和第五操作对象类型指示,其中,所述第五操作方式指示所指示的操作方式为获取操作,其中,所述第五操作对象类型指示所指示的操作对象类型包括Key;当所述第五命令还携带指向规则指针的指针和指向Key集合指针的指针的情况下,基于所述第五命令携带的指向规则指针的指针,从所述启动器的缓存区或所述第五命令的随命令数据区获取所述规则指针;基于所述第五命令携带的指向Key集合指针的指针,从所述启动器的缓存区或所述第五命令的随命令数据区获取所述Key集合指针;从所述规则指针所指向的所述启动器的缓存区获取Key集合遍历规则;基于所述Key集合遍历规则从所述目标器的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的所述启动器的缓存区,所述N个Key中的部分或全部Key为所述Key集合中的部分或全部Key;
或者
所述目标器接收格式符合NVMe接口标准的第五命令,所述第五命令携带第五操作方式指示和第五操作对象类型指示,其中,所述第五操作方式指示所指示的操作方式为获取操作,所述第五操作对象类型指示所指示的操作对象类型包括Key;当所述第五命令还携带规则指针和Key集合指针的情况下,从所述规则指针所指向的所述启动器的缓存区获取Key集合遍历规则;基于所述Key集合遍历规则从所述目标器的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的所述启动器的缓存区,所述N个Key中的部分或全部Key为所述Key集合中的部分或全部Key;
或者,
所述目标器接收格式符合NVMe接口标准的第五命令,其中,所述第五命令携带第五操作方式指示和第五操作对象类型指示,其中,所述第五操作方式指示所指示的操作方式为获取操作,其中,所述第五操作对象类型指示所指示的操作对象类型包括Key;当所述第五命令还携带了Key集合遍历规则和携带Key集合指针的情况下,通过解析所述第五命令获取所述第五命令所携带的所述Key集合遍历规则;基于所述Key集合遍历规则从所述目标器的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的所述启动器的缓存区,其中,所述N个Key中的部分或全部Key为所述Key集合中的部分或全部Key。
15.一种高速非易失性存储器,其特征在于,包括:
接收单元,用于接收来自处理器的格式符合高速非易失性存储器(NVMe)接口标准的第一键-值(Key-Value)命令;其中,所述第一Key-Value命令携带第一操作方式指示和第一操作对象类型指示,所述第一操作对象类型指示所指示的操作对象类型包括Value;
获取单元,用于获取所述第一Key-Value命令对应的N个Key,所述N为大于或者等于1的整数;
操作单元,用于针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作。
16.根据权利要求15所述的NVMe,其特征在于,所述第一Key-Value命令还携带了所述N个Key,所述获取单元具体用于,通过解析所述第一Key-Value命令获取所述Key-Value命令携带的所述N个Key;
或者,所述第一Key-Value命令还携带了N个Key指针,所述获取单元具体用于,从所述N个Key指针所指向的缓存区获取所述第一Key-Value命令对应的所述N个Key。
17.根据权利要求16所述的NVMe,其特征在于,所述第一Key-Value命令还携带了N个Value指针,其中,所述第一操作方式指示所指示的操作方式为获取操作;
所述操作单元具体用于,从所述NVMe的非易失性存储介质(NVM)中获取所述N个Key对应的N条Value,将获取的所述N条Value中的每条Value写入所述N个Value指针中的不同Value指针所指向的缓存区,其中,所述N条Value之中的与Key-i对应的Value,被写入了到所述N个Value指针中的与所述Key-i对应的Value指针所指向的缓存区,其中,所述Key-i为所述N个Key中的任意一个Key。
18.根据权利要求17所述NVMe,其特征在于,
所述接收单元还用于,在接收所述第一Key-Value命令之前,接收格式符合NVMe接口标准的第二Key-Value命令,所述第二Key-Value携带第二操作方式指示和第二操作对象类型指示,所述第二操作方式指示所指示的操作方式为获取操作,其中,所述第二操作对象类型指示所指示的操作对象类型包括Value的元数据,所述第二Key-Value命令还携带N个元数据指针;
所述获取单元还用于,在所述第二Key-Value命令还携带N个Key指针的情况下,从所述N个Key指针所指向的缓存区获取所述N个Key;或在所述第二Key-Value命令还携带所述N个Key的情况下,通过解析所述第二Key-Value命令获取所述第二Key-Value命令携带的所述N个Key;
所述操作单元还用于,在所述NVMe的NVM中查找所述N个Key对应的N条Value的元数据;将所述N条Value中的每条Value的元数据写入所述N个元数据指针之中的不同元数据指针所指向的缓存区,所述N条Value的元数据之中与Key-i对应的Value的元数据,被写入到所述N个元数据指针中的与所述Key-i对应的元数据指针所指向的缓存区,其中,所述Key-i对应的Value的元数据包含Key-i对应的Value的长度信息。
19.根据权利要求16所述的NVMe,其特征在于,所述第一操作方式指示所指示的操作方式为写入操作,所述第一Key-Value命令还携带N个Value指针或N条Value;
其中,所述操作单元具体用于,在所述第一Key-Value命令还携带N个Value指针的情况下,从所述第一Key-Value命令携带的N个Value指针所指向的缓存区获取所述N个Key对应的N条Value,将所述N条Value写入到所述NVMe的NVM中;
或者,所述操作单元具体用于,在所述第一Key-Value命令还携带N条Value情况下,通过解析所述第一Key-Value命令获取所述第一Key-Value命令携带的所述N条Value,将所述N条Value写入所述NVMe的NVM中。
20.根据权利要求16所述的NVMe,其特征在于,所述第一操作方式指示所指示的操作方式为删除操作,所述操作单元具体用于,将所述N个Key对应的Value从所述NVMe的NVM中删除。
21.根据权利要求15至20任一项所述的NVMe,其特征在于,
所述接收单元还用于,接收格式符合NVMe接口标准的第三命令,所述第三命令携带第三操作方式指示和第三操作对象类型指示,其中,所述第三操作方式指示所指示的操作方式为获取操作,所述第三操作对象指示所指示的操作对象类型包括Key;所述第三命令还携带Key集合指针;
所述获取单元还用于,当所述第三命令还携带了规则指针的情况下,从所述规则指针所指向的缓存区获取Key集合遍历规则;或者,当所述第三命令还携带了Key集合遍历规则的情况下,通过解析所述第三命令获取所述第三命令携带的所述Key集合遍历规则;
其中,所述操作单元还用于,基于所述Key集合遍历规则从所述NVMe的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的缓存区,所述N个Key中的部分或全部Key为所述Key集合中的部分或全部Key。
22.一种目标器,其特征在于,包括:
接收单元,用于接收来自启动器的格式符合高速非易失性存储器(NVMe)接口标准的第一键-值(Key-Value)命令;其中,所述第一Key-Value命令携带第一操作方式指示和第一操作对象类型指示,所述第一操作对象类型指示所指示的操作对象类型包括Value;
获取单元,用于获取所述第一Key-Value命令对应的N个Key,所述N为大于或者等于1的整数;
操作单元,用于针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作。
23.根据权利要求22所述的目标器,其特征在于,所述第一Key-Value命令还携带N个Key或N个Key指针指向N个Key指针的指针;
所述获取单元具体用于,在所述第一Key-Value命令还携带指向N个Key指针的指针的情况下,基于所述第一Key-Value命令携带的指向所述N个Key指针的指针,从所述启动器的缓存区或者所述第一Key-Value命令的随命令数据区获取所述N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述第一Key-Value命令对应的所述N个Key;
或者,所述获取单元具体用于,在所述第一Key-Value命令携带N个Key指针情况下,通过解析所述第一Key-Value命令以获取所述第一Key-Value命令携带的所述N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述第一Key-Value命令对应的所述N个Key;
或者,所述获取单元具体用于,在所述第一Key-Value命令携带所述N个Key情况下,通过解析所述第一Key-Value命令以获取所述第一Key-Value命令携带的所述N个Key。
24.根据权利要求23所述的方法,其特征在于,所述第一操作方式指示所指示的操作方式为获取操作,所述第一Key-Value命令还携带N个Value指针或指向N个Value指针的指针;
所述获取单元还用于,在所述第一Key-Value命令还携带了N个Value指针的情况下,通过解析所述第一Key-Value命令以获得所述第一Key-Value命令携带的N个Value指针;或者在所述第一Key-Value命令还携带指向N个Value指针的指针的情况下,基于所述第一Key-Value命令携带的指向所述N个Value指针的指针,从所述启动器的缓存区或所述第一Key-Value命令的随命令数据区获取所述N个Value指针;
所述操作单元具体用于,从所述目标器的非易失性存储介质(NVM)中获取所述N个Key对应的N条Value,将获取的所述N条Value中的每条Value写入所述N个Value指针中的不同Value指针所指向的所述启动器的缓存区,所述N条Value之中的与Key-i对应的Value,被写入了到所述N个Value指针中的与所述Key-i对应的Value指针所指向的所述启动器的缓存区,其中,所述Key-i为所述N个Key中的任意一个Key。
25.根据权利要求24所述目标器,其特征在于,
所述接收单元还用于,在接收所述第一Key-Value命令之前,接收格式符合NVMe接口标准的第四Key-Value命令,所述第四Key-Value命令携带第四操作方式指示和第四操作对象类型指示,所述第四操作方式指示所指示的操作方式为获取操作,所述第四操作对象类型指示所指示的操作对象类型包括Value的元数据;
其中,所述获取单元还用于,在所述第四Key-Value命令还携带了N个Key的情况下,通过解析所述第四Key-Value命令获得所述第四Key-Value命令携带的所述N个Key,或在所述第四Key-Value命令还携带N个Key指针的情况下,通过解析所述第四Key-Value命令获得所述第四Key-Value命令携带的N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述N个Key;或在所述第四Key-Value命令携带指向N个Key指针的指针的情况下,基于所述第四Key-Value命令携带的指向所述N个Key指针的指针,从所述启动器的缓存区或所述第四Key-Value命令的随命令数据区获取所述N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述N个Key;
所述获取单元还用于,在所述第四Key-Value命令还携带了N个元数指针的情况下,通过解析所述第四Key-Value命令获得所述第四Key-Value命令携带的N个元数据指针;或者在所述第四Key-Value命令还携带了指向N个元数据指针的指针的情况下,基于所述第四Key-Value命令所携带的指向所述N个元数据指针的指针,从所述启动器的缓存区或者所述第四Key-Value命令的随命令数据区获取所述N个元数据指针;
所述操作单元还用于,在所述目标器的NVM中查找所述N个Key对应的N条Value的元数据;将所述N条Value中的每条Value的元数据写入所述N个元数据指针之中的不同元数据指针所指向的所述启动器的缓存区,所述N条Value的元数据之中与Key-i对应的Value的元数据,被写入到所述N个元数据指针中的与所述Key-i对应的元数据指针所指向的所述启动器的缓存区,所述Key-i对应的Value的元数据包含Key-i对应的Value的长度信息。
26.根据权利要求23所述的目标器,其特征在于,所述第一操作方式指示所指示的操作方式为写入操作,所述第一Key-Value命令还携带了N条Value或者N个Value指针或者指向N个Value指针的指针;
其中,所述操作单元具体用于,在所述第一Key-Value命令携带N条Value的情况下,通过解析所述第一Key-Value命令获得所述第一Key-Value命令携带的N条Value;将所述N条Value写入所述目标器的NVM中;
或者,
所述操作单元具体用于,在所述第一Key-Value命令还携带N个Value指针的情况下,通过解析所述第一Key-Value命令获得所述第一Key-Value命令携带的N个Value指针;从所述N个Value指针所指向的所述启动器的缓存区获取所述N个Key对应的N条Value,将所述N条Value写入所述目标器中的NVM中;
或者,所述操作单元具体用于,在所述第一Key-Value命令还携带了指向N个Value指针的指针的情况下,基于所述第一Key-Value命令携带的所述指向N个Value指针的指针,从所述启动器的缓存区或所述第一Key-Value命令的随命令数据区获取所述N个Value指针;从所述N个Value指针所指向的所述启动器的缓存区获取所述N个Key对应的N条Value,将所述N条Value写入所述目标器中的NVM中。
27.根据权利要求23所述的目标器,其特征在于,所述第一操作方式指示所指示的操作方式为删除操作,所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作包括:将所述N个Key对应的Value从所述目标器的NVM中删除。
28.根据权利要求22至27任一项所述的目标器,其特征在于,
所述接收单元还用于,接收格式符合NVMe接口标准的第五命令,所述第五命令携带第五操作方式指示和第五操作对象类型指示,其中,所述第五操作方式指示所指示的操作方式为获取操作,其中,所述第五操作对象类型指示所指示的操作对象类型包括Key;
其中,所述获取单元还用于,当所述第五命令还携带指向规则指针的指针和指向Key集合指针的指针的情况下,基于所述第五命令携带的指向规则指针的指针,从所述启动器的缓存区或所述第五命令的随命令数据区获取所述规则指针;基于所述第五命令携带的指向Key集合指针的指针,从所述启动器的缓存区或所述第五命令的随命令数据区获取所述Key集合指针;从所述规则指针所指向的所述启动器的缓存区获取Key集合遍历规则;
所述操作单元还用于,基于所述Key集合遍历规则从所述目标器的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的所述启动器的缓存区,所述N个Key中的部分或全部Key为所述Key集合中的部分或全部Key;
或者,
所述接收单元还用于,接收格式符合NVMe接口标准的第五命令,所述第五命令携带第五操作方式指示和第五操作对象类型指示,其中,所述第五操作方式指示所指示的操作方式为获取操作,所述第五操作对象类型指示所指示的操作对象类型包括Key;
其中,所述获取单元还用于,当所述第五命令还携带规则指针和Key集合指针的情况下,从所述规则指针所指向的所述启动器的缓存区获取Key集合遍历规则;
所述操作单元还用于,基于所述Key集合遍历规则从所述目标器的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的所述启动器的缓存区,所述N个Key中的部分或全部Key为所述Key集合中的部分或全部Key;
或者,
所述接收单元还用于,接收格式符合NVMe接口标准的第五命令,所述第五命令携带第五操作方式指示和第五操作对象类型指示,其中,所述第五操作方式指示所指示的操作方式为获取操作,其中,所述第五操作对象类型指示所指示的操作对象类型包括Key;
所述获取单元还用于,当所述第五命令还携带了Key集合遍历规则和携带Key集合指针的情况下,通过解析所述第五命令获取所述第五命令所携带的所述Key集合遍历规则;
所述操作单元还用于,基于所述Key集合遍历规则从所述目标器的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的所述启动器的缓存区,其中,所述N个Key中的部分或全部Key为所述Key集合中的部分或全部Key。
29.一种高速非易失性存储器(NVMe),其特征在于,包括:
控制器和非易失性存储介质;
其中,所述非易失性存储介质用于为值(Value)提供存储空间;
其中,所述控制器,用于接收来自处理器的格式符合NVMe接口标准的第一键-值(Key-Value)命令;其中,所述第一Key-Value命令携带第一操作方式指示和第一操作对象类型指示,所述第一操作对象类型指示所指示的操作对象类型包括Value;获取所述第一Key-Value命令对应的N个Key,其中,所述N为大于或者等于1的整数;针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作。
30.根据权利要求29所述的NVMe,其特征在于,所述第一Key-Value命令还携带了所述N个Key,其中,在所述获取所述第一Key-Value命令对应的N个Key的方面,所述控制器具体用于,通过解析所述第一Key-Value命令获取所述Key-Value命令携带的所述N个Key;
或者,所述第一Key-Value命令还携带了N个Key指针,在所述获取所述第一Key-Value命令对应的N个Key的方面,所述控制器具体用于,从所述N个Key指针所指向的缓存区获取所述第一Key-Value命令对应的所述N个Key。
31.根据权利要求30所述的NVMe,其特征在于,所述第一Key-Value命令还携带了N个Value指针,其中,所述第一操作方式指示所指示的操作方式为获取操作;
在所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作的方面,所述控制器具体用于,从所述NVMe的非易失性存储介质(NVM)中获取所述N个Key对应的N条Value,将获取的所述N条Value中的每条Value写入所述N个Value指针中的不同Value指针所指向的缓存区,其中,所述N条Value之中的与Key-i对应的Value,被写入了到所述N个Value指针中的与所述Key-i对应的Value指针所指向的缓存区,所述Key-i为所述N个Key中的任意一个Key。
32.根据权利要求31所述NVMe,其特征在于,所述控制器还用于,在接收所述第一Key-Value命令之前,接收格式符合NVMe接口标准的第二Key-Value命令,所述第二Key-Value携带第二操作方式指示和第二操作对象类型指示,所述第二操作方式指示所指示的操作方式为获取操作,所述第二操作对象类型指示所指示的操作对象类型包括Value的元数据,所述第二Key-Value命令还携带N个元数据指针;在所述第二Key-Value命令还携带N个Key指针的情况下,从所述N个Key指针所指向的缓存区获取所述N个Key;或在所述第二Key-Value命令还携带所述N个Key的情况下,通过解析所述第二Key-Value命令获取所述第二Key-Value命令携带的所述N个Key;在所述NVMe的NVM中查找所述N个Key对应的N条Value的元数据;将所述N条Value中的每条Value的元数据写入所述N个元数据指针之中的不同元数据指针所指向的缓存区,所述N条Value的元数据之中与Key-i对应的Value的元数据,被写入到所述N个元数据指针中的与所述Key-i对应的元数据指针所指向的缓存区,其中,所述Key-i对应的Value的元数据包含Key-i对应的Value的长度信息。
33.根据权利要求30所述的NVMe,其特征在于,所述第一操作方式指示所指示的操作方式为写入操作,所述第一Key-Value命令还携带N个Value指针或N条Value;
其中,在所述第一Key-Value命令还携带N个Value指针的情况下,在所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作的方面,所述控制器具体用于,从所述第一Key-Value命令携带的N个Value指针所指向的缓存区获取所述N个Key对应的N条Value,将所述N条Value写入到所述NVMe的NVM中;
或者,在所述第一Key-Value命令还携带N条Value情况下,在所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作的方面,所述控制器具体用于,通过解析所述第一Key-Value命令获取所述第一Key-Value命令携带的所述N条Value,将所述N条Value写入所述NVMe的NVM中。
34.根据权利要求30所述的NVMe,其特征在于,所述第一操作方式指示所指示的操作方式为删除操作,所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作包括:将所述N个Key对应的Value从所述NVMe的NVM中删除。
35.根据权利要求30至34任一项所述的NVMe,其特征在于,所述控制器还用于,接收来自处理器的格式符合NVMe接口标准的第一键-值(Key-Value)命令之前,接收格式符合NVMe接口标准的第三命令,所述第三命令携带第三操作方式指示和第三操作对象类型指示,其中,所述第三操作方式指示所指示的操作方式为获取操作,所述第三操作对象指示所指示的操作对象类型包括Key;所述第三命令还携带Key集合指针;
当所述第三命令还携带了规则指针的情况下,从所述规则指针所指向的缓存区获取Key集合遍历规则;或者,当所述第三命令还携带了Key集合遍历规则的情况下,通过解析所述第三命令获取所述第三命令携带的所述Key集合遍历规则;
基于所述Key集合遍历规则从所述NVMe的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的缓存区,所述N个Key中的部分或全部Key为所述Key集合中的部分或全部Key。
36.一种目标器,其特征在于,包括:
控制器和非易失性存储介质(NVM);
其中,所述非易失性存储介质用于为值(Value)提供存储空间;
其中,所述控制器,用于接收来自启动器的格式符合高速非易失性存储器接口标准的第一键-值(Key-Value)命令;所述第一Key-Value命令携带第一操作方式指示和第一操作对象类型指示,所述第一操作对象类型指示所指示的操作对象类型包括Value;获取所述第一Key-Value命令对应的N个Key,所述N为大于或者等于1的整数;针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作。
37.根据权利要求36所述的目标器,其特征在于,所述第一Key-Value命令还携带N个Key或N个Key指针指向N个Key指针的指针;
其中,在所述第一Key-Value命令还携带了指向N个Key指针的指针的情况之下,在所述获取所述第一Key-Value命令对应的N个Key的方面,所述控制器具体用于基于所述第一Key-Value命令携带的指向所述N个Key指针的指针,从所述启动器的缓存区或者所述第一Key-Value命令的随命令数据区获取所述N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述第一Key-Value命令对应的所述N个Key;
或者,
在所述第一Key-Value命令携带N个Key指针情况下,在所述获取所述第一Key-Value命令对应的N个Key的方面,所述控制器具体用于通过解析所述第一Key-Value命令以获取所述第一Key-Value命令携带的所述N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述第一Key-Value命令对应的所述N个Key;
或者,
在所述第一Key-Value命令携带所述N个Key情况下,在所述获取所述第一Key-Value命令对应的N个Key的方面,所述控制器具体用于通过解析所述第一Key-Value命令以获取所述第一Key-Value命令携带的所述N个Key。
38.根据权利要求37所述的目标器,其特征在于,所述第一操作方式指示所指示的操作方式为获取操作,所述第一Key-Value命令还携带N个Value指针或指向N个Value指针的指针;
所述控制器还用于,在所述第一Key-Value命令还携带了N个Value指针的情况下,所述目标器通过解析所述第一Key-Value命令以获得所述第一Key-Value命令携带的N个Value指针;或者在所述第一Key-Value命令还携带指向N个Value指针的指针的情况下,所述目标器基于所述第一Key-Value命令携带的指向所述N个Value指针的指针,从所述启动器的缓存区或所述第一Key-Value命令的随命令数据区获取所述N个Value指针;
其中,在所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作的方面,所述控制器具体用于,从所述目标器的非易失性存储介质中获取所述N个Key对应的N条Value,将获取的所述N条Value中的每条Value写入所述N个Value指针中的不同Value指针所指向的所述启动器的缓存区,其中,所述N条Value之中的与Key-i对应的Value,被写入了到所述N个Value指针中的与所述Key-i对应的Value指针所指向的所述启动器的缓存区,其中,所述Key-i为所述N个Key中的任意一个Key。
39.根据权利要求38所述的目标器,其特征在于,
所述控制器具体用于,在接收所述第一Key-Value命令之前,接收格式符合高速非易失性存储器接口标准的第四Key-Value命令,所述第四Key-Value命令携带第四操作方式指示和第四操作对象类型指示,所述第四操作方式指示所指示的操作方式为获取操作,所述第四操作对象类型指示所指示的操作对象类型包括Value的元数据;
在所述第四Key-Value命令还携带了N个Key的情况下,通过解析所述第四Key-Value命令获得所述第四Key-Value命令携带的所述N个Key,或在所述第四Key-Value命令还携带N个Key指针的情况下,通过解析所述第四Key-Value命令获得所述第四Key-Value命令携带的N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述N个Key;或在所述第四Key-Value命令携带指向N个Key指针的指针的情况下,基于所述第四Key-Value命令携带的指向所述N个Key指针的指针,从所述启动器的缓存区或所述第四Key-Value命令的随命令数据区获取所述N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述N个Key;
在所述第四Key-Value命令还携带了N个元数指针的情况下,通过解析所述第四Key-Value命令获得所述第四Key-Value命令携带的N个元数据指针;或者在所述第四Key-Value命令还携带了指向N个元数据指针的指针的情况下,基于所述第四Key-Value命令所携带的指向所述N个元数据指针的指针,从所述启动器的缓存区或者所述第四Key-Value命令的随命令数据区获取所述N个元数据指针;
在所述目标器的NVM中查找所述N个Key对应的N条Value的元数据;将所述N条Value中的每条Value的元数据写入所述N个元数据指针之中的不同元数据指针所指向的所述启动器的缓存区,所述N条Value的元数据之中与Key-i对应的Value的元数据,被写入到所述N个元数据指针中的与所述Key-i对应的元数据指针所指向的所述启动器的缓存区,所述Key-i对应的Value的元数据包含Key-i对应的Value的长度信息。
40.根据权利要求39所述的目标器,其特征在于,所述第一操作方式指示所指示的操作方式为写入操作,所述第一Key-Value命令还携带了N条Value或者N个Value指针或者指向N个Value指针的指针;
其中,在所述第一Key-Value命令携带N条Value的情况下,在所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作的方面,所述控制器具体用于:通过解析所述第一Key-Value命令获得所述第一Key-Value命令携带的N条Value;将所述N条Value写入所述目标器的NVM中;
或者,
在所述第一Key-Value命令还携带N个Value指针的情况下,在所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作的方面,所述控制器具体用于:通过解析所述第一Key-Value命令获得所述第一Key-Value命令携带的N个Value指针;从所述N个Value指针所指向的所述启动器的缓存区获取所述N个Key对应的N条Value,将所述N条Value写入所述目标器中的NVM中;
或者,在所述第一Key-Value命令还携带了指向N个Value指针的指针的情况下,在针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作的方面,所述控制器具体用于:基于所述第一Key-Value命令携带的所述指向N个Value指针的指针,从所述启动器的缓存区或所述第一Key-Value命令的随命令数据区获取所述N个Value指针;从所述N个Value指针所指向的所述启动器的缓存区获取所述N个Key对应的N条Value,将所述N条Value写入所述目标器中的NVM中。
41.根据权利要求37所述的目标器,其特征在于,所述第一操作方式指示所指示的操作方式为删除操作,在所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作的方面,所述控制器具体用于将所述N个Key对应的Value从所述目标器的NVM中删除。
42.根据权利要求36至41任一项所述的目标器,其特征在于,所述控制器还用于,在接收来自启动器的格式符合高速非易失性存储器接口标准的第一Key-Value命令之前,接收格式符合NVMe接口标准的第五命令,所述第五命令携带第五操作方式指示和第五操作对象类型指示,所述第五操作方式指示所指示的操作方式为获取操作,其中,所述第五操作对象类型指示所指示的操作对象类型包括Key;当所述第五命令还携带指向规则指针的指针和指向Key集合指针的指针的情况下,基于所述第五命令携带的指向规则指针的指针,从所述启动器的缓存区或所述第五命令的随命令数据区获取所述规则指针;基于所述第五命令携带的指向Key集合指针的指针,从所述启动器的缓存区或所述第五命令的随命令数据区获取所述Key集合指针;从所述规则指针所指向的所述启动器的缓存区获取Key集合遍历规则;基于所述Key集合遍历规则从所述目标器的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的所述启动器的缓存区,其中,所述N个Key中的部分或全部Key为所述Key集合中的部分或全部Key;
或者,所述控制器还用于,在接收来自启动器的格式符合高速非易失性存储器接口标准的第一Key-Value命令之前,接收格式符合NVMe接口标准的第五命令,所述第五命令携带第五操作方式指示和第五操作对象类型指示,所述第五操作方式指示所指示的操作方式为获取操作,所述第五操作对象类型指示所指示的操作对象类型包括Key;当所述第五命令还携带规则指针和Key集合指针的情况下,从所述规则指针所指向的所述启动器的缓存区获取Key集合遍历规则;基于所述Key集合遍历规则从所述目标器的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的所述启动器的缓存区,所述N个Key中的部分或全部Key为所述Key集合中的部分或全部Key;
或者,所述控制器还用于,在接收来自启动器的格式符合高速非易失性存储器接口标准的第一Key-Value命令之前,接收格式符合NVMe接口标准的第五命令,所述第五命令携带第五操作方式指示和第五操作对象类型指示,所述第五操作方式指示所指示的操作方式为获取操作,其中,所述第五操作对象类型指示所指示的操作对象类型包括Key;当所述第五命令还携带了Key集合遍历规则和携带Key集合指针的情况下,通过解析所述第五命令获取所述第五命令所携带的所述Key集合遍历规则;基于所述Key集合遍历规则从所述目标器的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的所述启动器的缓存区,其中,所述N个Key中的部分或全部Key为所述Key集合中的部分或全部Key。
43.一种计算机设备,其特征在于,包括:处理器和NVMe,所述NVMe为权利要求15~21任意一项所述的NVMe,或所述NVMe为权利要求29~35任意一项所述的NVMe。
44.一种数据访问系统,其特征在于,包括:启动器和目标器,所述目标器为权利要求22~28任意一项所述的目标器,或所述目标器为权利要求36~42任意一项所述的目标器。
45.一种计算机设备,其特征在于,包括:
处理器和高速非易失性存储器(NVMe);所述处理器用于发送格式符合NVMe接口标准的第一键-值(Key-Value)命令;
其中,所述NVMe,用于接收来自所述处理器的格式符合NVMe接口标准的第一键-值(Key-Value)命令;其中,所述第一Key-Value命令携带第一操作方式指示和第一操作对象类型指示,所述第一操作对象类型指示所指示的操作对象类型包括Value;获取所述第一Key-Value命令对应的N个Key,其中,所述N为大于或者等于1的整数;针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作。
46.根据权利要求45所述的计算机设备,其特征在于,所述第一Key-Value命令还携带了所述N个Key,其中,在所述获取所述第一Key-Value命令对应的N个Key的方面,所述NVMe具体用于通过解析所述第一Key-Value命令获取所述Key-Value命令携带的所述N个Key;
或者,所述第一Key-Value命令还携带了N个Key指针,在所述获取所述第一Key-Value命令对应的N个Key的方面,所述NVMe具体用于从所述N个Key指针所指向的缓存区获取所述第一Key-Value命令对应的所述N个Key。
47.根据权利要求46所述的计算机设备,其特征在于,所述第一Key-Value命令还携带了N个Value指针,其中,所述第一操作方式指示所指示的操作方式为获取操作;
在所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作的方面,所述NVMe具体用于,
从所述NVMe的非易失性存储介质(NVM)中获取所述N个Key对应的N条Value,将获取的所述N条Value中的每条Value写入所述N个Value指针中的不同Value指针所指向的缓存区,其中,所述N条Value之中的与Key-i对应的Value,被写入了到所述N个Value指针中的与所述Key-i对应的Value指针所指向的缓存区,所述Key-i为所述N个Key中的任意一个Key。
48.根据权利要求47所述的计算机设备,其特征在于,
所述NVMe还用于,在接收所述第一Key-Value命令之前,接收格式符合NVMe接口标准的第二Key-Value命令,其中,所述第二Key-Value携带第二操作方式指示和第二操作对象类型指示,所述第二操作方式指示所指示的操作方式为获取操作,其中,所述第二操作对象类型指示所指示的操作对象类型包括Value的元数据,所述第二Key-Value命令还携带N个元数据指针;
在所述第二Key-Value命令还携带N个Key指针的情况下,从所述N个Key指针所指向的缓存区获取所述N个Key;或在所述第二Key-Value命令还携带所述N个Key的情况下,通过解析所述第二Key-Value命令获取所述第二Key-Value命令携带的所述N个Key;
在所述NVMe的NVM中查找所述N个Key对应的N条Value的元数据;将所述N条Value中的每条Value的元数据写入所述N个元数据指针之中的不同元数据指针所指向的缓存区,所述N条Value的元数据之中与Key-i对应的Value的元数据,被写入到所述N个元数据指针中的与所述Key-i对应的元数据指针所指向的缓存区,其中,所述Key-i对应的Value的元数据包含Key-i对应的Value的长度信息。
49.根据权利要求46所述的计算机设备,其特征在于,所述第一操作方式指示所指示的操作方式为写入操作,所述第一Key-Value命令还携带N个Value指针或N条Value;
其中,在所述第一Key-Value命令还携带N个Value指针的情况下,在所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作的方面,所述NVMe具体用于,从所述第一Key-Value命令携带的N个Value指针所指向的缓存区获取所述N个Key对应的N条Value,将所述N条Value写入到所述NVMe的NVM中;
或者,在所述第一Key-Value命令还携带N条Value情况下,在所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作的方面,所述NVMe具体用于,通过解析所述第一Key-Value命令获取所述第一Key-Value命令携带的所述N条Value,将所述N条Value写入所述NVMe的NVM中。
50.根据权利要求46所述的计算机设备,其特征在于,所述第一操作方式指示所指示的操作方式为删除操作,在所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作的方面,所述NVMe具体用于,将所述N个Key对应的Value从所述NVMe的NVM中删除。
51.根据权利要求45至50任一项所述的计算机设备,其特征在于,
所述NVMe还用于,在接收所述第一Key-Value命令之前,接收格式符合NVMe接口标准的第三命令,所述第三命令携带第三操作方式指示和第三操作对象类型指示,所述第三操作方式指示所指示的操作方式为获取操作,所述第三操作对象指示所指示的操作对象类型包括Key;所述第三命令还携带Key集合指针;
当所述第三命令还携带了规则指针的情况下,从所述规则指针所指向的缓存区获取Key集合遍历规则;或者,当所述第三命令还携带了Key集合遍历规则的情况下,通过解析所述第三命令获取所述第三命令携带的所述Key集合遍历规则;
基于所述Key集合遍历规则从所述NVMe的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的缓存区,所述N个Key中的部分或全部Key为所述Key集合中的部分或全部Key。
52.一种数据访问系统,其特征在于,包括:
启动器和目标器;
所述启动器,用于发送格式符合高速非易失性存储器(NVMe)接口标准的第一键-值(Key-Value)命令;
所述目标器,用于接收来自所述启动器的格式符合NVMe接口标准的第一键-值(Key-Value)命令;其中,所述第一Key-Value命令携带第一操作方式指示和第一操作对象类型指示,所述第一操作对象类型指示所指示的操作对象类型包括Value;获取所述第一Key-Value命令对应的N个Key,其中,所述N为大于或者等于1的整数;针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作。
53.根据权利要求52所述的系统,其特征在于,所述第一Key-Value命令还携带N个Key或N个Key指针指向N个Key指针的指针;
在所述第一Key-Value命令还携带指向N个Key指针的指针的情况下,在获取所述第一Key-Value命令对应的N个Key的方面,所述目标器具体用于基于所述第一Key-Value命令携带的指向所述N个Key指针的指针,从所述启动器的缓存区或者所述第一Key-Value命令的随命令数据区获取所述N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述第一Key-Value命令对应的所述N个Key;
或者,
在所述第一Key-Value命令携带N个Key指针情况下,在所述获取所述第一Key-Value命令对应的N个Key的方面,所述目标器具体用于通过解析所述第一Key-Value命令以获取所述第一Key-Value命令携带的所述N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述第一Key-Value命令对应的所述N个Key;
或者,
在所述第一Key-Value命令携带所述N个Key情况下,在所述获取所述第一Key-Value命令对应的N个Key的方面,所述目标器具体用于通过解析所述第一Key-Value命令以获取所述第一Key-Value命令携带的所述N个Key。
54.根据权利要求53所述的系统,其特征在于,所述第一操作方式指示所指示的操作方式为获取操作,所述第一Key-Value命令还携带N个Value指针或指向N个Value指针的指针;
所述目标器还用于在所述第一Key-Value命令还携带了N个Value指针的情况下,通过解析所述第一Key-Value命令以获得所述第一Key-Value命令携带的N个Value指针;或者在所述第一Key-Value命令还携带指向N个Value指针的指针的情况下,所述目标器基于所述第一Key-Value命令携带的指向所述N个Value指针的指针,从所述启动器的缓存区或所述第一Key-Value命令的随命令数据区获取所述N个Value指针;
其中,在所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作的方面,所述目标器具体用于从所述目标器的非易失性存储介质(NVM)中获取所述N个Key对应的N条Value,将获取的所述N条Value中的每条Value写入所述N个Value指针中的不同Value指针所指向的所述启动器的缓存区,其中,所述N条Value之中的与Key-i对应的Value,被写入了到所述N个Value指针中的与所述Key-i对应的Value指针所指向的所述启动器的缓存区,其中,所述Key-i为所述N个Key中的任意一个Key。
55.根据权利要求54所述的系统,其特征在于,
所述目标器还用于,在接收所述第一Key-Value命令之前,接收格式符合NVMe接口标准的第四Key-Value命令,所述第四Key-Value命令携带第四操作方式指示和第四操作对象类型指示,所述第四操作方式指示所指示的操作方式为获取操作,所述第四操作对象类型指示所指示的操作对象类型包括Value的元数据;
在所述第四Key-Value命令还携带了N个Key的情况下,通过解析所述第四Key-Value命令获得所述第四Key-Value命令携带的所述N个Key,或在所述第四Key-Value命令还携带N个Key指针的情况下,通过解析所述第四Key-Value命令获得所述第四Key-Value命令携带的N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述N个Key;或在所述第四Key-Value命令携带指向N个Key指针的指针的情况下,基于所述第四Key-Value命令携带的指向所述N个Key指针的指针,从所述启动器的缓存区或所述第四Key-Value命令的随命令数据区获取所述N个Key指针,从所述N个Key指针所指向的所述启动器的缓存区获取所述N个Key;
在所述第四Key-Value命令还携带了N个元数指针的情况下,通过解析所述第四Key-Value命令获得所述第四Key-Value命令携带的N个元数据指针;或者在所述第四Key-Value命令还携带了指向N个元数据指针的指针的情况下,基于所述第四Key-Value命令所携带的指向所述N个元数据指针的指针,从所述启动器的缓存区或者所述第四Key-Value命令的随命令数据区获取所述N个元数据指针;
在所述目标器的NVM中查找所述N个Key对应的N条Value的元数据;将所述N条Value中的每条Value的元数据写入所述N个元数据指针之中的不同元数据指针所指向的所述启动器的缓存区,所述N条Value的元数据之中与Key-i对应的Value的元数据,被写入到所述N个元数据指针中的与所述Key-i对应的元数据指针所指向的所述启动器的缓存区,所述Key-i对应的Value的元数据包含Key-i对应的Value的长度信息。
56.根据权利要求53所述的系统,其特征在于,所述第一操作方式指示所指示的操作方式为写入操作,所述第一Key-Value命令还携带了N条Value或者N个Value指针或者指向N个Value指针的指针;
其中,在所述第一Key-Value命令携带N条Value的情况下,在所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作的方面,所述目标器具体用于,通过解析所述第一Key-Value命令获得所述第一Key-Value命令携带的N条Value;将所述N条Value写入所述目标器的NVM中;
或者,
在所述第一Key-Value命令还携带N个Value指针的情况下,在所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作的方面,所述目标器具体用于,通过解析所述第一Key-Value命令获得所述第一Key-Value命令携带的N个Value指针;从所述N个Value指针所指向的所述启动器的缓存区获取所述N个Key对应的N条Value,将所述N条Value写入所述目标器中的NVM中;
或者,在所述第一Key-Value命令还携带了指向N个Value指针的指针的情况下,在所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作的方面,目标器具体用于,基于所述第一Key-Value命令携带的所述指向N个Value指针的指针,从所述启动器的缓存区或所述第一Key-Value命令的随命令数据区获取所述N个Value指针;从所述N个Value指针所指向的所述启动器的缓存区获取所述N个Key对应的N条Value,将所述N条Value写入所述目标器中的NVM中。
57.根据权利要求53所述的系统,其特征在于,所述第一操作方式指示所指示的操作方式为删除操作,在所述针对所述N个Key中的每个Key分别对应的Value执行所述第一操作方式指示所指示的操作的方面,所述目标器具体用于将所述N个Key对应的Value从所述目标器的NVM中删除。
58.根据权利要求52至57任一项所述的系统,其特征在于,所述目标器还用于,在接收所述第一Key-Value命令之前,接收格式符合NVMe接口标准的第五命令,所述第五命令携带第五操作方式指示和第五操作对象类型指示,所述第五操作方式指示所指示的操作方式为获取操作,其中,所述第五操作对象类型指示所指示的操作对象类型包括Key;当所述第五命令还携带指向规则指针的指针和指向Key集合指针的指针的情况下,基于所述第五命令携带的指向规则指针的指针,从所述启动器的缓存区或所述第五命令的随命令数据区获取所述规则指针;基于所述第五命令携带的指向Key集合指针的指针,从所述启动器的缓存区或所述第五命令的随命令数据区获取所述Key集合指针;从所述规则指针所指向的所述启动器的缓存区获取Key集合遍历规则;基于所述Key集合遍历规则从所述目标器的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的所述启动器的缓存区,所述N个Key中的部分或全部Key为所述Key集合中的部分或全部Key;
或者,
所述目标器还用于,在接收所述第一Key-Value命令之前,接收格式符合NVMe接口标准的第五命令,所述第五命令携带第五操作方式指示和第五操作对象类型指示,所述第五操作方式指示所指示的操作方式为获取操作,所述第五操作对象类型指示所指示的操作对象类型包括Key;当所述第五命令还携带规则指针和Key集合指针的情况下,从所述规则指针所指向的所述启动器的缓存区获取Key集合遍历规则;基于所述Key集合遍历规则从所述目标器的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的所述启动器的缓存区,所述N个Key中的部分或全部Key为所述Key集合中的部分或全部Key;
或者,
所述目标器还用于,在接收所述第一Key-Value命令之前,接收格式符合NVMe接口标准的第五命令,其中,所述第五命令携带第五操作方式指示和第五操作对象类型指示,其中,所述第五操作方式指示所指示的操作方式为获取操作,所述第五操作对象类型指示所指示的操作对象类型包括Key;当所述第五命令还携带了Key集合遍历规则和携带Key集合指针的情况下,通过解析所述第五命令获取所述第五命令所携带的所述Key集合遍历规则;基于所述Key集合遍历规则从所述目标器的NVM获取Key集合;将获取的所述Key集合写入所述Key集合指针所指向的所述启动器的缓存区,其中,所述N个Key中的部分或全部Key为所述Key集合中的部分或全部Key。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2016/085759 WO2017214862A1 (zh) | 2016-06-14 | 2016-06-14 | 数据访问方法和相关装置及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107003816A true CN107003816A (zh) | 2017-08-01 |
CN107003816B CN107003816B (zh) | 2020-06-26 |
Family
ID=59431520
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680004080.5A Active CN107003816B (zh) | 2016-06-14 | 2016-06-14 | 数据访问方法和相关装置及系统 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10437481B2 (zh) |
EP (2) | EP3623954A1 (zh) |
CN (1) | CN107003816B (zh) |
WO (1) | WO2017214862A1 (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107145459B (zh) * | 2016-03-01 | 2021-05-18 | 华为技术有限公司 | 一种级联板、ssd远程共享访问的系统和方法 |
US11366610B2 (en) | 2018-12-20 | 2022-06-21 | Marvell Asia Pte Ltd | Solid-state drive with initiator mode |
CN113924766A (zh) | 2019-03-14 | 2022-01-11 | 马维尔亚洲私人有限公司 | 经由固态驱动器(ssd)之间的连接在ssd之间传输数据 |
CN113767361A (zh) | 2019-03-14 | 2021-12-07 | 马维尔亚洲私人有限公司 | 启用以太网的固态驱动器(ssd) |
EP3938881A2 (en) | 2019-03-14 | 2022-01-19 | Marvell Asia Pte, Ltd. | Termination of non-volatile memory networking messages at the drive level |
DE102020113346A1 (de) * | 2019-07-02 | 2021-01-07 | Hewlett Packard Enterprise Development Lp | Bereitstellen von service-containern in einer adaptervorrichtung |
KR20210004701A (ko) * | 2019-07-05 | 2021-01-13 | 삼성전자주식회사 | 키-밸류 기반으로 데이터를 저장하는 스토리지 장치 및 이의 동작 방법 |
CN110659305B (zh) * | 2019-08-06 | 2020-11-24 | 上海孚典智能科技有限公司 | 基于非易失存储系统的高性能关系型数据库服务系统 |
KR20210092361A (ko) | 2020-01-15 | 2021-07-26 | 삼성전자주식회사 | 스토리지 장치 및 그것의 동작 방법 |
EP3851950A1 (en) * | 2020-01-15 | 2021-07-21 | Samsung Electronics Co., Ltd. | Storage device and operation method thereof |
EP4127940A1 (en) * | 2020-05-08 | 2023-02-08 | Huawei Technologies Co., Ltd. | Remote direct memory access with offset values |
CN113746945B (zh) * | 2020-05-30 | 2023-09-12 | 华为技术有限公司 | 反向地址解析方法及电子设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140129753A1 (en) * | 2012-11-06 | 2014-05-08 | Ocz Technology Group Inc. | Integrated storage/processing devices, systems and methods for performing big data analytics |
CN103955440A (zh) * | 2013-12-18 | 2014-07-30 | 记忆科技(深圳)有限公司 | 一种非易失存储设备及其进行数据操作的方法 |
US8819335B1 (en) * | 2013-08-30 | 2014-08-26 | NXGN Data, Inc. | System and method for executing map-reduce tasks in a storage device |
US20150370700A1 (en) * | 2014-06-23 | 2015-12-24 | Google Inc. | Managing storage devices |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9323457B2 (en) * | 2013-12-09 | 2016-04-26 | Xilinx, Inc. | Memory arrangement for implementation of high-throughput key-value stores |
CN104182508B (zh) * | 2014-08-19 | 2018-10-30 | 华为技术有限公司 | 一种数据处理方法和数据处理装置 |
US10613995B2 (en) * | 2015-03-16 | 2020-04-07 | Rambus Inc. | Training and operations with a double buffered memory topology |
US10346048B2 (en) * | 2015-04-10 | 2019-07-09 | Samsung Electronics Co., Ltd. | Electronic system with storage management mechanism and method of operation thereof |
WO2017011223A1 (en) * | 2015-07-10 | 2017-01-19 | Rambus, Inc. | Thread associated memory allocation and memory architecture aware allocation |
CN105094707B (zh) * | 2015-08-18 | 2018-03-13 | 华为技术有限公司 | 一种数据存储、读取方法及装置 |
US10133492B2 (en) * | 2015-10-14 | 2018-11-20 | Samsung Electronics Co., Ltd. | Electronic system with interface control mechanism and method of operation thereof |
US9927984B2 (en) * | 2015-10-14 | 2018-03-27 | Samsung Electronics Co., Ltd. | Electronic system with interface control mechanism and method of operation thereof |
US9977623B2 (en) * | 2015-10-15 | 2018-05-22 | Sandisk Technologies Llc | Detection of a sequential command stream |
EP3916536A1 (en) * | 2015-12-28 | 2021-12-01 | Huawei Technologies Co., Ltd. | Data processing method and nvme storage device |
US10613882B2 (en) * | 2016-10-14 | 2020-04-07 | Seagate Technology Llc | Active drive API |
-
2016
- 2016-06-14 EP EP19187981.6A patent/EP3623954A1/en active Pending
- 2016-06-14 EP EP16874090.0A patent/EP3279810B1/en active Active
- 2016-06-14 WO PCT/CN2016/085759 patent/WO2017214862A1/zh active Application Filing
- 2016-06-14 CN CN201680004080.5A patent/CN107003816B/zh active Active
-
2017
- 2017-11-16 US US15/815,280 patent/US10437481B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140129753A1 (en) * | 2012-11-06 | 2014-05-08 | Ocz Technology Group Inc. | Integrated storage/processing devices, systems and methods for performing big data analytics |
US8819335B1 (en) * | 2013-08-30 | 2014-08-26 | NXGN Data, Inc. | System and method for executing map-reduce tasks in a storage device |
CN103955440A (zh) * | 2013-12-18 | 2014-07-30 | 记忆科技(深圳)有限公司 | 一种非易失存储设备及其进行数据操作的方法 |
US20150370700A1 (en) * | 2014-06-23 | 2015-12-24 | Google Inc. | Managing storage devices |
Non-Patent Citations (1)
Title |
---|
胡昊: "Key-Value数据存储加速技术研究", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Also Published As
Publication number | Publication date |
---|---|
US10437481B2 (en) | 2019-10-08 |
EP3623954A1 (en) | 2020-03-18 |
EP3279810A4 (en) | 2018-02-07 |
WO2017214862A1 (zh) | 2017-12-21 |
CN107003816B (zh) | 2020-06-26 |
EP3279810B1 (en) | 2019-09-04 |
US20180081565A1 (en) | 2018-03-22 |
EP3279810A1 (en) | 2018-02-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107003816A (zh) | 数据访问方法和相关装置及系统 | |
CN105094707B (zh) | 一种数据存储、读取方法及装置 | |
CN107491555A (zh) | 知识图谱构建方法和系统 | |
CN103631847B (zh) | 基于上下文的搜索与图形节点相关的数据存储的方法和系统 | |
CN109522538A (zh) | 表格内容的自动分列方法、装置、设备及存储介质 | |
CN105378728B (zh) | 用于表示和操纵元数据的装置和方法 | |
CN104281430A (zh) | 执行与显示在外部装置上的信息相关的功能的方法和设备 | |
CN109032999A (zh) | 笔记显示方法、电子设备及计算机存储介质 | |
CN107665227A (zh) | 一种数据版本控制方法及数据版本控制器 | |
CN104462516B (zh) | 一种信息提示方法及移动终端 | |
CN103593449B (zh) | 一种数据库资源回收方法及系统 | |
CN108509405A (zh) | 一种演示文稿的生成方法、装置以及设备 | |
CN104239381A (zh) | 便携式终端和便携式终端中的用户界面方法 | |
CN102902763B (zh) | 关联、检索信息处理数据和处理信息任务的方法及装置 | |
CN109902255A (zh) | 页面混合浏览记录生成方法、装置、设备和存储介质 | |
CN106095923A (zh) | 一种在有序榜单中添加上榜数据的方法及系统 | |
CN109582882A (zh) | 搜索结果的展现方法、装置和电子设备 | |
CN105518634B (zh) | 与外部终端交互的方法、装置和记录介质 | |
CN101770291B (zh) | 输入系统语意分析数据散列存储和分析方法 | |
CN109710144A (zh) | 笔记本的笔记页处理方法、计算机设备和存储介质 | |
CN109783740A (zh) | 关注页面的排序方法及装置 | |
CN103870571B (zh) | 多维联机分析处理系统中的立方体重构方法和装置 | |
CN103246642B (zh) | 信息处理装置以及信息处理方法 | |
CN103123651A (zh) | 一种快速查看多个同类文件的方法、装置和移动设备 | |
CN104537047B (zh) | 一种基于Lucene的服装基样板检索系统 |
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 |