CN107710170A - 减少对象存储中的写入放大 - Google Patents
减少对象存储中的写入放大 Download PDFInfo
- Publication number
- CN107710170A CN107710170A CN201680035149.0A CN201680035149A CN107710170A CN 107710170 A CN107710170 A CN 107710170A CN 201680035149 A CN201680035149 A CN 201680035149A CN 107710170 A CN107710170 A CN 107710170A
- Authority
- CN
- China
- Prior art keywords
- data object
- attributes
- key assignments
- data
- entry
- 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
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- 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/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/217—Database tuning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9024—Graphs; Linked lists
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9027—Trees
-
- 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/0604—Improving or facilitating administration, e.g. storage management
-
- 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
-
- 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
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1032—Reliability improvement, data loss prevention, degraded operation etc
- G06F2212/1036—Life time enhancement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1041—Resource optimization
- G06F2212/1044—Space efficiency improvement
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Human Computer Interaction (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种管理具有一个或多个存储设备的存储系统的方法,其包括:接收在分层数据结构中访问数据对象和该数据对象的一个或多个属性的请求、以及处理该访问请求。该请求包括对于数据对象的第一键值和对于该数据对象的一个或多个属性的相应的第二键值。对于数据对象的属性的修改的键值根据第一键值的至少一部分来被生成,并且被用来访问分层数据结构的一个或多个叶节点中的数据对象属性的树条目。还从同一组一个或多个叶节点访问数据对象的树条目。
Description
技术领域
本公开的实施例一般涉及存储器系统,并且具体涉及用于在非易失性存储设备中存储键值对的系统。
背景技术
包括快闪存储器的半导体存储设备典型地利用存储器单元来将数据存储为诸如电荷或电压的电值。例如,快闪存储器单元包括具有浮置栅极的晶体管,其中浮置栅极被用来存储表示数据值的电荷。快闪存储器是一种非易失性数据存储设备,其可以被电擦除和重新编程。更一般地,与需要电力来维持所存储的信息的易失性存储器相反,非易失性存储器(例如,快闪存储器、以及使用各种技术中的任何一种技术实施的其它类型的非易失性存储器)即使在未通电时也保留存储的信息。
非易失性存储器系统经常被用来存储信息的数据库,诸如在其中存储数据对象及其属性的数据库。数据库典型地被组织和存储为分层数据结构,例如具有在其中存储数据对象、指向数据对象的指针和属性(有时称为元数据)的节点的树数据结构(例如,B树)。当将对象和对象的N个属性写入分层数据结构时,例如响应于主机命令,典型地数据结构的N+2个节点(假设数据对象可以被整体写入单个节点)需要被更新,并且因此被重写,然而将要被写入的数据总量典型地会小于两(2)个节点的总容量。结果,存在大约(N+2)/X的“写入放大(write amplification)”,其中X是将以节点为单位写入的数据总量。
发明内容
在所附权利要求的范围内的系统、方法和设备的各种实施例每个具有若干方面,其中没有任何一个单独地负责本文所描述的属性。在不限制所附权利要求的范围的情况下,在考虑本公开之后,特别是在考虑标题为“具体实施方式”的部分之后,将理解各种实施例的方面是如何被用来减少对象存储中的写入放大的。在一些实施例中,管理具有一个或多个存储设备的存储系统的方法包括通过生成数据对象的一个或多个属性的一个或多个修改的键值来处理访问(例如,读取或写入)数据对象的请求,访问分层数据结构(例如,存储在一个或多个存储设备中的)的一个或多个叶节点中的多个树条目,并且访问分层数据结构的数据节点中的数据对象。
附图说明
为了本公开能够被更详细地理解,可以通过参考各种实施例的特征来进行更具体的描述,其中一些实施例在附图中示出。然而,附图仅仅示出了本公开的更相关的特征,因此附图不被认为是限制性的,因为描述可以承认其它有效的特征。
图1是示出根据一些实施例的数据存储系统的实施方式的框图。
图2A是示出根据一些实施例的主机计算设备的框图。
图2B是示出根据一些实施例的非易失性存储器控制器的存储器管理模块的框图。
图3A和图3B是根据一些实施例的分层数据结构的概念图。
图4A是根据一些实施例的减少的写入放大写入操作的概念流程图。
图4B是根据一些实施例的与图4A的减少的写入放大写入操作兼容的读取操作的概念流程图。
图5A至图5C示出了根据一些实施例的管理存储系统的方法的流程图表示。
根据惯例,附图中示出的各种特征可以不按比例绘画。因此,为了清楚起见,各种特征的尺寸可以被任意地扩大或缩小。另外,一些附图可能没有描绘给定系统、方法或设备的所有组件。最后,贯穿说明书和附图,相似的参考标号可以被用来表示相似的特征。
具体实施方式
非易失性存储器系统经常被用来存储信息的数据库,诸如在其中存储数据对象及其属性的数据库。数据库典型地被组织和存储为分层数据结构,例如具有在其中存储数据对象、指向数据对象的指针、和属性(有时称为元数据)的节点的树数据结构(例如,B树)。如下面更详细地描述的,将数据对象及其相关联的属性存储到分层数据结构可能导致显著的写入放大,其可以反过来减小在其中存储数据库的存储设备的使用寿命。本文描述的各种实施方式包括用于减少在其中存储数据对象和关联属性的对象存储中的写入放大的系统、方法和/或设备。
(A1)更具体地,在一些实施例中,一种管理具有一个或多个存储设备的存储系统的方法,其包括接收在分层数据结构中访问数据对象和该数据对象的一个或多个属性的请求,并且处理该访问请求。分层数据结构被存储在存储系统中,该请求包括与数据对象相对应的第一键值和与该数据对象的一个或多个属性中的每个属性相对应的一个或多个相应的第二键值。处理访问请求包括:根据第一键值的至少一部分来生成对于数据对象的一个或多个属性的一个或多个修改的键值、访问分层数据结构的一个或多个叶节点中的多个树条目、以及访问分层数据结构的数据节点中的数据对象。另外,多个访问的树条目包括数据对象条目和一个或多个属性条目,该数据对象条目包括第一键值和对该数据对象的引用,每个属性条目包括数据对象的一个或多个属性的相应属性和与该相应属性相对应的修改的键值。
(A2)在A1的方法的一些实施例中,生成一个或多个属性的一个或多个修改的键值包括:将第一键值的至少一部分前置(prepend)到一个或多个相应的第二键值中的每个相应的第二键值中。
(A3)在A1或A2的方法的一些实施例中,根据第一键值和一个或多个修改的键值,数据对象条目和一个或多个属性条目包括分层数据结构中的连续的一组树条目。
(A4)在A3的方法的一些实施例中,连续的一组树条目被存储在分层数据结构的单个叶节点中,并且该访问仅包括两个I/O操作,所述两个I/O操作包括第一I/O操作以从存储系统的非易失性存储器访问单个叶节点、以及第二I/O操作以从该存储系统的非易失性存储器访问数据节点。
(A5)在A1至A4中任一方法的一些实施例中,访问请求包括读取命令,以从分层数据结构读取数据对象和该数据对象的一个或多个属性。
(A6)在A5的方法的一些实施例中,作为存储在存储系统中的数据对象包括经编码的数据;并且该方法包括解码从分层数据结构读取的数据对象,以及向请求者提供经解码的数据对象。
(A7)在根据A1至A4中任一方法的一些实施例中,访问请求包括写入命令,以向分层数据结构写入数据对象和该数据对象的一个或多个属性。
(A8)在A7的方法的一些实施例中,访问操作包括两个I/O操作,所述两个I/O操作包括第一I/O操作以向存储系统的非易失性存储器写入包括数据对象条目和一个或多个属性条目的单个叶节点、以及第二I/O操作以向存储系统的非易失性存储器写入数据节点。
(A9)在A1至A8中任一方法的一些实施例中,分层数据结构包括节点树,该节点树包括非叶节点、叶节点和数据节点,并且至少叶节点和数据节点被存储在存储系统的非易失性存储器中。
(A10)在A10的方法的一些实施例中,该方法由与存储系统分离的主机系统执行,并且至少非叶节点被存储在主机系统的易失性存储器中。
(A11)在另一方面,主机系统包括用于可操作地耦合到具有一个或多个存储设备的存储系统的接口、一个或多个硬件处理器、和存储一个或多个程序的存储器。所述一个或多个程序在由一个或多个处理器运行时使得主机系统执行包括以下各项的操作:接收在被存储在存储系统中的分层数据结构中访问数据对象和该数据对象的一个或多个属性的请求,该请求包括与数据对象相对应的第一键值和与数据对象的一个或多个属性中的每个属性相对应的一个或多个相应的第二键值。由于通过一个或多个处理器运行一个或多个程序,被执行的操作还包括:根据第一键值的至少一部分来生成对于数据对象的一个或多个属性的一个或多个修改的键值;以及在分层数据结构中访问存储数据对象的数据节点和一个或多个叶节点中的多个树条目,所述多个树条目包括数据对象条目和一个或多个属性条目,该数据对象条目包括第一键值和对该数据对象的引用,每个属性条目包括数据对象的一个或多个属性的相应属性和与相应属性相对应的修改的键值。
(A12)在A11的主机系统的一些实施例中,主机系统还被配置为根据A2至A10中的任一方法进行操作。
(A13)另一方面,存储系统包括用于可操作地耦合到具有一个或多个存储设备的存储系统的接口、一个或多个硬件处理器、和存储一个或多个程序的控制器存储器。所述一个或多个程序在由一个或多个处理器运行时使得存储系统执行包括以下各项的操作:从主机系统接收在被存储在存储系统中的分层数据结构中访问数据对象和该数据对象的一个或多个属性的请求,该请求包括与数据对象相对应的第一键值和与数据对象的一个或多个属性中的每个属性相对应的一个或多个相应的第二键值。由于通过一个或多个处理器运行一个或多个程序,被执行的操作还包括根据第一键值的至少一部分来生成对于数据对象的一个或多个属性的一个或多个修改的键值;以及在分层数据结构中访问存储该数据对象的数据节点和一个或多个叶节点中的多个树条目,所述多个树条目包括数据对象条目和一个或多个属性条目,该数据对象条目包括第一键值和对该数据对象的引用,每个属性条目包括数据对象的一个或多个属性的相应属性和与相应属性相对应的修改的键值。
(A14)在另一方面,主机系统包括用于接收在被存储在存储系统中的分层数据结构中访问数据对象和该数据对象一个或多个属性的请求的装置,该请求包括与数据对象相对应的第一键值和与该数据对象的一个或多个属性中的每个属性相对应的一个或多个相应的第二键值。主机系统还包括:用于根据第一键值的至少一部分来生成对于数据对象的一个或多个属性的一个或多个修改的键值的装置;以及用于在分层数据结构中访问存储数据对象的数据节点和一个或多个叶节点中的多个树条目的装置,所述多个树条目包括数据对象条目和一个或多个属性条目,该数据对象条目包括第一键值和对该数据对象的引用,每个属性条目包括数据对象的一个或多个属性的相应属性和与该相应属性相对应的修改的键值。
(A15)在一些实施例中,A14的主机系统还被配置为根据A2至A10中任一方法进行操作。
(A16)在另一方面,一种计算机可读存储介质存储有被配置用于由主机系统的一个或多个处理器运行的一个或多个程序,所述一个或多个程序包括用于执行A1至A10中的任一方法的指令。
本文描述了大量细节以便提供对附图中所示的示例实施方式的全面理解。然而,可以在没有许多具体细节的情况下实践一些实施例,并且权利要求的范围仅由权利要求中具体叙述的那些特征和方面限制。
此外,熟知的方法、组件和电路未详细描述,以免不必要地模糊本文描述的实施方式的更多相关方面。
图1是示出根据一些实施例的数据存储系统100的实施方式的框图。虽然示出了一些示例特征,但是为了简洁并且为了不模糊本文公开的示例实施例的相关方面,没有示出各种其它特征。为此,作为非限制性示例,数据存储系统100包括存储设备120(有时也被称为信息存储设备、或者数据存储设备、或者存储器设备),该存储设备120包括存储控制器124和存储介质132,并且与计算机系统110(例如,主机系统或主计算机)结合使用或者包括计算机系统110。在一些实施例中,存储介质132是单个闪存设备,然而在其它实施例中,存储介质132包括多个快闪存储器设备。在一些实施例中,存储介质132是NAND型快闪存储器或NOR型快闪存储器。在一些实施例中,存储介质132包括一个或多个三维的(three-dimensional,3D)存储器设备。另外,在一些实施例中,存储控制器124是固态驱动器(solid-state drive,SSD)控制器。然而,根据各种各样的实施例的方面,可以包括其它类型的存储介质(例如,PCRAM、ReRAM、STT-RAM等)。在一些实施例中,快闪存储器设备包括一个或多个快闪存储器裸芯、一个或多个快闪存储器封装、一个或多个快闪存储器沟道等。在一些实施例中,数据存储系统100能够包含一个或多个存储设备120。
计算机系统110通过数据连接101被耦合到存储控制器124。然而,在一些实施例中,计算机系统110包括存储控制器124或存储控制器124的一部分,作为组件和/或作为子系统。例如,在一些实施例中,存储控制器124的一些或所有功能由在计算机系统110上运行的软件来实施。计算机系统110可以是任何合适的计算机设备,诸如计算机、膝上型计算机、平板设备、上网本、互联网亭、个人数字助理、移动电话、智能电话,游戏设备、计算机服务器、或者任何其它计算设备。计算机系统110有时被称为主机、主机系统、客户端或客户端系统。在一些实施例中,计算机系统110是服务器系统,诸如数据中心中的服务器系统。在一些实施例中,计算机系统110包括一个或多个处理器、一种或多种类型的存储器、显示器和/或其它用户接口组件(诸如键盘、触摸屏显示器、鼠标、跟踪板、数字相机、和/或任意数量的补充I/O设备),以将功能添加到计算机系统110。在一些实施例中,计算机系统110不具有显示器和其它用户界面组件。
存储介质132通过连接103被耦合到存储控制器124。连接103有时被称为数据连接,但是还典型地传达除了数据之外的命令,并且可选地传达除了将要被存储在存储介质132中的数据值和从存储介质132读取的数据值之外的元数据、错误纠正信息、和/或其它信息。然而,在一些实施例中,存储控制器124和存储介质132被包括在相同设备(即集成设备)中作为其组件。此外,在一些实施例中,存储控制器124和存储介质132被嵌入在诸如移动设备、平板、其它计算机或计算机控制的设备的主机设备(例如,计算机系统110)中,并且本文所述的方法至少部分地由嵌入式存储控制器来执行。存储介质132可以包括任意数量的(即,一个或多个)存储器设备(例如,NVM 134-1、NVM 134-2至NVM 134-n),该存储器设备包括但不限于诸如(多个)快闪存储器设备的非易失性半导体存储器设备。例如,(多个)快闪存储器设备能够被配置用于适于诸如云计算的应用的企业存储、用于数据库应用、主储存器和/或辅助储存器、或者用于高速缓存存储(或将要被存储)在诸如硬盘驱动器的辅助储存器。额外地或者可替换地,(多个)快闪存储器设备还能够被配置用于相对较小规模的应用,诸如个人闪存驱动器或者个人计算机、膝上型计算机和平板计算机的硬盘替代品。
存储介质132的存储器设备(NVM 134-1、NVM 134-2等)包括可寻址且可单独选择的块,诸如存储介质的可选部分136(在本文中也被称为选择的部分136)。在一些实施例中,可单独选择的块(有时称为擦除块)是快闪存储器设备中的最小尺寸的可擦除单元。换句话说,每个块包含能够被同时擦除的最小数量的存储器单元。每个块通常被进一步划分成多个页和/或字线,其中每个页或每个字线典型地是块中最小的可单独访问的(可读和可写的)部分的实例。在一些实施例中(例如,使用某些类型的快闪存储器),然而,数据集的最小的可单独访问单元是作为页的子单元的扇区。也就是说,块包括多个页,每个页包含多个扇区,并且每个扇区是用于向快闪存储器设备写入数据和从快闪存储器设备读取数据的数据的最小单元。
在一些实施例中,存储控制器124包括管理模块121、主机接口129、存储介质接口128和(多个)附加模块125。存储控制器124可以包括为了简洁并且为了不模糊本文公开的示例实施例的相关特征而未示出的各种附加特征,并且特征的不同布置是可能的。主机接口129通过数据连接101提供到计算机系统110的接口。类似地,存储介质接口128通过连接103提供到存储介质132的接口。在一些实施例中,存储介质接口128包括读取和写入电路,其中读取和写入电路包括能够向存储介质132提供读取信号(例如,读取NAND型快闪存储器的阈值电压)的电路。
在一些实施例中,管理模块121包括被配置为运行一个或多个程序(例如,在管理模块121中的)中的指令的一个或多个处理单元122(有时也被称为处理器、硬件处理器、CPU等)。在一些实施例中,一个或多个CPU 122-2由存储控制器124的功能内的一个或多个组件共享,并且在一些情况下超过存储控制器124的功能。管理模块121被耦合到主机接口129、(多个)附加模块125和存储介质接口128,以便协调这些组件的操作。在一些实施例中,如下面更详细地讨论的,管理模块121的一个或多个模块在计算机系统110中被实施。
(多个)附加模块125被耦合到存储介质接口128、主机接口129、和管理模块121。作为示例,(多个)附加模块125可以包括错误控制模块,该错误控制模块用于在写入存储器期间或者从存储器读取期间限制无意引入到数据中的不可纠正错误的数量。在一些实施例中,包括在(多个)附加模块125中的错误控制模块包括编码器和解码器。在一些实施例中,(多个)附加模块125由管理模块121的一个或多个CPU 122-2以软件运行,并且在其它实施例中,使用专用电路(例如,执行编码和解码功能)全部或部分地实施(多个)附加模块125。在一些实施例中,(多个)附加模块125通过在计算机系统110上运行的软件全部或部分地被实施。
在一些实施例中,当计算机系统(主机)110(例如,经由数据连接101,或者可替换地,经由分离的控制线或总线)向存储控制器124发送一个或多个主机写入命令时,发起写入操作。作为响应,存储控制器124从存储介质接口128(例如,经由数据连接103,或者可替换地,经由分离的控制线或总线)向存储介质132发送一个或多个写入访问命令,以将数据写入到存储介质132内的物理存储器位置(地址)。
在一些实施例中,主机写入命令包括与要被写入的数据相对应的一个或多个键值对。在一些实施例中,在向存储控制器124发送主机写入命令之前,计算机系统(主机)110生成一个或多个修改的键值对。在一些其它实施例中,在向存储介质132发送写入访问命令之前,存储控制器124经由管理模块121生成一个或多个修改的键值对。
在一些实施例中,在写入操作期间,主机接口129从计算机系统110接收要被存储在存储介质132中的数据。由主机接口129接收的数据可用于(例如,在(多个)附加模块125中的)对数据进行编码的编码器。
在一些实施例中,当计算机系统(主机)110(例如,经由数据连接101,或者可替换地,经由分离的控制线或总线)向从存储介质132请求数据的存储控制器124发送一个或多个主机读取命令时,发起读取操作。存储控制器124从存储介质接口128(例如,经由数据连接103,或者可替换地,经由分离的控制线或总线)向存储介质132发送一个或多个读取访问命令,以根据存储介质132内的物理存储器位置(地址)获得原始读取数据。
在一些实施例中,主机读取命令包括与要被读取的数据相对应的一个或多个键值对。在一些实施例中,在向存储控制器124发送主机读取命令之前,计算机系统(主机)110生成一个或多个修改的键值对。在一些其它实施例中,在向存储介质132发送读取访问命令之前,存储控制器124经由管理模块121生成一个或多个修改的键值对。
在一些实施例中,存储介质接口128向解码器(例如,在(多个)附加模块125中的)提供原始读取数据。如果解码成功,则经解码的数据被提供给主机接口129,其中经解码的数据可用于计算机系统110,或者作为对主机读取命令的响应被提供给计算机系统110。在一些实施例中,如果解码不成功,则存储控制器124可以求助于若干补救动作或者提供不能解决的错误状况的指示。
如以上所解释的,存储介质(例如,存储介质132)被划分成若干可寻址和可单独选择的块,并且每个块可选地(但典型地)被进一步分成多个页和/或字线和/或扇区。虽然在块的基础上执行存储介质的擦除,但是在许多实施例中,在块的更小子单元上(例如,在页的基础上、在字线的基础上或者在扇区的基础上)执行存储介质的读取和编程。在一些实施例中,块的更小子单元由多个存储器单元(例如,单级单元(Single-Level Cell,SLC)或多级单元(Multi-Level Cell,MLC))构成。在一些实施例中,编程在整个页上执行。
图2A是示出根据一些实施例的计算机系统110的实施方式的框图。计算机系统110典型地包括用于运行存储在存储器206-1中的模块、程序和/或指令的一个或多个处理器202(有时也被称为CPU、处理单元、硬件处理器、微处理器或微控制器),并且从而执行处理操作、存储器206-1和用于互连这些组件的一个或多个通信总线208-1。通信总线208-1可选地包括互连并控制系统组件之间的通信的电路(有时被称为芯片组)。在一些实施例中,诸如由图1所表示的那些实施例中,计算机系统110通过通信总线208-1和存储系统接口205被耦合到存储设备120。在一些实施例中,计算机系统110包括用于例如经由诸如互联网、内联网或局域网等的通信网络将计算机系统110耦合到其它系统(未示出)的一个或多个通信接口204。
存储器206-1包括诸如DRAM、SRAM、DDR RAM或其它随机存取固态存储器设备的高速随机存取存储器,并且可以包括诸如一个或多个磁盘存储设备、光盘存储设备、快闪存储器设备或其它非易失性固态存储设备的非易失性存储器。存储器206-1可选地包括位于远离(多个)处理器202的一个或多个存储设备。存储器206-1,或者可替换地,存储器206-1内的(多个)非易失性存储器设备包括非瞬时性计算机可读存储介质。在一些实施例中,存储器206-1、或者存储器206-1的计算机可读存储介质存储以下程序、模块和数据结构、或者它们的子集:
·操作系统210,其包括用于处理各种基本系统服务和用于执行依赖于硬件的任务的过程;
·应用212;
·文件系统214;
·用于访问存储设备120的设备驱动器216,其包括:
o接收模块218-1,其用于接收主机访问命令;
o写入模块220-1,其用于向存储设备120写入数据;
o读取模块222-1,其用于从存储设备120读取数据;
o分层数据结构访问模块224-1,其用于访问分层数据结构(例如,图3B的分层数据结构300-2),其包括:
■修改的键值生成模块226-1,其用于生成修改的键值对;
■访问模块228-1,其用于访问分层数据结构内的节点;以及
·分层数据结构(例如,图3B的分层数据结构300-2)的高速缓存部分230-1,其被存储在存储设备120的非易失性存储介质中。
以上提到的元件中的每一个可以被存储在前述存储器设备中的一个或多个存储器设备中,并且与用于执行上述功能的一组指令相对应。以上提到的模块或程序(即,指令集)不需要被实施为分离的软件程序、过程或模块,并且因此这些模块的各种子集可以在各种实施例中被组合或者另外被重新布置。在一些实施例中,存储器206-1可以存储以上提到的模块和数据结构的子集。另外,存储器206-1可以存储以上没有描述的附加模块和数据结构。在一些实施例中,存储在存储器206-1中的程序、模块和数据结构、或者存储器206-1的计算机可读存储介质提供用于实施下面参考图3A至图3B、图4A至图4B和图5A至图5C描述的方法中的相应操作的指令。
尽管图2A示出了根据一些实施例的计算机系统110,但是图2A意图更多地作为可能存在于计算机系统110中的各种特征的功能描述,而不是作为本文描述的实施例的结构示意。实际上,如本领域的普通技术人员所认识到的,分开示出的程序、模块和数据结构可以被组合,并且一些程序、模块和数据结构可以被分开。
图2B是示出根据一些实施例的管理模块121的实施方式的框图。管理模块121典型地包括用于运行存储在存储器206-2中的模块、程序和/或指令并且从而执行处理操作的一个或多个处理器122(有时也被称为CPU、处理单元、硬件处理器、微处理器或微控制器)、存储器206-2、以及用于互连这些组件的一个或多个通信总线208-2。通信总线208-2可选地包括互连并控制系统组件之间的通信的电路(有时被称为芯片组)。在一些实施例中,诸如由图1所表示的那些实施例中,管理模块121通过通信总线208-2被耦合到计算机系统110和存储介质132。存储器206-2包括诸如DRAM、SRAM、DDR RAM或其它随机存取固态存储器设备的高速随机存取存储器,并且可以包括诸如一个或多个磁盘存储设备、光盘存储设备、快闪存储器设备或其它非易失性固态存储设备的非易失性存储器。存储器206-2可选地包括位于远离(多个)处理器122的一个或多个存储设备,或者替代地,存储器206-2内的(多个)非易失性存储器设备包括非瞬时性计算机可读存储介质。在一些实施例中,存储器206-2、或者存储器206-2的计算机可读存储介质存储以下程序、模块、和数据结构、或者它们的子集:
·接口模块232,其用于与诸如存储器控制器126和非易失性存储器设备134的其它组件通信;
·接收模块218-2,其用于接收主机访问命令;
·写入模块220-2,其用于向非易失性存储器设备134写入;
·读取模块222-2,其用于从非易失性存储器设备134读取;
·分层数据结构访问模块224-2,其用于访问分层数据结构(例如,图3B的分层数据结构300-2),其包括:
o修改的键值生成模块226-2,其用于生成修改的键值对;
o访问模块228-2,其用于访问分层数据结构内的节点;
·分层数据结构(例如,图3B的分层数据结构300-2)的高速缓存部分230-2,其被存储在存储设备120的非易失性存储介质中。
以上提到的元件中的每一个可以被存储在前述存储器设备中的一个或多个存储器设备中,并且与用于执行上述功能的一组指令相对应。以上提到的模块或程序(即,指令集)不需要被实施为分离的软件程序、过程或模块,并且因此这些模块的各种子集可以在各种实施例中被组合或者另外被重新布置。在一些实施例中,存储器206-2可以存储以上提到的模块和数据结构的子集。另外,存储器206-2可以存储以上没有描述的附加模块和数据结构。在一些实施例中,存储在存储器206-2中的程序、模块和数据结构或者存储器206-2的计算机可读存储介质提供用于实施下面参考图3A至图3B、图4A至图4B和图5A至图5C描述的方法中的各个操作的指令。
尽管图2B示出了根据一些实施例的管理模块121,但是图2B意图更多地作为可能存在于管理模块121中的各种特征的功能描述,而不是作为本文描述的实施例的结构示意。实际上,如本领域的普通技术人员所认识到的,分开示出的程序、模块和数据结构可以被组合,并且一些程序、模块和数据结构可以被分开。
图3A是分层数据结构300-1(例如,B树)的简化的概念图,该分层数据结构300-1是通常在数据库和文件系统中使用的数据结构的类型。根节点302是分层数据结构300-1内的最高点,并且充当分层数据结构内的所有其它节点的父节点(parent node)(即,根节点具有零的节点深度)。在一些实施例中,在根节点302之下是内部(非叶)节点304(例如,节点304-1至304-n)和叶节点306(例如,叶节点306-1至306-m)。内部节点304可以具有可变数量的子节点。不具有其自身的子节点的子节点称为叶节点。叶节点306中的条目指向或者另外引用特定数据节点318、或存储在特定数据节点318内的特定数据对象320,该特定数据节点318可以存储在诸如存储介质132的非易失性存储器中。
叶节点306可以存储可变数量的键和值。经常被包括在这些键和值当中的是数据对象键310、数据对象指针312、属性键314(例如,属性键314a至314b)、和属性值316(例如,属性值316a至316b)。为了便于讨论,属性值在本文中有时被称为属性。此外,在一些实施例中,属性、或属性值包括属性标识符(例如,标识属性的类型)和值两者(例如,“颜色,红色”,其中“颜色”是属性标识符,“红色”是值)。然而,当前的讨论在不考虑这种属性的准确形式或内容的情况下是可应用的。
叶节点中的每个键值对在本文中有时被称为条目或树条目308(例如,树条目308a至308c)。在一些实施例中,键被用来唯一地标识诸如数据对象或属性的实体,并且因此每个树条目308中的键典型地具有与每个其它树条目中的键不同的值。数据对象指针312指向可以被存储在非易失性存储器内的数据对象320(例如,数据对象指针312中的信息包括非易失性存储器内的物理位置的地址)。在一些实施例中,属性包括特定数据对象的源信息、日期信息等。数据对象320可以具有与数据对象相关联的任何数量的属性。
属性值316典型地比其关联的数据对象小得多。在一些实施例中,当属性值满足(例如,小于)预定义的属性大小阈值时,属性及其相关联的键被存储为叶节点中的树条目,否则属性值被存储在由叶节点中的相应树条目308指向的数据节点中。类似地,在一些实施例中,当数据对象满足(例如,小于)预定义的对象大小阈值时,对象及其键被存储为叶节点中的树条目。在图3A中,当数据对象满足预定义的对象大小阈值时,对象指针312将被数据对象自身代替。
如上所述,属性键314及其相关联的属性值316(例如,属性一键314a和属性一值316a)有时被称为键值对308。数据对象键310及其相关联的数据对象指针312也构成键值对。单独的键值对308典型地连续存储在它们所放置到的叶节点内。例如,数据对象键310和数据对象指针312被存储为树条目308a,其中树条目308a占据相应叶节点306(在这个示例中为节点306-2)的连续部分或块321(在这个示例中为连续部分321a)。类似地,树条目308b被存储在叶节点306-3的连续部分321b中,并且树条目308c被存储在叶节点306-m的连续部分321c中。
当数据对象320被写入分层数据结构300-1内的诸如存储介质132的非易失性存储器时,与数据对象320相关联的多个键值对308经常被存储在分离的叶节点306中。图3A中描绘了这种情况,其中数据对象键310和数据对象指针312键值对308a、属性一键314a和属性一值316a键值对308b、以及属性二键314b和属性二值316b键值对308c每个被存储在分离的叶节点306内。如以上所讨论地,这种情况会导致写入放大。
图3B是类似于图3A中描绘的分层数据结构300-1的分层数据结构300-2(例如,B树)的简化的概念图。分层数据结构300-2典型地被存储在存储设备120的非易失性存储介质132中。可选地,分层数据结构300-2的高速缓存部分被存储在计算机系统110的易失性存储器(例如,存储器206-1的易失性存储器部分)中,以便于分层数据访问模块224-1的高效操作。可替换地,分层数据结构300-2的高速缓存部分被存储在管理模块121(图2B)的易失性存储器(例如,控制器存储器206-2的易失性存储器部分)中,以便于分层数据访问模块224-2的高效操作。
分层数据结构300-2具有与分层数据结构300-1相同的节点结构。在这个示例中,用于三个示例性数据分量(即,数据对象指针312、属性一值316a、和属性二值316b)的键值对324a至324c(在本文中也称为条目或树条目)被连续地存储在单个叶节点306-2的连续部分321d内。在这个示例中,图3A中所示的属性键314已被修改以创建修改的属性键322。在一些实施例中,修改的属性322键是来自数据对象键310和原始属性键314的元素的组合,如下面更详细地说明。此外,属性键被修改,使得属性值316的树条目324b至324c和相关联的数据对象320的树条目324a在分层数据结构300-2中彼此相邻,或等同地,使得不存在与在数据对象320的树条目324a至324c之间插入的任何其它数据对象相关联的树条目(即,键值对)。当键值对被连续地存储在相同的叶节点306内时,写入放大可以显著地减少。
在一些情况下,数据对象及其属性的条目324可以与两个叶节点(诸如叶节点306-2和叶节点306-3)之间的边缘重叠。例如,这可以简单地发生,因为数据对象的条目324a位于或靠近叶节点的尾端,为将要被存储在相同的叶节点中的相应的属性条目324b、属性条目324c留下不充足的空间。在这种情况下,数据对象及其相关属性的条目被存储在分层数据结构300-2的一对叶节点中,并且必须从分层数据结构300-2的一对叶节点被访问。此外,在一些不寻常的情况下,其中对象具有大量的属性、或者对象的属性占用足够的空间量,要求三个或更多叶节点来存储数据对象的条目324a和相应的属性条目。
图4A至图4B示出了根据一些实施例的管理数据存储系统的方法的概念流程图表示。更具体地,图4A至图4B表示采用分层数据结构向诸如快闪存储器的非易失性存储器设备写入操作和从诸如闪存的非易失性存储器设备读取操作的简化的概念流程图。将理解,可以类似地使用许多闪存配置。
图4A示出了根据一些实施例的在具有分层数据结构(例如,图3B的分层数据结构300-2)的数据存储系统(例如,图1的数据存储系统100)内执行的写入数据操作的概念流程图表示。参考图1中描绘的数据存储系统100,在一些实施例中,方法400a在计算机系统(例如,计算机系统110)处被执行。在一些实施例中,方法400a由存储在非瞬时性计算机可读存储介质中的、并且由主机系统的一个或多个处理器(诸如计算机系统110的一个或多个处理单元(CPU)202(图2A))运行的指令来支配。在一些实施例中,方法400a的操作由存在于诸如存储器206-1(图2A)的非瞬时性计算机可读存储介质内的可运行软件(例如,设备驱动器216)执行。
在一些实施例中,方法400a的一些操作(或者可替换地,步骤)由存储设备(例如,存储设备120)、或者可操作地与存储设备耦合的存储设备的一个或多个组件(例如,存储控制器124)来执行,并且方法400a的其它操作在主机系统处被执行。在这些实施例中的一些中,方法400a至少部分地由存储在非瞬时性计算机可读存储介质中的、并且由设备的一个或多个处理器(诸如管理模块121的一个或多个处理单元(CPU)122(图2B))运行的指令来支配。
为了便于说明,下面描述如由主机系统(例如,由计算机系统110的CPU202和设备驱动器216(图2A))执行的方法400a。参考图2A,在一些实施例中,方法400a的操作至少部分地由以下模块执行:接收模块(例如,图2A的接收模块218-1)、写入模块(例如,图2A的写入模块220-1)、读取模块(例如读取模块222-1)、分层数据结构访问模块(例如,分层数据访问模块224-1)、以及在分层数据结构访问模块内的修改的键生成模块(例如,修改的键生成模块226-1)和访问模块(例如,访问模块228-1)。
在一些实施例中,方法400a在主机系统(例如,图1的计算机系统110,或其诸如图2A的设备驱动器216的组件)请求在分层数据结构(例如,图3B的分层数据结构300-2)内访问数据对象(例如,图3B的数据对象320)时开始。在一些实施例中,主机系统发起402a写入数据操作。在一些实施例中,发起402a写入数据操作包括指定数据对象。在一些实施例中,发起402a写入数据操作包括指定数据对象和与数据对象相关联的属性。在一些实施例中,发起402a写入数据操作包括请求数据对象被存储在数据存储设备(例如,图1的存储设备120)中。在一些实施例中,发起402a写入数据操作包括指定数据对象将被写入的数据存储设备(例如,图1的存储设备120)。
在发起402a写入数据操作之后,主机系统(例如,图1的计算机系统110、或其组件(诸如图2A的设备驱动器216))确定404所请求的数据对象的条目(例如,图3B的条目324)是否已经存在于分层数据结构300内。在一些实施例中,数据对象的条目被存储在分层数据结构的多个层级处。在一些实施例中,数据对象的条目被存储在非易失性存储介质(例如,图1的存储介质132)中。在一些实施例中,确定404数据对象的条目是否已经存在(即,已经被存储)于分层数据结构内包括:读取分层数据结构的多个层级内的树条目,以便确定分层数据结构中是否存在包含数据对象的条目的节点。
在一些实施例中,如果数据对象的条目已经存在于分层数据结构内(即,406—“是”),则所请求的数据对象(例如,图3B的数据对象320)的现有版本被无效408。因为所请求的数据对象的现有版本将被新版本代替,这典型地被完成。然而,在一些实施例中,在数据对象的新版本被存储在分层数据结构中之后(例如,在操作412之后),所请求的数据对象的现有版本被无效。
在一些实施例中,无效408数据对象的现有版本包括删除数据对象的现有版本、或者可替换地将数据对象的现有版本标记为无效,其最后导致数据对象的现有版本从来自非易失性存储介质(例如,图1的存储介质132)中的数据节点(例如,图3B的数据节点318)中被擦除。在一些实施例中,无效408数据对象的现有版本包括删除与数据对象的现有版本相关联的树条目(例如,图3B的树条目324a至324c)、或者可替换地将那些树条目标记为无效。在对象和/或其属性的旧值是快照的一部分的又一些其它实施例中,直到相应的快照被删除,旧值才会被删除。在这种实施例中,通过将版本号与相应的叶节点条目相关联,将对象和对象属性的旧值与对象和对象属性的更加新的值区分开。典型地,在正常的数据处理操作期间,防止对对象和属性的旧版本的访问。另外,典型地,只有在执行与相应快照相关联的预定义操作时,才使能对对象和属性的旧版本的访问。
在一些实施例中,方法400a通过生成410对于与所请求的数据对象(例如,图3B的数据对象320)相关联的属性(例如,属性值)的修改的键来继续。在一些实施例中,生成410对于与所请求的数据对象相关联的属性的修改的键包括:将与所请求的数据对象相关联的数据对象键(例如,图3A或图3B的数据对象键310)和原始属性键(例如,图3A的属性键314)组合。在一些实施例中,生成410对于与所请求的数据对象相关联的属性的修改的键包括:将数据对象键前置到与所请求的数据对象相关联的属性的键中。在一些其它实施例中,生成410与所请求的数据对象相关联的属性的修改的键包括:将数据对象键的部分前置到与所请求的数据对象相关联的属性的属性键中。
在生成410与所请求的数据对象相关联的属性的修改的键之后,所请求的数据对象和与所请求的数据对象相关联的属性被存储412在分层数据结构中。在一些实施例中,在存储数据对象之前,数据对象被编码有诸如Hamming、Reed-Solomon(RS)、Bose ChaudhuriHocquenghem(BCH)或低密度奇偶校验(Low-Density Parity-Check,LDPC)的错误纠正信息(有时被称为错误控制码或错误纠正码)以产生经编码的数据(例如,一个或多个码字),然后经编码的数据被存储412在分层数据结构中。
在一些实施例中,所请求的数据对象被存储在非易失性存储介质(例如,图1的存储介质132)中。在一些实施例中,所请求的数据对象被存储在叶节点(例如,图3B的叶节点306-2)内。在一些实施例中,与所请求的数据对象相关联的属性被存储在非易失性存储介质(例如,图1的存储介质132)中。在一些实施例中,存储412所请求的数据对象和与所请求的数据对象相关联的属性包括:例如通过向所请求的数据对象添加错误纠正信息来编码所请求的数据对象。
以下参考图5A至图5C呈现了关于方法400a的每个处理步骤的附加细节以及关于附加处理步骤的细节。
图4B示出了根据一些实施例的在具有分层数据结构(例如,图3B的分层数据结构300-2)的数据存储系统(例如,图1的数据存储系统100)内执行的读取数据操作的概念流程图表示。参考图1中描绘的数据存储系统100,在一些实施例中,方法400b在计算机系统(例如,计算机系统110)处被执行。在一些实施例中,方法400b由存储在非瞬时性计算机可读存储介质中的、并且由主机系统的一个或多个处理器(诸如计算机系统110的一个或多个处理单元(CPU)202(图2A))运行的指令来支配。在一些实施例中,方法400b的操作由存在于诸如存储器206-1(图2A)的非瞬时性计算机可读存储介质内的可运行软件(例如,设备驱动器216)执行。
在一些实施例中,方法400b的一些操作(或者可替换地,步骤)由存储设备(例如,存储设备120)、或者可操作地与存储设备耦合的存储设备的一个或多个组件(例如,存储控制器124)执行,并且方法400b的其它操作在主机系统处被执行。在这些实施例中的一些实施例中,方法400b至少部分地由存储在非瞬时性计算机可读存储介质中的、并且由设备的一个或多个处理器(诸如管理模块121的一个或多个处理单元(CPU)122(图2B))运行的指令来支配。
为了便于说明,下面描述如由主机系统(例如,由计算机系统110的CPU202和设备驱动器216(图2A))执行的方法400b。参考图2A,在一些实施例中,方法400b的操作至少部分地由以下模块执行:接收模块(例如,图2A的接收模块218-1)、写入模块(例如,图2A的写入模块220-1)、读取模块(例如读取模块222-1)、分层数据结构访问模块(例如,分层数据访问模块224-1)、以及在分层数据结构访问模块内的修改的键生成模块(例如,修改的键生成模块226-1)和访问模块(例如,访问模块228-1)。
在一些实施例中,方法400b在主机系统(例如,图1的计算机系统110、或其组件(诸如图2A的设备驱动器216))请求在分层数据结构(例如,图3B的分层数据结构300-2)内访问数据对象(例如,图3B的分层数据对象320)时开始。在一些实施例中,主机系统发起402b读取数据操作。在一些实施例中,发起402b读取数据操作包括选择或指定数据对象。在一些实施例中,发起402b读取数据操作包括选择或指定数据对象和与数据对象相关联的属性。在一些实施例中,发起402b读取数据操作包括请求从数据存储设备(例如,图1的存储设备120)读取数据对象。在一些实施例中,发起402a读取数据操作包括指定数据对象要从其中被读取的数据存储设备(例如,图1的存储设备120)。
在发起402b读取数据操作之后,生成410与所请求的数据对象(例如,图3B的数据对象320)相关联的属性(例如,图3B的属性316)的修改的键。以上参考图4A的方法400a的操作410讨论了生成修改的键。
方法400b在生成修改的键之后,继续在分层数据结构内访问414所请求的数据对象和与所请求的数据对象相关联的属性。在一些实施例中,从数据节点(例如,图3B的数据节点318)访问所请求的数据对象,并且从一个或多个叶节点(例如,图3B的叶节点306)访问数据对象属性。另外,如以上参考图3B所述,访问所请求的数据对象包括:从分层数据结构的单个叶节点或分层数据结构的一对叶节点访问数据对象条目(例如,图3B的条目324a)和相关联的属性条目(例如,图3B的条目324b和条目324c),并且使用访问数据对象条目中的指针访问数据对象。
在一些实施例中,或者在一些情况下(例如,当所请求的数据对象小于预定义的阈值大小时),从叶节点(例如,图3B的叶节点306-2)访问所请求的数据对象和与所请求的数据对象相关联的属性。在一些实施例中,从被存储在非易失性存储介质(例如,图1的存储介质132)内的一个或多个数据节点访问414所请求的数据对象和与所请求的数据对象相关联的属性。
在从分层数据结构内访问414所请求的数据对象之后,在一些实施例中,当主机系统(例如,图2A的计算机系统110、或其组件(诸如设备驱动器216))读取416所请求的数据对象和与所请求的数据对象相关联的属性、并且向请求主机发送所读取的数据时,方法400b继续。在一些实施例中,读取416所请求的数据对象和与所请求的数据对象相关联的属性包括:解码存储在分层数据结构内的所访问的数据。例如,如上所述,在数据对象被存储在分层数据结构中的数据节点中之前,数据对象可能已经被编码有错误纠正信息,并且当数据对象从分层数据结构中被读取时,所获得的数据对象被解码以产生适于被发送给请求主机的经解码的数据。解码过程还纠正所请求的数据对象中的任何错误,只要这种错误的数量在被用来编码所请求的数据对象的错误控制代码的错误纠正能力之内。
以下参考图5A至图5C呈现关于方法400a的每个处理步骤的附加细节以及关于附加处理步骤的细节。
图5A至图5C示出了根据一些实施例的采用分层数据结构管理数据存储系统的方法的流程图表示。参考图1中描绘的数据存储系统100,在一些实施例中,方法500在计算机系统(例如,计算机系统110)处被执行。在一些实施例中,方法500由存储在非瞬时性计算机可读存储介质中的、并且由主机系统的一个或多个处理器(诸如计算机系统110的一个或多个处理单元(CPU)202(图2A))运行的指令来管理。在一些实施例中,方法500的操作通过运行存储在诸如存储器206-1(图2A)的非瞬时性计算机可读存储介质中的软件(例如,设备驱动器216)来执行。
在一些实施例中,方法500的操作(或者可替换地,步骤)中的一些操作由存储设备(例如,存储设备120)、或者可操作地与存储设备耦合的存储设备的一个或多个组件(例如,存储控制器124)执行,并且方法500的其它操作在主机系统处被执行。在这些实施例中的一些实施例中,方法500至少部分地由存储在非瞬时性计算机可读存储介质中的、并且由设备的一个或多个处理器(诸如管理模块121的一个或多个处理单元(CPU)122(图2B))运行的指令来支配。
为了便于说明,下面描述如由主机系统(例如,由计算机系统110的CPU202和设备驱动器216(图2A))执行的方法500。参考图2A,在一些实施例中,方法500的操作至少部分地由以下模块执行:接收模块(例如,图2A的接收模块218-1)、写入模块(例如,图2A的写入模块220-1)、读取模块(例如读取模块222-1)、分层数据结构访问模块(例如,分层数据访问模块224-1)、以及分层数据结构访问模块内的修改的键生成模块(例如,修改的键生成模块226-1)和访问模块(例如,访问模块228-1)。
参考图5A至图5C,主机系统(例如,图2A的计算机系统110、或其组件(诸如设备驱动器216))管理502具有一个或多个存储设备(例如,图1的存储设备120中的NVM设备134)的存储系统(例如,图1的数据存储系统100)。在一些实施例中,由与存储系统分离的主机系统(例如,图10的计算机系统110)执行504所述管理,并且至少非叶节点(例如,图3B的节点304)的高速缓存副本被存储在主机系统的易失性存储器中。对分层数据结构的部分的高速缓存(即,将高速缓存的部分存储在易失性存储器中)能够帮助减少执行数据访问操作所要求的I/O操作的数量,例如通过避免访问非叶节点的额外的I/O操作。
方法500包括接收在分层数据结构(例如,图3B的分层数据结构300-2)中访问506数据对象(例如,图3B的数据对象320)的请求,其中分层数据结构被存储在存储系统中。该请求包括与数据对象相对应的第一键值(例如,图3B的数据对象键310)和与数据对象的一个或多个属性中的每一个属性相对应的一个或多个相应的第二键值(例如,图3A的属性键314a、属性键314b)。在一些情况下,访问数据对象及其属性的请求源于由请求主机系统(例如,计算机系统110)运行的应用212或文件系统214(图2A)。
在一些实施例中,访问数据对象及其属性的请求包括508读取命令,以从分层数据结构(例如,图3B的分层数据结构300-2)读取数据对象和该数据对象的一个或多个属性。在一些实施例中,作为存储在存储系统(例如,图1的数据存储系统100)中的数据对象(例如,图3B的数据对象320)包括510经编码的数据,如以上参考图4A所解释的(412)。在一些实施例中,管理存储系统包括解码(512)从分层数据结构读取的数据对象,并且向请求者提供经解码的数据,如以上参照图4B所解释的(416)。
在一些实施例中,访问数据对象及其属性的请求包括514写入命令,以向分层数据结构(例如,图3的分层数据结构300)写入数据对象和该数据对象的一个或多个属性。
在一些实施例中,分层数据结构(例如,图3B的分层数据结构300-2)包括516节点树,该节点树包括非叶节点(例如,图3B的节点304)、叶节点(例如,图3B的叶节点306)和数据节点(例如,图3B数据节点318),其中至少叶节点和数据节点被存储在存储系统(例如,图1的数据存储系统100)的非易失性存储器中。
管理存储系统(例如,图1的数据存储系统100)的方法500还包括处理518访问请求。在一些实施例中,处理518访问请求包括:根据第一键值的至少一部分生成520对于数据对象的一个或多个属性的一个或多个修改的键值(例如,图3B的修改的属性键322)。在一些实施例中,生成对于数据对象的一个或多个属性的一个或多个修改的键值包括将第一键值的至少一部分前置到一个或多个相应的第二键值中的每一个键值中,或者通过将第一键值的至少一部分前置到一个或多个相应的第二键值中的每一个键值中来实现。
在一些实施例中,处理518访问请求还包括:访问524分层数据结构(例如,图3B的分层数据结构300-2)的一个或多个叶节点(例如,图3B的叶节点306)中多个树条目(例如,图3B的树条目324),所述多个树条目包括数据对象条目(例如,图3B的树条目324a)和一个或多个属性条目(例如,图3B的属性条目324b至324c),该数据对象条目包括第一键值(例如,图3B的数据对象键310)和对该数据对象的引用(例如,图3的数据对象指针312),每个属性条目包括数据对象的一个或多个属性的相应属性(例如,图3B的属性值316)和与所述相应属性相对应的修改的键值(例如,图3B的修改的属性键322a至322b)。
在一些实施例中,处理访问请求还包括访问分层数据结构(例如,图3B的分层数据结构300-2)的数据节点(例如,图3B的数据节点318)中的数据对象。在一些实施例中,访问操作包括526两个I/O(输入/输出)操作,这两个I/O操作包括第一I/O操作以向存储系统的非易失性存储器(例如,图1的NVM 134)写入包括数据对象条目(例如,图3B的树条目324a)和一个或多个属性条目(例如,图3B的树条目324b至324c)的单个叶节点(例如,图3B的叶节点306-2)、以及第二I/O操作以向存储系统的非易失性存储器写入数据节点(例如,图3B的数据节点318)。
在一些实施例中,根据第一键值(例如,图3B的数据对象键310)和一个或多个修改的键值(例如,图3B的修改的属性键322),数据对象条目(例如,图3B的数据对象条目324a)和一个或多个属性条目(例如,图3B的属性条目324b至324c)包括528分层数据结构中的连续的一组树条目(例如,图3B的连续部分321d)。在一些实施例中,或者在一些情况下(例如,数据对象条目和属性条目全部位于相同的树节点中),连续的一组树条目被存储530在分层数据结构的单个叶节点中;并且访问多个树条目和数据对象仅包括两个I/O操作(例如,使用两个I/O操作来被实现),这两个I/O操作包括第一I/O操作以从存储系统的非易失性存储器访问单个叶节点(即,以便访问数据对象条目和属性条目)、以及第二I/O操作以从该存储系统的非易失性存储器访问数据节点。应该注意到,在第一I/O操作之后,位置信息从数据对象条目中被提取,并且该信息被用来确定要在第二I/O操作中被访问的数据节点。
如上所述,在一些情况下,数据对象条目和属性条目被存储在两个叶节点中,在这种情况下访问数据对象和多个属性条目包括三个I/O操作:用于访问树条目的两个I/O操作和用于访问数据对象的第三个I/O操作。还如上所述,在一些非常不寻常的情况下,数据对象条目和属性条目存储在多于两个的叶节点中。在那种情况下,访问数据对象和多个属性条目包括N+1个I/O操作,其中N是其中存储数据对象条目和属性条目的叶节点的数量。
在一些实施例中,一个或多个非易失性存储器设备的部分是擦除块。在一些实施例中,一个或多个非易失性存储器设备是快闪存储器设备。
将理解,虽然术语“第一”、“第二”等在本文中可以用来描述各种元件,但是这些元件不应该被这些术语限制。这些术语仅仅被用来将一个元件与其它元件区分开。例如,第一接触可以被称为第二接触,并且类似地,第二接触可以被称为第一接触,其改变了描述的含义,只要所有出现的“第一接触”被一致地重命名并且所有出现的第二接触都被一致地重命名。第一接触和第二接触都是接触,但他们不是同一接触。
本文所使用的术语仅仅用于描述特殊实施例的目的,并且不意图对本权利要求进行限制。如在实施例和所附权利要求的描述中所使用的,单数形式“一”、“一个”和“该”也意图包括复数形式,除非上下文清楚地另外指示。还将理解,本文使用的术语“和/或”指的是并且包含相关联的列出的项目中的一个或多个的任意和所有可能的组合。还将理解,当在本说明书中使用时,术语“包括”和/或“包含”指定了所陈述的特征、整体、步骤、操作、元件、和/或组件的存在,但是不排除一个或多个的其它特征、整体、步骤、操作、元件、组件和/或它们的组的存在或者添加。
如本文所使用的,根据上下文,术语“如果”可以被解释为意味着“当…时”或“在…时”或“响应于确定”或“根据确定”或“响应于检测”所陈述的先决条件为真。类似地,取决于上下文,短语“如果确定[所陈述的先决条件为真]”或“如果[所陈述的先决条件为真]”或“当[所陈述的先决条件为真]时”可以被解释为“在确定时”或“响应于确定”或“根据确定”或“在检测时”或“响应于检测”所陈述的先决条件为真。
为了解释的目的,已经参考特定实施方式描述了前述描述。然而,以上的例示性的讨论并不意图详尽列举或者将本权利要求限制在所公开的精确形式。鉴于以上教导,许多修改和变化是可能的。为了最好地说明操作和实际应用的原理,选择和描述了实施方式,从而使本领域的其他技术人员能够实现。
Claims (25)
1.一种管理具有一个或多个存储设备的存储系统的方法,所述方法包括:
接收在分层数据结构中访问数据对象和所述数据对象的一个或多个属性的请求,其中所述分层数据结构被存储在所述存储系统中,所述请求包括与所述数据对象相对应的第一键值和与所述数据对象的一个或多个属性中的每个属性相对应的一个或多个相应的第二键值;
处理访问请求,包括:
根据所述第一键值的至少一部分来生成对于所述数据对象的一个或多个属性的一个或多个修改的键值;
访问所述分层数据结构的一个或多个叶节点中的多个树条目,所述多个树条目包括数据对象条目和一个或多个属性条目,其中,所述数据对象条目包括所述第一键值和对所述数据对象的引用,每个属性条目包括所述数据对象的一个或多个属性的相应属性和与所述相应属性相对应的所述修改的键值;以及
访问所述分层数据结构的数据节点中的所述数据对象。
2.如权利要求1所述的方法,其中生成对于所述数据对象的一个或多个属性的所述一个或多个修改的键值包括:将所述第一键值的至少一部分前置到所述一个或多个相应的第二键值中的每一个相应的第二键值中。
3.如权利要求1至2中任一项所述的方法,其中,根据所述第一键值和所述一个或多个修改的键值,所述数据对象条目和一个或多个属性条目包括所述分层数据结构中的连续的一组树条目。
4.如权利要求3所述的方法,其中:
所述连续的一组树条目被存储在所述分层数据结构的单个叶节点中;并且
所述访问仅包括两个I/O操作,所述两个I/O操作包括第一I/O操作以从所述存储系统的非易失性存储器访问所述单个叶节点、以及第二I/O操作以从所述存储系统的所述非易失性存储器访问所述数据节点。
5.如权利要求1至4中任一项所述的方法,其中,所述访问请求包括读取命令,以从所述分层数据结构读取所述数据对象和所述数据对象的一个或多个属性。
6.如权利要求5所述的方法,其中:
作为存储在所述存储系统中的所述数据对象包括经编码的数据;并且
所述方法包括解码从所述分层数据结构读取的所述数据对象、以及向请求者提供经解码的数据对象。
7.如权利要求1至4中任一项所述的方法,其中所述访问请求包括写入命令,以向所述分层数据结构写入所述数据对象和所述数据对象的一个或多个属性。
8.如权利要求7所述的方法,其中所述访问操作包括两个I/O操作,所述两个I/O操作包括第一I/O操作以向所述存储系统的所述非易失性存储器写入包括所述数据对象条目和所述一个或多个属性条目的单个叶节点、以及第二I/O操作以向所述存储系统的所述非易失性存储器写入所述数据节点。
9.如权利要求1至8中任一项所述的方法,其中,所述分层数据结构包括节点树,所述节点树包括非叶节点、叶节点和数据节点,其中至少所述叶节点和数据节点被存储在所述存储系统的非易失性存储器中。
10.如权利要求9所述的方法,其中,所述方法由与所述存储系统分离的主机系统执行,并且至少所述非叶节点被存储在所述主机系统的易失性存储器中。
11.一种主机系统,所述系统包括:
接口,其用于可操作地耦合到具有一个或多个存储设备的存储系统;
一个或多个硬件处理器;以及
存储器,其存储有一个或多个程序,所述一个或多个程序在由所述一个或多个处理器运行时使得所述主机系统执行包括以下各项的操作:
接收在被存储在所述存储系统中的分层数据结构中访问数据对象和所述数据对象的一个或多个属性的请求,所述请求包括与所述数据对象相对应的第一键值和与所述数据对象的一个或多个属性中的每个属性相对应的一个或多个相应的第二键值;
根据所述第一键值的至少一部分来生成对于所述数据对象的一个或多个属性的一个或多个修改的键值;以及
在所述分层数据结构中访问存储所述数据对象的数据节点和一个或多个叶节点中的多个树条目,所述多个树条目包括数据对象条目和一个或多个属性条目,其中,所述数据对象条目包括所述第一键值和对所述数据对象的引用,每个属性条目包括所述数据对象的一个或多个属性的相应属性和与所述相应属性相对应的所述修改的键值。
12.如权利要求11所述的主机系统,其中,所述一个或多个程序包括分层数据访问模块,所述分层数据访问模块生成对于所述数据对象的一个或多个属性的所述一个或多个修改的键值。
13.如权利要求12所述的主机系统,其中所述分层数据访问模块包括用于在所述分层数据结构中访问存储所述数据对象的所述数据节点的指令。
14.如权利要求11所述的主机系统,其中生成所述数据对象的一个或多个属性的所述一个或多个修改的键值包括:将所述第一键值的至少一部分前置到所述一个或多个相应的第二键值中的每一个相应的第二键值中。
15.如权利要求11所述的主机系统,其中,根据所述第一键值和所述一个或多个修改的键值,所述数据对象条目和一个或多个属性条目包括所述分层数据结构中的连续的一组树条目。
16.如权利要求11所述的主机系统,其还被配置为根据权利要求2至10中任一项所述的方法进行操作。
17.一种存储系统,所述系统包括:
接口,其用于可操作地耦合到主机系统;
一个或多个处理器;以及
控制器存储器,其存储有一个或多个程序,所述一个或多个程序在由所述一个或多个处理器运行时使得所述存储系统执行包括以下各项的操作:
从所述主机系统接收在被存储在所述存储系统中的分层数据结构中访问数据对象和所述数据对象的一个或多个属性的请求,所述请求包括与所述数据对象相对应的第一键值和与所述数据对象的一个或多个属性中的每个属性相对应的一个或多个相应的第二键值;
根据所述第一键值的至少一部分来生成所述数据对象的一个或多个属性的一个或多个修改的键值;以及
在所述分层数据结构中访问存储所述数据对象的数据节点和一个或多个叶节点中的多个树条目,所述多个树条目包括数据对象条目和一个或多个属性条目,其中,所述数据对象条目包括所述第一键值和对所述数据对象的引用,每个属性条目包括所述数据对象的一个或多个属性的相应属性和与所述相应属性相对应的所述修改的键值。
18.如权利要求17所述的存储系统,其中,所述一个或多个程序包括生成对于所述数据对象的一个或多个属性的所述一个或多个修改的键值的分层数据访问模块。
19.如权利要求18所述的存储系统,其中,所述分层数据访问模块包括用于在所述分层数据结构中访问存储所述数据对象的所述数据节点的指令。
20.如权利要求17所述的存储系统,其中,生成对于所述数据对象的一个或多个属性的所述一个或多个修改的键值包括:将所述第一键值的至少一部分前置到所述一个或多个相应的第二键值中的每一个相应的第二键值中。
21.如权利要求17所述的存储系统,其中,根据所述第一键值和所述一个或多个修改的键值,所述数据对象条目和一个或多个属性条目包括所述分层数据结构中的连续的一组树条目。
22.如权利要求17所述的存储系统,其还被配置为根据权利要求2至10中任一项所述的方法进行操作。
23.一种主机系统,其包括:
用于接收在被存储在所述存储系统中的分层数据结构中访问数据对象和所述数据对象的一个或多个属性的请求的装置,所述请求包括与所述数据对象相对应的第一键值和与所述数据对象的一个或多个属性中的每个属性相对应的一个或多个相应的第二键值;
用于根据所述第一键值的至少一部分来生成对于所述数据对象的一个或多个属性的一个或多个修改的键值的装置;以及
用于在所述分层数据结构中访问存储所述数据对象的数据节点和一个或多个叶节点中的多个树条目的装置,所述多个树条目包括数据对象条目和一个或多个属性条目,其中,所述数据对象条目包括所述第一键值和对所述数据对象的引用,每个属性条目包括所述数据对象的一个或多个属性的相应属性和与所述相应属性相对应的所述修改的键值。
24.如权利要求23所述的主机系统,其还被配置为根据权利要求2至10中任一项所述的方法进行操作。
25.一种非瞬时性计算机可读存储介质,其存储有被配置用于由主机系统的一个或多个处理器运行的一个或多个程序,所述一个或多个程序包括用于执行权利要求1至10中任一项所述的方法的指令。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201562234895P | 2015-09-30 | 2015-09-30 | |
US62/234,895 | 2015-09-30 | ||
US15/144,704 US10133764B2 (en) | 2015-09-30 | 2016-05-02 | Reduction of write amplification in object store |
US15/144,704 | 2016-05-02 | ||
PCT/US2016/036720 WO2017058302A1 (en) | 2015-09-30 | 2016-06-09 | Reduction of write-amplification in object store |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107710170A true CN107710170A (zh) | 2018-02-16 |
CN107710170B CN107710170B (zh) | 2021-06-25 |
Family
ID=58407339
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680035149.0A Active CN107710170B (zh) | 2015-09-30 | 2016-06-09 | 减少对象存储中的写入放大 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10133764B2 (zh) |
CN (1) | CN107710170B (zh) |
DE (1) | DE112016002305B4 (zh) |
WO (1) | WO2017058302A1 (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10521412B2 (en) * | 2017-01-13 | 2019-12-31 | Accenture Global Solutions Limited | Complex multi-layer token apportionment stack for token assignment within multiple-tiered data structures |
CN107330094B (zh) * | 2017-07-05 | 2020-06-16 | 湖南大学 | 动态存储键值对的布鲁姆过滤器树结构及键值对存储方法 |
US10824610B2 (en) * | 2018-09-18 | 2020-11-03 | Vmware, Inc. | Balancing write amplification and space amplification in buffer trees |
KR102714211B1 (ko) * | 2019-08-01 | 2024-10-10 | 삼성전자주식회사 | 스토리지 장치, 그것을 포함하는 메모리 시스템 및 그것의 동작 방법 |
KR20220037184A (ko) | 2020-09-17 | 2022-03-24 | 삼성전자주식회사 | 스토리지 장치, 스토리지 시스템 및 스토리지 시스템의 동작 방법 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030229627A1 (en) * | 2002-06-07 | 2003-12-11 | International Business Machines Corporation | Object-oriented query execution data structure |
CN1924851A (zh) * | 2005-08-31 | 2007-03-07 | 国际商业机器公司 | 数据存储方法和数据存储结构 |
US20070185902A1 (en) * | 2006-01-26 | 2007-08-09 | Seagate Technology Llc | Object-based data storage device |
US20110252067A1 (en) * | 2010-04-12 | 2011-10-13 | Symantec Corporation | Insert optimization for b+ tree data structure scalability |
WO2014074487A1 (en) * | 2012-11-09 | 2014-05-15 | Sandisk Technologies Inc. | De-duplication techniques using nand flash based content addressable memory |
US20140344507A1 (en) * | 2013-04-16 | 2014-11-20 | Fusion-Io, Inc. | Systems and methods for storage metadata management |
WO2015047398A1 (en) * | 2013-09-30 | 2015-04-02 | Hewlett-Packard Development Company, L.P. | Overlays to modify data objects of source data |
Family Cites Families (38)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7478096B2 (en) | 2003-02-26 | 2009-01-13 | Burnside Acquisition, Llc | History preservation in a computer storage system |
US8165969B2 (en) | 2003-07-31 | 2012-04-24 | Cisco Technology, Inc. | Route optimization of services provided by one or more service providers for combined links |
WO2006066052A2 (en) | 2004-12-16 | 2006-06-22 | Sonic Solutions | Methods and systems for use in network management of content |
US7716180B2 (en) | 2005-12-29 | 2010-05-11 | Amazon Technologies, Inc. | Distributed storage system with web services client interface |
US20070174309A1 (en) | 2006-01-18 | 2007-07-26 | Pettovello Primo M | Mtreeini: intermediate nodes and indexes |
US7710777B1 (en) | 2006-12-20 | 2010-05-04 | Marvell International Ltd. | Semi-volatile NAND flash memory |
US7996642B1 (en) | 2007-04-25 | 2011-08-09 | Marvell International Ltd. | Digital locked loop on channel tagged memory requests for memory optimization |
KR100922389B1 (ko) | 2007-07-04 | 2009-10-19 | 삼성전자주식회사 | 플래시 메모리를 위한 색인 스킴 |
JP4535117B2 (ja) | 2007-11-06 | 2010-09-01 | ソニー株式会社 | メモリ装置、メモリ管理方法、およびプログラム |
US8316194B2 (en) | 2009-12-15 | 2012-11-20 | Intel Corporation | Mechanisms to accelerate transactions using buffered stores |
US8433695B2 (en) | 2010-07-02 | 2013-04-30 | Futurewei Technologies, Inc. | System architecture for integrated hierarchical query processing for key/value stores |
US8595451B2 (en) | 2010-11-04 | 2013-11-26 | Lsi Corporation | Managing a storage cache utilizing externally assigned cache priority tags |
US8868514B2 (en) | 2011-01-07 | 2014-10-21 | Microsoft Corporation | Transaction support for distributed data |
US8874515B2 (en) | 2011-04-11 | 2014-10-28 | Sandisk Enterprise Ip Llc | Low level object version tracking using non-volatile memory write generations |
JP5788369B2 (ja) | 2012-09-12 | 2015-09-30 | 株式会社東芝 | メモリシステム、コンピュータシステム、およびメモリ管理方法 |
US9734911B2 (en) | 2012-12-31 | 2017-08-15 | Sandisk Technologies Llc | Method and system for asynchronous die operations in a non-volatile memory |
US20140189211A1 (en) | 2012-12-31 | 2014-07-03 | Sandisk Enterprise Ip Llc | Remapping Blocks in a Storage Device |
US9727245B2 (en) | 2013-03-15 | 2017-08-08 | Avalanche Technology, Inc. | Method and apparatus for de-duplication for solid state disks (SSDs) |
US20150212752A1 (en) | 2013-04-08 | 2015-07-30 | Avalanche Technology, Inc. | Storage system redundant array of solid state disk array |
US20150378884A1 (en) | 2013-04-08 | 2015-12-31 | Avalanche Technology, Inc. | Storage system controlling addressing of solid storage disks (ssd) |
US9170938B1 (en) | 2013-05-17 | 2015-10-27 | Western Digital Technologies, Inc. | Method and system for atomically writing scattered information in a solid state storage device |
US9575890B2 (en) | 2014-02-27 | 2017-02-21 | International Business Machines Corporation | Supporting atomic accumulation with an addressable accumulator |
US9916356B2 (en) | 2014-03-31 | 2018-03-13 | Sandisk Technologies Llc | Methods and systems for insert optimization of tiered data structures |
US10956050B2 (en) | 2014-03-31 | 2021-03-23 | Sandisk Enterprise Ip Llc | Methods and systems for efficient non-isolated transactions |
US9390021B2 (en) | 2014-03-31 | 2016-07-12 | Sandisk Technologies Llc | Efficient cache utilization in a tiered data structure |
SG11201606318TA (en) | 2014-04-03 | 2016-08-30 | Agency Science Tech & Res | Method of maintaining data consistency |
US9652381B2 (en) | 2014-06-19 | 2017-05-16 | Sandisk Technologies Llc | Sub-block garbage collection |
US10120618B2 (en) | 2014-06-24 | 2018-11-06 | Vmware, Inc. | Systems and methods for adaptive offloading of mass storage data movement |
US9720926B2 (en) | 2014-08-04 | 2017-08-01 | Cohesity, Inc. | Read operations in a tree-based distributed file system |
US9158681B1 (en) | 2014-09-02 | 2015-10-13 | Sandisk Technologies Inc. | Process and apparatus to reduce declared capacity of a storage device by conditionally trimming |
US9678832B2 (en) | 2014-09-18 | 2017-06-13 | Sandisk Technologies Llc | Storage module and method for on-chip copy gather |
KR20160056380A (ko) | 2014-11-10 | 2016-05-20 | 삼성전자주식회사 | 스토리지 장치 및 스토리지 장치의 동작 방법 |
EP3230863B1 (en) | 2014-12-09 | 2022-03-02 | Hitachi Vantara LLC | A system and method for providing thin-provisioned block storage with multiple data protection classes |
US10261725B2 (en) | 2015-04-10 | 2019-04-16 | Toshiba Memory Corporation | Storage system capable of invalidating data stored in a storage device thereof |
US20160321010A1 (en) | 2015-04-28 | 2016-11-03 | Kabushiki Kaisha Toshiba | Storage system having a host directly manage physical data locations of storage device |
US10891264B2 (en) | 2015-04-30 | 2021-01-12 | Vmware, Inc. | Distributed, scalable key-value store |
US10303673B2 (en) | 2015-05-11 | 2019-05-28 | Apple Inc. | Hierarchical data storage |
US20170242785A1 (en) | 2016-02-23 | 2017-08-24 | Sandisk Technologies Llc | Efficient Implementation of Optimized Host-Based Garbage Collection Strategies Using Xcopy and Arrays of Flash Devices |
-
2016
- 2016-05-02 US US15/144,704 patent/US10133764B2/en active Active
- 2016-06-09 DE DE112016002305.7T patent/DE112016002305B4/de active Active
- 2016-06-09 CN CN201680035149.0A patent/CN107710170B/zh active Active
- 2016-06-09 WO PCT/US2016/036720 patent/WO2017058302A1/en active Application Filing
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030229627A1 (en) * | 2002-06-07 | 2003-12-11 | International Business Machines Corporation | Object-oriented query execution data structure |
CN1924851A (zh) * | 2005-08-31 | 2007-03-07 | 国际商业机器公司 | 数据存储方法和数据存储结构 |
US20070185902A1 (en) * | 2006-01-26 | 2007-08-09 | Seagate Technology Llc | Object-based data storage device |
US20110252067A1 (en) * | 2010-04-12 | 2011-10-13 | Symantec Corporation | Insert optimization for b+ tree data structure scalability |
WO2014074487A1 (en) * | 2012-11-09 | 2014-05-15 | Sandisk Technologies Inc. | De-duplication techniques using nand flash based content addressable memory |
US20140344507A1 (en) * | 2013-04-16 | 2014-11-20 | Fusion-Io, Inc. | Systems and methods for storage metadata management |
WO2015047398A1 (en) * | 2013-09-30 | 2015-04-02 | Hewlett-Packard Development Company, L.P. | Overlays to modify data objects of source data |
Also Published As
Publication number | Publication date |
---|---|
US20170091243A1 (en) | 2017-03-30 |
DE112016002305B4 (de) | 2023-11-09 |
WO2017058302A1 (en) | 2017-04-06 |
US10133764B2 (en) | 2018-11-20 |
DE112016002305T5 (de) | 2018-03-08 |
CN107710170B (zh) | 2021-06-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11100071B2 (en) | Key-value store tree data block spill with compaction | |
US11054991B2 (en) | Data storage system scale-out with local address remapping | |
KR102509540B1 (ko) | 저장 장치 및 그것의 가비지 컬렉션 방법 | |
US10884947B2 (en) | Methods and memory systems for address mapping | |
US11334270B2 (en) | Key-value store using journaling with selective data storage format | |
US8910017B2 (en) | Flash memory with random partition | |
US10671287B2 (en) | Method of performing garbage collection, storage device performing the same and computing system including the same | |
US20200117744A1 (en) | Counter-based compaction of key-value store tree data block | |
CN107077427A (zh) | 跨电源周期来跟踪对写入命令和解除映射命令的混合 | |
CN107710170A (zh) | 减少对象存储中的写入放大 | |
CN107870740A (zh) | 用于控制存储器的设备和方法 | |
US11681554B2 (en) | Logical address distribution in multicore memory system | |
WO2020123632A1 (en) | Key-value store tree with selective use of key portion | |
CN107003942A (zh) | 对用于增强存储设备的性能和持久性的解除映射命令的处理 | |
US9239757B2 (en) | Method and apparatus for relocating data in non-volatile memory | |
CN106255953A (zh) | 持久性数据存储体中的前向参考记录的方法和系统 | |
US20210157723A1 (en) | Memory system and operation method thereof | |
CN108027764B (zh) | 可转换的叶的存储器映射 | |
KR20200043676A (ko) | 메모리 시스템 및 메모리 시스템의 동작방법 | |
KR20210038096A (ko) | 메모리 시스템, 데이터 시스템 및 그 동작방법 | |
CN110532195A (zh) | 存储器系统的工作负荷分簇及执行其的方法 | |
TW201636850A (zh) | 記憶體系統及其操作方法 | |
KR20210045114A (ko) | 메모리 블록을 효율적으로 관리할 수 있는 메모리 시스템 및 메모리 시스템의 동작방법 | |
US11934264B2 (en) | ECC parity biasing for Key-Value data storage devices | |
CN108920293A (zh) | 固态硬盘写失败的处理方法和固态硬盘 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |