CN110196784A - 数据库及固态磁盘(ssd)控制器 - Google Patents

数据库及固态磁盘(ssd)控制器 Download PDF

Info

Publication number
CN110196784A
CN110196784A CN201811590705.8A CN201811590705A CN110196784A CN 110196784 A CN110196784 A CN 110196784A CN 201811590705 A CN201811590705 A CN 201811590705A CN 110196784 A CN110196784 A CN 110196784A
Authority
CN
China
Prior art keywords
key
barrel
value pair
metadata
value
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201811590705.8A
Other languages
English (en)
Inventor
M·特威托
Y·罗什曼
A·梅厄
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Priops Ltd
Original Assignee
Priops Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Priops Ltd filed Critical Priops Ltd
Publication of CN110196784A publication Critical patent/CN110196784A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1044Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices with specific ECC/EDC distribution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0615Address space extension
    • G06F12/063Address space extension for I/O modules, e.g. memory mapped I/O
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Databases & Information Systems (AREA)
  • Quality & Reliability (AREA)
  • Data Mining & Analysis (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

可以提供用于访问存储在固态驱动器(SSD)存储器中的键值对的系统、方法以及非易失性计算机可读介质,该方法可以包括:通过SSD存储器控制器基于输入键来计算第一桶标识和第一桶间值;基于所述第一桶标识符、所述第一桶间值和第一数据结构的第一元数据来确定存储所述键值对的块集群;基于所述输入键计算第二桶标识和第二桶间值;基于所述第二桶标识符、所述第二桶间值和第二数据结构的第二元数据来确定键值对检索信息;其中,所述第二数据结构被分配给所述块集群;以及基于所述键值对检索信息检索至少所述键值对的值。

Description

数据库及固态磁盘(SSD)控制器
交叉引用
本申请要求于2017年12月25日提交的序列号为62/610,244的美国临时专利、于2018年9月18日提交的序列号为62/732,576的美国临时专利以及于2018年10月11日提交的序列号为62/744,264的美国临时专利的优先权,上述专利全部通过引用并入本文。
技术领域
本发明涉及数据库及固态磁盘(SSD)控制器。
背景技术
越来越需要提供用于控制SSD的有效方式。
发明内容
可以提供了一种用于访问存储在固态硬盘(SSD)存储器中的键值对的方法,该方法可以包括由SSD控制器接收输入值;在输入值上应用第一散列函数以提供第一散列结果;基于第一散列结果确定桶(bucket)编号和插槽(slot)定位器;确定与由桶编号和插槽定位器来识别的逻辑插槽相关联的键值对的逻辑地址;根据插槽定位器确定键值对的物理地址;使用键值对的物理地址访问键值对;其中,插槽定位器可以是二进制序列,该二进制序列可以指示共享第一散列结果值的多个冲突键。
可以提供一种用于访问存储在固态驱动器(SSD)存储器中的键值对的方法,该方法可以包括由SSD控制器接收输入值;将输入值转换为中间值;在输入值上应用第一散列函数以提供第一散列结果;基于第一散列结果确定桶编号和插槽定位器;确定与由桶编号和插槽定位器进行识别的逻辑插槽相关联的键值对的逻辑地址;根据插槽定位器确定键值对的物理地址;使用键值对的物理地址访问键值对;其中,插槽定位器可以是二进制序列,所述二进制序列可以指示共享第一散列结果值的多个冲突键。
可以提供一种用于访问存储在固态驱动器(SSD)存储器中的键值对的方法,该方法可以包括由SSD控制器接收输入值;在输入值上应用第一散列函数以提供第一散列结果;基于第一散列结果确定桶编号和插槽定位器;确定与由桶编号和插槽定位器识别的逻辑插槽相关联的键值对的逻辑地址;根据插槽定位器确定键值对的物理地址;使用键值对的物理地址访问键值对;并且其中,确定物理地址可以包括(a)根据插槽定位器的最高有效位来计数零位的数量以找到相应的逻辑插槽,所述零位的数量等于逻辑地址的值;(b)将逻辑插槽中的多个冲突的键确定为跟随特定零位、对应于Lslot的一位的数量;(c)将存储键值对的物理插槽的标识符设置为在特定位之前的多个设置的位。
可以提供一种用于访问存储在固态驱动器(SSD)存储器中的键值对的方法,该方法可以包括由SSD控制器接收输入值;在输入值上应用第一散列函数以提供第一散列结果;基于第一散列结果确定桶编号和插槽定位器;确定与由桶编号和插槽定位器识别的逻辑插槽相关联的键值对的逻辑地址;根据插槽定位器确定键值对的物理地址;使用键值对的物理地址访问键值对;其中,确定键值对的物理地址可以包括应用提供键值对的物理地址的顺序的置换,其中,所述置换将不同的键映射到不同的值。
所述方法可以包括接收可以与新的冲突逻辑插槽相关联的新键并重新计算该排列以提供将新键和当前键映射到不同值的新排列。
可以提供一种用于访问存储在固态驱动器(SSD)存储器中的键值对的方法,该方法可以包括由SSD控制器接收输入值;在输入值上应用第一散列函数以提供第一散列结果;基于第一散列结果确定桶编号和插槽定位器;确定与由桶编号和插槽定位器识别的逻辑插槽相关联的键值对的逻辑地址;根据插槽定位器确定键值对的物理地址;使用键值对的物理地址访问键值对;其中,确定物理地址可以包括扫描映射到逻辑插槽的键的树,其中,树的节点可以指示具有将一个键与另一个键区分开的键的索引。
可以提供一种用于访问存储在固态驱动器(SSD)存储器中的键值对的方法,该方法可以包括由SSD控制器接收输入值;在输入值上应用第一散列函数以提供第一散列结果;基于第一散列结果确定键值对是否可以与存储在主数据结构或流出数据结构(outcastdata structure)中的元数据相关联;其中,当确定键值对可以与主数据结构相关联时,确定桶编号和插槽定位器;确定与由桶编号和插槽定位器识别的逻辑插槽相关联的键值对的逻辑地址;根据插槽定位器确定键值对的物理地址;以及使用键值对的物理地址访问键值对。
可以提供一种非易失性计算机可读介质,其存储用于进行下述项的指令:由固态驱动器控制器接收输入值;在输入值上应用第一散列函数以提供第一散列结果;基于第一散列结果确定桶号和插槽定位器;确定与由桶号和插槽定位器识别的逻辑插槽相关联的键值对的逻辑地址;根据插槽定位器确定键值对的物理地址;使用键值对的物理地址访问键值对;其中,插槽定位器可以是二进制序列,该二进制序列可以指示共享第一散列结果值的多个冲突键。
可以提供一种非易失性计算机可读介质,其存储用于进行下述项的指令:由SSD控制器接收输入值;在输入值上应用第一散列函数以提供第一散列结果;基于第一散列结果确定桶编号和插槽定位器;确定与由桶编号和插槽定位器识别的逻辑插槽相关联的键值对的逻辑地址;根据插槽定位器确定键值对的物理地址;使用键值对的物理地址访问键值对;并且其中,确定物理地址可以包括(a)根据插槽定位器的最高有效位来计数零位的数量以找到相应的逻辑插槽,所述零位的数量等于逻辑地址的值;(b)将逻辑插槽中的多个冲突的键确定为跟随特定零位、对应于Lslot的一位的数量;(c)将存储键值对的物理插槽的标识符设置为在特定位之前的多个设置的位。
可以提供一种非易失性计算机可读介质,其存储用于进行下述项的指令:由固态驱动器控制器接收输入值;在输入值上应用第一散列函数以提供第一散列结果;基于第一散列结果确定桶号和插槽定位器;确定与由桶号和插槽定位器识别的逻辑插槽相关联的键值对的逻辑地址;根据插槽定位器确定键值对的物理地址;使用键值对的物理地址访问键值对;其中,确定物理地址可以包括应用提供键值对的物理地址的顺序的置换,其中该置换将不同的键映射到不同的值。
可以提供一种非易失性计算机可读介质,其存储用于进行下述项的指令:接收可以与新的冲突逻辑插槽相关联的新键并重新计算该排列以提供将新键和当前键映射到不同值的新排列。
可以提供一种非易失性计算机可读介质,其存储用于进行下述项的指令:由固态驱动器控制器接收输入值;在输入值上应用第一散列函数以提供第一散列结果;基于第一散列结果确定桶号和插槽定位器;确定与由桶号和插槽定位器识别的逻辑插槽相关联的键值对的逻辑地址;根据插槽定位器确定键值对的物理地址;使用键值对的物理地址访问键值对;其中,确定物理地址可以包括扫描映射到逻辑插槽的键的树,其中,树的节点可以指示具有将一个键与另一个键区分开的键的索引。
可以提供一种非暂时性计算机可读介质,其存储用于进行下述项的指令:由SSD控制器接收输入值;在输入值上应用第一散列函数以提供第一散列结果;基于第一散列结果确定键值对是否可以与存储在主数据结构或流出数据结构中的元数据相关联;其中,当确定键值对可以与主数据结构相关联时,确定桶编号和插槽定位器;确定与由桶编号和插槽定位器识别的逻辑插槽相关联的键值对的逻辑地址;根据插槽定位器确定键值对的物理地址;以及使用键值对的物理地址访问键值对。
可以提供一种用于访问存储在固态驱动器(SSD)存储器中的键值对的系统,该系统可以包括SSD控制器,该SSD控制器可以被配置成接收输入值;在输入值上应用第一散列函数以提供第一散列结果;基于第一散列结果确定桶编号和插槽定位器;确定与桶编号和插槽定位器标识的逻辑插槽相关联的键值对的逻辑地址;根据插槽定位器确定键值对的物理地址;以及使用键值对的物理地址访问键值对;其中,插槽定位器可以是二进制序列,该二进制序列可以指示共享第一散列结果值的多个冲突键。
可以提供一种用于访问存储在固态驱动器(SSD)存储器中的键值对的系统,该系统可以包括SSD控制器,该SSD控制器可以被配置成接收输入值;在输入值上应用第一散列函数以提供第一散列结果;基于第一散列结果确定桶编号和插槽定位器;确定与由桶编号和插槽定位器识别的逻辑插槽相关联的键值对的逻辑地址;根据插槽定位器确定键值对的物理地址;使用键值对的物理地址访问键值对;并且其中,确定物理地址可以包括(a)根据插槽定位器的最高有效位来计数零位的数量以找到相应的逻辑插槽,所述零位的数量等于逻辑地址的值;(b)将逻辑插槽中的多个冲突的键确定为跟随特定零位、对应于Lslot的一位的数量;(c)将存储键值对的物理插槽的标识符设置为在特定位之前的多个设置的位。
可以提供一种用于访问存储在固态驱动器(SSD)存储器中的键值对的系统,该系统可以包括SSD控制器,该SSD控制器可以被配置成接收输入值;在输入值上应用第一散列函数以提供第一散列结果;基于第一散列结果确定桶编号和插槽定位器;确定与由桶编号和插槽定位器识别的逻辑插槽相关联的键值对的逻辑地址;根据插槽定位器确定键值对的物理地址;使用键值对的物理地址访问键值对;其中,确定键值对的物理地址可以包括应用提供键值对的物理地址的顺序的置换,其中,所述置换将不同的键映射到不同的值。
SSD控制器可以被配置成接收可以与新的冲突逻辑插槽相关联的新键并重新计算该排列以提供将新键和当前键映射到不同值的新排列。
可以提供一种用于访问存储在固态驱动器(SSD)存储器中的键值对的系统,该系统可以包括SSD控制器,该SSD控制器可以被配置成接收输入值;在输入值上应用第一散列函数以提供第一散列结果;基于第一散列结果确定桶编号和插槽定位器;确定与由桶编号和插槽定位器识别的逻辑插槽相关联的键值对的逻辑地址;根据插槽定位器确定键值对的物理地址;使用键值对的物理地址访问键值对;其中,确定物理地址可以包括扫描映射到逻辑插槽的键的树,其中,树的节点可以指示具有将一个键与另一个键区分开的键的索引。
可以提供一种用于访问存储在固态驱动器(SSD)存储器中的键值对的系统,该系统可以包括SSD控制器,该SSD控制器可以被配置成接收输入值;在输入值上应用第一散列函数以提供第一散列结果;基于第一散列结果确定键值对是否可以与存储在主数据结构或流出数据结构中的元数据相关联;其中,当确定键值对可以与主数据结构相关联时,确定桶编号和插槽定位器;确定与由桶编号和插槽定位器识别的逻辑插槽相关联的键值对的逻辑地址;根据插槽定位器确定键值对的物理地址;以及使用键值对的物理地址访问键值对。
可以提供一种用于访问存储在固态驱动器(SSD)存储器中的键值对的方法,该方法可以包括由SSD存储器控制器基于输入键计算第一桶标识符和第一桶间值;基于第一桶标识符、第一桶间值和从第一数据结构和第一流出数据结构中选择的数据结构的元数据来确定存储键值对的块集群;基于输入键计算第二桶标识和第二桶间值;基于第二桶标识符、第二桶间值和从第二数据结构和第二流出数据结构中选择的数据结构的元数据确定键值对检索信息;其中,第二数据结构和第二流出数据结构被分配给块集群;以及基于键值对检索信息至少检索键值对的值。
附图说明
说明书的结论部分中特别指出了并明确地要求了需要保护的被视为本发明的主题。然而,本发明的构造和操作方法二者连同其目的、特征、优点在结合附图进行阅读时可以通过参考下面的详细描述来得到最佳理解,在附图中:
图1是简化的插入过程的示例;
图2是简化的经排序的插入过程的示例;
图3是简化的删除过程的示例;
图4是具有连续逻辑插槽的动态分段的示例;
图5是具有累积分割的动态分割的示例;
图6是动态桶中静态分割的示例;
图7是在每个节点中编码有前缀的分离树的示例;
图8是编码有相关前缀的分离树的示例;
图9A是主数据结构的示例;
图9B是辅数据结构的示例;
图9C是辅数据结构的示例;
图10是位序列的示例;
图11是树的示例;
图12是扩展的示例;
图13是方法的示例;
图14是方法的示例;
图15是方法的示例;以及
图16是方法的示例。
具体实施方式
在以下的详细描述中,阐述了许多具体细节以便提供对本发明的透彻理解。然而,本领域技术人员应当理解的是,可以在没有这些具体细节的情况下实践本发明。在其他情况下,为了避免使本发明模糊,没有对众所周知的方法、过程和组件进行详细描述。
应当理解的是,为了说明的简单化和清楚性,附图中所示的元件并不一定按比例绘制。例如,出于清楚起见,相对于其他元件而言,一些元件的尺寸可能被夸大。此外,在认为适当的情况下,附图标记可以在附图中重复以指示对应或类似的元件。
因为本发明的所示出的实施例可以在大多数情况下使用本领域技术人员所知的电子部件和电路来实现,所以将不会在比如上所述认为必要的更大程度上解释细节,以便理解和掌握本发明的基本概念,并且避免混淆或分散本发明的教导。
说明书中对方法的任何引用应当比照适用于能够执行该方法的系统,并且应当比照适用于非易失性计算机可读介质,该非易失性计算机可读介质存储一旦由计算机执行则导致方法的执行的指令。
说明书中对系统的任何引用应当比照适用于可由系统执行的方法,并且应当比照适用于非易失性计算机可读介质,该非易失性计算机可读介质存储一旦由计算机执行则导致方法的执行的指令。
术语
a.MD-描述系统内部状态的元数据、控制/系统信息。在SSD控制器中,通常涉及地址转换相关信息、块相关数据以及用于系统状态恢复的其他信息。
b.P/E(编程/擦除)周期、周期计数(CC)、擦除计数-块被擦除(并且可能重写)的次数。
c.SLC-存储单个逻辑位值的非易失性存储器单元。
d.MLC-存储多个逻辑位值的非易失性存储器单元。
e.程序-将数据写入闪存操作(页面粒度)。
f.页面-NAND FLASH存储器的单个可编程单元保存用户数据(例如,16K字节)和冗余信息。页面按顺序编程(除非使用SLC模式)。
g.第一数据结构-存储用于选择与块集群相关联的第二数据结构的信息的数据结构。第一数据结构还可以被称为分散散列表或者主散列表。第一数据结构可以包括多个第一桶。
h.第一元数据-第一数据结构的元数据。
i.第二数据结构-存储关于键值对的检索信息的数据结构。第一数据结构可以包括多个第二桶。
j.第二元数据-第二数据结构的元数据。
k.逻辑插槽-每个桶包括多个逻辑插槽(还称为Lslots或L-slot)。(第一数据结构的)第一逻辑插槽可以包括一个或多个块集群标识符。一个或多个块集群标识符可以被称为物理地址或者物理插槽。(第二数据结构的)第二逻辑插槽可以包括一个或多个键值对的检索信息。
l.插槽定位器(还被表示为SL)属于桶,并且是用于查找桶的多个逻辑插槽的逻辑插槽的元数据。
m.冲突分离矢量(还被表示为CSV)-用于解决冲突的桶的元数据。
n.块-NAND FLASH存储器的单个可擦除单元。可能包含多个物理页面。
o.平面-闪存设备通常被分为几个平面(2个或5个),使得能够同时在所有平面上进行并行闪存访问操作。使得能够以双倍(或更大)粒度进行并行数据访问。这种闪存架构方法实际上扩大了页面大小,同时仍然提供了编写较小数据块的选择。
p.CW-代码字,由纠错码(ECC)进行处理的最小数据单元。在一些示例中,假设CW具有固定大小并且可以包括多个键值对。
q.对象-键值对(或者仅仅是键值对的值)可以称为对象。
图9A示出了包括N1个第一桶100(1)-100(N1)的第一数据结构100,每个第一桶包括第一插槽定位器、第一CSV以及存储一个或多个块集群标识符的第一逻辑插槽。
例如,第一桶100(1)包括第一插槽定位器101(1)、第一CSV 101(2)以及N2个第一逻辑插槽101(3,1)-101(3,N2)。在图9B中,第一逻辑插槽101(3,1)包括两个块集群标识符BC1 101(3,1,1)以及BC2 101(3,1,2)。
图9B示出了包括N1个第二桶110(1)-110(N1)的第二数据结构110,每个第二桶包括第二插槽定位器、第二CSV以及存储一个或多个键值对的检索信息的第二逻辑插槽。
例如,第二桶110(1)包括第二插槽定位器111(1)、第二CSV 111(2)以及N2个第二逻辑插槽111(3,1)-111(3,N2)。在图9B中,第二逻辑插槽111(3,1)包括两个键值对OB1 111(3,1,1)和OB2 111(3,1,2)的检索信息。
图9C示出了包括N1个第二桶120(1)-120(N1)的第二数据结构120,每个第二桶包括第二插槽定位器、第二CSV以及存储一个或多个代表性(REP)键值对的检索信息的第二逻辑插槽。
例如,第二桶120(1)包括第二插槽定位器121(1)、第二CSV 121(2)以及N2个第二逻辑插槽121(3,1)-121(3,N2)。在图9C中,第二逻辑插槽121(3,1)包括两个代表性键值对OB1 121(3,1,1)和OB2 121(3,1,2)的检索信息。
以下描述了用于管理具有键值接口的NAND闪存设备的计算机程序产品,存储器控制器以及方法。
这样的存储设备应该能够存储包括键和任意长度的值的对象。
这样的存储设备应该能够根据与值存储在一起的键来将该值提取给主机/用户。
键值存储设备应该能够将所述键映射到数据被存储的物理位置,以便在获取数据时对该键值存储设备进行定位。
NAND闪存的具体细节(一次写入、多次读取、大擦除单元、有限的编程-擦除周期)对映射机制施加了某些要求和限制,这些要求和限制被考虑在所提出的解决方案中。
所描述的用于管理这种存储设备的数据库是散列表的高级变体,其被称为分散散列表。
数据库驻留在随机存取存储器上(比例如DRAM的闪存访问速度快)。
数据库可以针对低内存空间占用进行优化,从而使得能够映射更多的键值对(对象)并实现低延迟,而无需从闪存中进行额外读取,以对闪存上的对象位置进行确定。
访问使用所述数据库进行管理的键值存储设备的基本操作为:
PUT(键,值,键大小,数据大小)-写对象
值=GET(键,键大小,数据大小)-读对象
DELETE(键,键大小)-删除对象
基于键值的数据库
块集群
磁盘跨度分为块集群。
块集群可以包括多个NAND模块上的多个块。
例如,对于每个数据库的实例而言,存在1000个块集群,每个集群为2GB并包括512个NAND块。
这种配置导致主映射表中存在10位块集群索引。
每个块集群中的数据按照后面所描述的某种方式按键排序。
转换级别
第一转换级别是第一数据结构(例如主散列表),其将键映射到第二数据结构(例如块集群索引)。
块集群可以指向不可变的TLC数据或当前正在填充的SLC缓冲区。
主散列表可以包括2个区域,第二区域用于解决来自第一区域的溢出或冲突。
第二转换级别将键映射到块集群中的物理位置
系统键(也称为ikey或中间键)。
具有任意长度的用户键(也称为输入键)被简化为系统键(又名键),其是用户键的指纹/散列。例如,键可以被配置成128位长度。
主键值数据库
主散列数据结构可以包括2个区域
a.区域-1:分散散列表
i.输入:从中得到散列桶+逻辑插槽#的散列(键)
ii.输出-1:指示是否需要检查区域-2的标志
iii.输出-2:块集群索引
iv.它可以使用扩展部来扩展桶的大小
b.区域-2:可以使用Outcasts表实现
i.输入:Hash(key)→Hash-Bucket+Logical-Slot#(在放弃者表中)
ii.输出-1:是否找到键。如果没有找到键,则使用区域-1中的值。
iii.输出-2:如果找到键,则使用块集群索引
分散散列表详细信息
被划分为桶,使用支持元数据进行管理。
通过某些散列函数将每个键映射到散列桶索引和逻辑插槽索引。
散列桶元数据将散列桶中的逻辑插槽转换为物理插槽号,同时还解决冲突。
每个物理插槽保持例如10位的块集群索引(对于1K集群而言)。
插槽布置
根据到达顺序和现有插槽之间的相对逻辑顺序,物理插槽被对象占用。这意味着插入操作会推动接下来的插槽(需要内存移动操作)。
散列桶元数据
MDH中的每个桶都分为多段:插槽定位器、冲突分离矢量以及物理插槽(Pslots)。分段编码的示例可以在图10中找到。
插槽定位器
对物理插槽编号(散列桶中的位置)进行编码,不包括冲突区分,以及插槽中的冲突量。即,
如果逻辑插槽中不存在冲突-提供物理插槽编号。
如果插槽中存在“t”个冲突对象-提供“t”个插槽,这些插槽中的一个插槽保持具有所查询的键的对象。
下面所描述的插槽定位器编码是一个示例,实际的压缩方案可以是不同的。
插槽定位器可以是零分离的位序列(一种游程长度代码),其通过将每个逻辑插槽编号为1来表示冲突插槽的数量。
考虑位序列“01011001100”(在图10中表示为130)。为了找到对应于逻辑插槽(L-Slot)#3(第4个槽)的物理插槽(P-Slot),需要计数5个零的等量,接下来的“1”的序列告诉了每个该L-Slot与多少个对象冲突(两个“1”表示2个对象),从位序列开始的前面的“1”的数量表示物理插槽编号(三个“1”表示第三个P-Slot)。
对于这种编码,插入新对象需要在已存在的位之间推进“1”位,即,执行存储器移动来为该位腾出空间。
在该示例中,所分配的空间是每个对象(插槽)2位,例如,每个散列桶64字节(对于具有256个插槽的散列桶中而言),可以扩展到最多3位(用于2倍的插槽的虚拟扩展),从而使得具有较低的冲突率。
虚拟扩展
存在一个虚拟分配L插槽的选项,以使得L-slot的数量不同于P-slot的数量。我们可以扩展或缩小插槽定位器以分别保持更多(例如,2倍以上)或更少的插槽。通过这种方法,我们可以减少每L个插槽的冲突的数量(概率)或者减少插槽定位器中的位数。这还可以以更大的插槽定位矢量为代价来减少所需的冲突-分离矢量的长度。
在该术语中,比率为2的虚拟扩展意味着L-slot是P-slot的两倍,例如,512对256。
冲突分离矢量
在每个L-Slot发生冲突的情况下,分离矢量有助于建立每个键的精确物理插槽(P-Slot范围内的偏移)。存在两种可能的实现:
排列实现
对于每个具有冲突的L-Slot,分离矢量将索引(可能被压缩)保持为散列参数的排列,从而为该范围中的所有键提供完美的散列函数。在数据插入期间,正在执行找到这种排列的过程。
所生成的排列也决定了放置在P-slot范围内的对象的内部顺序。即,添加新对象可能会重新排序L-slot中的其他对象。
应当注意的是,压缩方案可以在针对slot(t)中每个冲突对象的数量使用不同的索引表示。
利用完美散列函数进行处理的冲突(t)的数量可以具有上边界,例如,区域-1中每个插槽具有6个对象。过多的冲突插槽将被视为放弃者(outcasts)。
生成完美散列函数的过程可能无法找到令人满意的排列,还导致对象中的一个对象被重定位到放弃者表中。
分离树(ST)实现
每个具有冲突的L-Slot,分离矢量保持分离树(ST)(可能是压缩的),其保持所需要的来分离L-slot中的键。
使用最少位数来解决键列表之间的冲突的方法使用“插入”、“删除”以及“查找”操作。树方法每次都根据所选索引中的位的值来将键组切割成两组。决策树由“内部节点”和“叶子”组成。
可以实现上述操作,使得键将根据其值从左到右排序。
决策树的示例
存在许多方法来构建一个分隔这些键的树,因为可以按任何顺序插入键并且从树中删除键。可以实现树,以便按照键的值对键进行从左到右排序,如对于下面的键而言如图11中(树表示为150)所示:
key1=0100111
key2=0110010
key3=1011001
key4=0010010
key5=1011010
在这里,我们展示了如何在列表中轻松插入、删除和查找对象。我们在这里描述一般算法:
查找
为了找到对象,我们循着索引节点,直到我们到达每个节点的叶子为止,并根据键的位来继续。使用图11中所描述的示例,如果我们希望找到key3=1011001,则我们执行以下操作:
a.第一个节点是索引0。索引0的位为1,因此我们向右转
b.第二个节点是右儿子并代表索引5。索引5的位为0,因此我们向左转。
c.我们到达了叶子,根据树的结构叶子顺序为5
显然,排序中的第五个位置为key3
简化插入
存在多种方法来实现插入。实现它的一种方法是使用简化的插入、简单的插入算法。通过使用这样的算法,我们无法确保树中的键将被排序。
要插入一个对象,我们首先必须按照“find(查找)”中的描述来取叶子(这种操作称为“获取键”)。然后,让我们使用图11中的示例来插入一个新键-key6=0110011。“查找”算法将引导我们到key2。然后
a.获取当前驻留在该叶子中的键-得到key2=0110010。
b.查找该键和所插入的键之间不同的索引-这是索引6
c.将叶子转换为表示2的索引的节点。
d.根据所找到的索引中的位放置两个键。
现在更换叶子key2(图1中的10)(替换成如图1所示出的节点12),如图1所描述的那样。
分类插入:
我们可以通过更改插入过程和使用稍微复杂的过程来强制执行树,以便按键的值来保持键的顺序。假设我们插入key7=1001000。
a.与简化的插入过程类似,它找到相应的键。假设在我们的示例中,获取的ikey是key3=1011001。
b.不是用相应的键替换叶子(如在简化的插入过程中所做的那样),算法找到第一索引,其中,所获取的键(key3)和所插入的键(key6)是不同的。用n表示这个索引。在我们的示例中,n=2(在Key 3中为0,在Key 7中为1)。
c.然后,转到与这些n位对应的边缘。这样的边缘连接第一个节点和最后一个节点,该第一节点的索引大于n(由V表示,并且包括在图2的节点14中)并且最后一个节点的索引小于n(表示为U)。
d.用具有索引n的节点替换边缘,并将边缘分成2个子树以提供图2中的节点16。一个子树是前一个子树,另一个是键的叶子。这是根据所插入的键完成的:例如,索引2中的键7等于1,因此它应该在右侧,而现有的(键3和键5的)子树应该在左侧。
注意:可能存在没有相应的边缘的情况,即,所获取的键的根和叶之间的路径中的每个节点的索引比n小(这意味着图2中的节点V不存在)。在这种情况下→插入算法类似于简化插入。
通过使用排序插入,确保树被排序。另外,观察到,当且仅当树中存在的两个键的第N位不同,并且前N-1位相同时,索引N的节点存在于树中。此外,该节点对应于(N-1位的)公共前缀。因此,树是基于键的值而不是键的到达顺序而唯一地定义的。
删除
对于删除,我们首先假定叶子代表该键。“查找”算法为我们呈现第一个对象。然后-
i.验证存储在该叶子中的键是否与要删除的所请求的键相对应。这是通过阅读闪存来完成的。如果该键不存在-返回该键不存在。
ii.删除代表该键的叶子和该叶子的父亲。将此叶子的祖父母与此叶子的兄弟姐妹连接起来。
关于key4=0010010的删除过程在图3进行了描述(删除前的节点20和删除后的节点22)。
桶编码和扩展
我们可以通过三种方式设置每个桶的大小:动态桶,其可以具有动态分段或静态分段,以及静态桶。
动态桶
在动态桶中,每个桶的大小都会动态变化。这意味着,如果桶是“满的”(稍后将给出确切的定义),我们将扩展链接到桶以增大桶的大小。每个桶都以一个包含指向下一个扩展部的指针的基部开头,并且每个扩展部都是从一个空闲块池中选择的(实现是通过“自由列表”完成的)。
所有扩展部都具有相同的大小,并且扩展部的大小比基部的大小短。每个段的大小都是动态更改的。
动态桶的示例示出在图12中。桶154可以包括指向扩展桶156的扩展指针,扩展桶156可以具有用于指向又一扩展桶的第二扩展指针或者不具有用于指向又一扩展桶的第二扩展指针。桶156可以属于第一数据结构或第二数据结构中的任何一个。可以有任意数量的扩展数据包。
具有连续L个插槽的动态分段
可以将桶实现为由连续的L个插槽组成,如图4、图5或图6所示。
在图4中,存在桶32,其包括N-1个重复的(逻辑插槽、CSV字段和P插槽),其后是第N个逻辑插槽、第N个CSV和指向扩展桶34的第一扩展指针,扩展桶34包括P-slot N,P-slot N后跟(RN-2)个重复的(逻辑插槽,CSV字段和P-slot),其后可以是第R个逻辑插槽、第R个CSV和第二扩展指针,该第二扩展指针指向另一扩展桶(未示出)。
每个重复的(逻辑插槽,CSV字段和P插槽)可以属于逻辑插槽。
图5和图6示出了指向扩展池44的桶40和桶42。桶和扩展桶内的字段可以具有固定长度(图6)或者可变长度(图6)。扩展指针指向扩展桶。
在静态分段中,对于每个基部和扩展部而言,每个分段(SL,CSV,Pslots)的大小都是恒定的。如果这些分段中的其中一个分段溢出,则相应的Lslot移动到下一个扩展部。每个条目(基部或扩展部)将包含称为逻辑计数器(LC)的字段,其用于计算条目中的LSlot数。这在图6中进行了描述。
注意:扩展部可以使用outcast实现。
静态桶
我们可以实现大小不变的桶,而没有扩展部。在这种情况下,如果键的插入将导致相应的溢出(即,分段的桶的大小大于所给定的阈值),我们将相应的键移动到放弃者表。
应该注意的是,当内容大小元数据段已满时,于是将新键插入到桶时,我们将键添加到放弃者表中。
使用树CSV时可能不会使用放弃者,并且桶分段是动态的(具有扩展部)。
放弃者表
根据上述情况,可能会出现一些未解决的情况,例如:
a.没有找到输入键的完美散列排列(当使用置换实现时)
b.每个插槽存在太多冲突(t溢出)。
c.分段中的一个分段出现溢出,相应的键不会移动到扩展部
d.冲突分离矢量空间溢出(在置换实现中)
P-Slot空间溢出
在这种情况下,数据将被存储在流出表中,并且每个散列桶中的放弃者表区域中的对象的计数器在元数据中被更新。
放弃者表吸收了无法适应主分散散列表的记录。
与主散列表不同,outcasts数据库还可以保存每个对象(或其某些压缩版本)的“键”,以消除(或减少)该表中错误检测的可能性。
与主分散散列表相比,预期放弃者表所包含的对象数量要少得多。例如,所有对象的0.1%。
每当在主散列表中释放空间时,例如在删除对象时,应当尝试恢复对象(将对象从区域2重新定位回区域-1)。
例如,放弃者表可以被构造为一些散列表。它可以保存成对的键和相应的块集群索引。
为了减轻从区域-2(被抛弃的故事)到区域-1(MDH)的恢复对象,用于访问丢弃表的键(称为第二键,也称为sKey)可以是区域-1分散散列表中的物理位置(L-slot)的衍生物。
对于这样的散列,映射到相同分散散列桶的所有对象可以在放弃者表中聚类。因此,找到要恢复的键将需要扫描放弃者表中的几个相邻单元,并且不需要在内存中进行随机扫描。
块集群映射
块集群内的对象根据键排序,并且使用分散散列元数据结构映射和解析它们的位置(索引)。即,集群中第k个最大键出现在第k+1个最大键之前。
链接到散列桶N的所有对象将在N+1桶的对象“之前”被存储到闪存中。映射到同一桶的对象在闪存上根据该桶的物理插槽顺序进行排序。
可以通过以下方法来实现块集群映射:
a.完全的地图顺序-所有对象都保存在块集群中,并且为了找到对象的物理位置,我们使用其序数(顺序索引)。
b.表示方法-我们在集群映射中保存对象的子集,称为代表。根据对象的键,我们的目标是找到其相应的代表。
完整的地图排序
为了找到对象的物理位置,需要块集群中的序号(顺序索引)作为CW-starts-map(如下所述)的输入,它对实际位置进行编码。
集群映射是表示对象顺序信息的分散散列表,类似于MDH→每个桶,需要插槽定位器,冲突分离矢量以及另外需要CW起始映射。
以与使用主分散散列表的元数据中的方式相同,我们产生散列桶中对象的序号。添加前面的桶(hash_bucket index*slots_per_bucket)中的所有插槽将生成块集群内对象的绝对索引。
散列键到块集群
用于访问块集群的键可以是sKey,与用于放弃者表的键相同。
这使得能够在不知道其实际键的情况下查找映射(冲突)到主散列表中的相同L-slot的所有对象,因为sKey仅由主散列中的L-slot位置定义。这样,通过检查主散列范围中的每个P-slot的相关块集群索引并通过块集群映射在flash中找到相关的地址,可以找到创建新散列置换所需的键(例如,接下来的Put事务导致主散列上的对象冲突)。
通过设计,可以使块块集群的元数据中的冲突分离矢量始终解决每个使用的sKey的冲突(在块集群中没有第二个区域映射)。
CW-Starts-Map
在确定对象的序数之后,可以使用附加的映射矢量来找到块集群中的实际对象开始位置(序数码字号)。
此CW-Starts-Map描述了每个ECC-CW启动的对象数,并提供了开始从中读取对象的ECC CW的索引。它还提供CW中的对象的长度,因此读取过程可以准备读取所需的CW。
每个块集群维护CW-Starts-Map矢量。
编码方法
CW start map的编码方法可以是一元或二元的。
一元编码
CW-Starts-Map中的数据可以例如使用游程长度代码进行编码/压缩-其中,“1”的序列编码以CW开始的对象数和用零分隔的CW。即,每个CW,可能的值是
i.0=CW中的0个对象
ii.01=CW中的1个对象
iii.011=2个对象从CW开始
iv.0111=3个对象从CW开始,等等
CW-Starts-Map的处理步骤:
i.-->“0”的计数=ECC CW编号
ii.-->“1”的计数=对象编号
例如,对于数据位:0100110100111,存在3个对象,这些对象从第6个CW(CW#5)开始,对象的序号是5、5和6。
CW-starts-map可以拆分成段,从而使得更易于访问和解析。
CW-starts-map可以针对特殊情况采用额外的压缩,例如对于大型对象。
二进制编码
一元编码的替代方案是二进制编码。
对于每个CW,我们限制CW中的对象数量。例如,我们可以将每个CW的对象数限制为对象(n=2k例如,n=8)。
然后,CW-start映射将为每个CW分配k位,以表示每个CW的对象数。
将CW启动与块集群映射相结合
我们可以在块集群映射内编码CW起始映射。
例如,可以通过添加两个分段来完成此操作:
对于每个桶,我们使用前一个桶中最大的键来对对象的序号进行编码。换句话说,这意味着先前桶的CW数量。我们称之为先前CW计数(PCC)。
我们编码当前桶中的。每个对象相对于PCC的序号。这意味着,我们使用序数no编码每个对象o,并使用编号no-PCCo标记桶PCC PCCo。使用CW-start map编码完成编码。
代表性方法排序
代表性方法排序类似于完整顺序方法,但不是编码所有对象-我们仅编码来自每个CW的代表。可以仅编码来自每个CW的最后一个对象,或者编码CW中的第一个对象。
桶结构类似于全排序方法中的桶结构。插槽定位器计算L-slot中的代表数,CSV(冲突分离树),CSV由具有编码的前缀的分离树实现(如下所述)。最后,CW启动编码代表性起始位置。
代表性方法的目标
分离树的目标是针对给定ikey的每个给定obj来决定哪个是相应的代表。例如,如果代表是CW中的最后一个对象,则对于给定的键k对象而言,我们的目标是找到具有大于(或等于)给定对象的键的最小键kr的代表,即,
注意,当且仅当存在索引m使得k1的m前缀(前m位)大于k2的m前缀时,两个二进制字符串才满足k1≥k2。我们针对每个代表编码其键的最小前缀,这可用于区分代表与集群中的所有其他对象。形式上,我们编码一个最小m的m前缀,这用于区分大于代表的第一个对象,以及小于代表的最后一个对象。
例如,假设代表的ikey是kr=1010,而集群中的其他对象是k1=0000,k2=1000,k3=1100,k4=1110。然后,编码代表的3位101足以将代表与所有其他对象区分开。当然,如果我们将代表与大于代表的第一个对象(即k3=1100)和小于代表的最后一个对象(k2=1000)区分开来,那么我们将代表与集群中的所有其他对象区分开来。
在GET\Fetch iKey中,代表的前缀由Lslot驱动(即,如果有2k个Lslots,则驱动前缀的k位)。此外,我们可以在分离树中编码其他位,从而产生足以区分代表与集群中所有其他对象的位。带有前缀编码的分离树。
分离树对前缀代表位中的许多位进行编码,但不是对所有位进行编码。它用于将所述代表与其他代表区分开来,但可能不足以将代表与非代表对象区分开。
在分离树中的每个内部节点中,我们编码对应于其右子树和左子树的公共前缀。这类似于众所周知的二进制树。例如,在具有两个键key1=1010和key2=1001的树中,并且根据保存这些键的公共前缀,即字符串10。复杂的示例是下面的键的前缀树,这描绘在图7中(树表示为50)。
key1=0111111
key2=0110010
key3=1011001
key4=0010010
key5=1011010
例如,键1到键5的公共前缀具有空的公共前缀。左子树,具有键1、键2和键5,其公共前缀为0,依此类推。
我们可以在每个节点中保存相对公共前缀,如图8中所示(树表示为52)。这意味着,对于每个节点,我们保存公共前缀,公共前缀不包括驱动节点的父节点的位。
扩展前缀
虽然分离树足以将代表与其他代表区分开来,但是将代表与非代表性对象区分开来可能并非足够。因此,我们可以在每个叶子中编码附加位。
操作
Put(放置)
我们在GC\folding中创建块集群映射。
我们首先将所有对象插入到局部分散散列(LDH)中,该散列散列类似地实现为主色散散列,其中,CSV通过分离树来实现,在分离树中前缀被编码。
从散列中我们得出每个代表所需的最小前缀,以区别于每个其他对象。
其次,我们只将代表插入块集群映射(类似于MDH),我们可以为其他对象使用扩展前缀。
GET(获得)
GET类似地MDH进行实现。但是,我们可能编码两个在常规GET中不会发生的边缘情况:
Lslot是空的,即,如果存在2k个Lslots,则没有代表以对象的前k位开始。这个问题有多种解决方案。例如,如果代表是CW中的最后一个对象,则算法检查新的Lslot,直到找到第一个非空的Lslot为止。Lslot的第一个代表是比所述对象大的第一个代表的位置,并且它代表相应的CW。
当在树中查找相应的代表时,可能有3个选项:
a.对象的前缀等于相应节点中的前缀。在这种情况下,我们继续搜索相应子树内的对象。
b.对象前缀大于相应节点中的前缀。在这种情况下,相应的代表是大于子树中的最后一个代表的第一个代表。
c.对象前缀小于相应节点中的前缀。在这种情况下,相应的代表是小于子树中的第一代表的最后一个代表。
d.例如,让我们采用图7所示的CSV树。
e.假设对象的ikey是10010。然后,当搜索相应的代表时,我们正在向右前进(因为第一位以1开始)。节点的前缀是10110,即,对象的前缀小于节点的前缀。因此,相应的代表是小于子树中的第一个代表(具有key3的那个)的最后一个代表,即,这是具有key2的代表。
获取ikey
此操作类似于GET。我们假设通过第一个sKey位,我们可以导出集群中的对象位置。
减少块集群映射
可以使用以下优化进一步减少块集群映射:
a.为每个X CW选择代表,其中,X是2的幂。
b.对于某些情况,请勿对扩展前缀进行编码。
使用这些方法会略微降低GET操作和Fecth iKey操作的读取性能(因为它读取连续的CW),但是重复了DRAM和NAND之间的带宽。请注意,如果我们不对扩展前缀进行编码,我们可能会读取两个连续的CW,类似于为每2个CW选择代表。
分散散列元数据使得能够合并多个实例。例如,对于垃圾收集,可以合并几个块集群的块集群MD。
附加数据库可以用于映射瞬态数据,例如,可以首先将数据插入SLC块中而不根据键排序,然后在构造块-集群元数据时移动到TLC块。这种SLC缓冲器还可以使用分散散列数据结构来映射数据。
图13示出了包括步骤302、步骤304、步骤306、步骤308、步骤310、步骤312、步骤314、步骤316、步骤318、步骤320、步骤322、步骤324、步骤326、步骤328、步骤330、步骤332、步骤334以及步骤336的方法。
图14示出了用于访问存储在固态驱动器(SSD)存储器中的键值对的方法400,该方法可以包括一系列的步骤410、步骤420、步骤430、步骤440以及步骤450。
步骤410,SSD存储控制器基于输入键计算第一桶标识和第一桶间值。
步骤410之前可以是SSD控制器接收输入键并将输入值转换为中间键。
步骤410可以包括在中间键上应用第一散列函数以提供第一散列结果,并基于第一散列结果确定第一桶标识符和第一桶间值。第一桶可以属于第一数据结构,诸如图9A中的数据结构。
步骤410可以包括至少使用第一桶间值访问可以由第一桶标识符标识的第一桶的第一元数据;其中,第一桶属于第一数据结构;以及基于第一元数据选择第二数据结构。
步骤420可以包括基于第一桶标识符、第一桶间值和第一数据结构的第一元数据来确定可以存储键值对的块集群。可以将第二数据结构(诸如图9B中的数据结构)分配给块集群。
步骤430可以包括基于输入键计算第二桶标识符和第二桶间值。
步骤430可以包括在中间键上应用第二散列函数以提供第二散列结果;基于第二散列结果确定第二桶标识和第二桶间值。
步骤440,基于第二桶标识、第二桶间值和第二数据结构的第二元数据,确定键值对检索信息;其中,第二数据结构可以分配给块集群。
步骤440可以包括使用至少第二桶间值访问可以由第二桶标识符标识的第二桶的第二元数据;其中,第二桶属于第二数据结构;以及基于第二元数据确定键值对检索信息。
步骤450,基于键值对检索信息至少检索键值对的值(或至少键值对的值)。
第一数据结构和第二数据结构可以没有存储中间键。
第一数据结构的第一桶可以包括存储一个或多个第二数据结构标识符的第一逻辑插槽。第一元数据可以包括(a)用于选择第一逻辑插槽的第一逻辑插槽的第一插槽定位器元数据,以及(b)用于在每个冲突的第一逻辑插槽内选择第二桶识别符的第一冲突分离元数据,其中,冲突的第一逻辑插槽可以映射到多个冲突的中间键。
第一插槽定位符元数据可以包括二进制序列,该二进制序列可以指示每个第一逻辑插槽的多个第二桶标识符。
选择第二数据结构可以包括搜索第二数据结构标识符。
搜索第二数据结构标识符可以包括(a)根据二进制序列的最高有效位来计数零位的数量,以找到某个位,所述零位的数量等于所述第一桶间值的值;以及(b)将属于第一逻辑插槽的多个第二数据结构标识符设置为跟随所述某个位的一位的数目。
第一冲突分离元数据可以包括置换元数据;其中,该方法可以包括使用置换元数据获得置换函数;并且其中,在所述第一逻辑插槽内选择所述第二桶标识符包括在中间值的至少一部分上应用所述置换函数。
对于每个冲突的第一逻辑插槽,所述第一冲突分离元数据包括表示被映射到所述冲突的第一逻辑插槽的冲突中间键的树。
树可以是有序树。
树可以是未排序的树。
对于每个冲突的第一逻辑插槽,所述树的每个父节点具有与不同中间键值相关联的子节点,其中,每个专利节点存储因不同中间键之间的值而不同的第一位的顺序的信息。
对于每个冲突的第一逻辑插槽,所述树的每个父节点具有与不同中间键值相关联的子节点,其中,每个专利节点存储关于下述项的信息:(a)因不同的中间键之间的值而不同的第一位的顺序,以及(b)在第一位之前的前缀的至少一部分。
所述第二数据结构的第二桶包括第二冲突分离元数据,用于在每个冲突的第二逻辑插槽内选择(a)键值对访问信息和(b)代表性键值对访问中的至少一个,其中冲突的第二逻辑插槽被映射到多个冲突的中间键。
每个桶包括起始元数据,所述起始元数据指示与所述桶之前的桶相关联的码字的总数。
对于每个冲突的第二逻辑插槽,所述第二冲突分离元数据包括表示被映射到所述冲突的第二逻辑插槽的冲突中间键的树。可替代地,第二冲突分离元数据可以包括置换元数据。
所述第二数据结构存储关于存储多个键值对的多个码字的键值对访问信息。
第二插槽定位符元数据可以存储与所有多个键值对相关的元数据。
第二插槽定位符元数据可以存储仅与多个键值对的代表性键值对相关的元数据。
步骤440可以包括:(a)从仅形成所述多个键值对的一部分的多个代表键值对中选择所选择的代表键值对,以及(b)基于所选择的代表键值对来选择所述键值对。
第二冲突分离元数据包括用于选择所选择的代表的元数据,并且其中,所述第二元数据包括用于在与相同代表性键值对相关联的键值对之间进行选择的元数据。
对于每个冲突的第一逻辑插槽,所述第一冲突分离元数据包括表示被映射到所述冲突的第一逻辑插槽的冲突中间键的树。
对于每个冲突的第二逻辑插槽,所述树的每个父节点具有与不同中间键值相关联的子节点,其中,每个专利节点存储关于下述项的信息:(a)因不同的中间键之间的值而不同的第一位的顺序,以及(b)在第一位之前的前缀的至少一部分;其中,所述前缀用于在与相同代表性键值对相关联的键值对之间进行选择。
所述第二元数据包括第二逻辑插槽、第二插槽定位符以及第二冲突分离元数据;其中,至少所述第二插槽定位器仅包括代表性键值对的元数据,所述代表性键值对是存储在所述块集群中的多个键值对的子集。
图15示出了方法500。
方法500可以用于访问存储在固态驱动器(SSD)存储器中的键值对。
方法500可以从步骤510开始,由SSD控制器接收输入键。
步骤510之后可以是将输入值转换为中间键的步骤514。中间键也称为ikey。
步骤514之后可以是步骤518,在中间键上应用第一散列函数以提供第一散列结果。
步骤518之后可以是步骤522,基于第一散列结果确定主桶标识符和主桶间值。
步骤522之后可以是步骤526,至少使用主桶间值访问可以由主桶标识符识别的主桶的主元数据;其中,主桶属于主数据结构。
步骤526之后可以是步骤530,基于主元数据的内容选择可以分配给块集群的第二数据结构。
步骤530之后可以是步骤534,在中间键上应用第二散列函数以提供第二散列结果。
步骤534之后可以是步骤538,基于第二散列结果确定第二桶标识符和第二桶间值。
步骤538之后可以是步骤542,至少使用第二桶间值,访问可以由第二桶标识符标识的第二桶的第二元数据;其中,第二桶属于第二数据结构。
步骤542之后可以是步骤546,基于第二元数据的内容,确定对象访问信息;其中,对象可以是与输入键相关联的值。
步骤546之后可以是步骤550,使用对象访问信息检索对象的值。
主数据结构和第二数据结构没有存储中间键。
图16示出了用于访问存储在固态驱动器(SSD)存储器中的键值对的方法600,该方法可以包括一系列步骤610、步骤620、步骤630、步骤640以及步骤650。
步骤610可以包括由SSD存储器控制器基于输入键计算第一桶标识符和第一桶间值。
步骤610之前可以是SSD控制器接收输入键;将输入值转换为中间键。
步骤610可以包括在中间键上应用第一散列函数以提供第一散列结果;基于第一散列结果确定第一桶标识和第一桶间值。
步骤620可以包括基于第一桶标识符、第一桶间值和第一数据结构的第一元数据来确定可以存储键值对的块集群。
步骤620可以包括使用至少第一桶间值访问可以由第一桶标识符标识的第一桶的第一元数据;其中,第一桶属于第一数据结构;以及基于第一元数据选择第二数据结构。
步骤620可以包括搜索第二数据结构标识符(标识第二数据结构)。搜索可以包括:(a)根据所述二进制序列的最高有效位来计数零位的数量以找到某个位,所述零位的数量等于所述第一桶间值的值;并且(b)将属于所述第一逻辑插槽的多个第二数据结构标识符设置为跟随所述某个位的一位的数目。
第二数据结构的示例在图9C中。
步骤630可以包括基于输入键计算第二桶标识符和第二桶间值。
步骤630可以包括在中间键上应用第二散列函数以提供第二散列结果;基于第二散列结果确定第二桶标识和第二桶间值。
步骤640可以包括:基于第二桶标识符,第二桶间值和第二数据结构的第二元数据,确定键值对检索信息和代表键值对检索信息中的至少一个;其中,第二数据结构可以分配给块集群;其中,第二元数据可以包括第二逻辑插槽、第二插槽定位符和第二冲突分离元数据;其中,至少第二插槽定位器可以仅包括代表性键值对的元数据,该代表性键值对可以是存储在块集群中的多个键值对的子集。
步骤640可以包括仅确定键值对检索信息。
步骤640可以包括仅确定代表键值对检索信息。
步骤650可以包括基于键值对检索信息和代表性键值对检索信息中的至少一个来检索键值对的至少值。
步骤650可以包括检索可以包括下述项的内容:(a)键值对,以及(b)与键值对相关联的代表性键值对的至少一部分。
步骤650可以包括检索可以包括下述项的内容:(a)键值对,(a)所述键值对,(b)键值对之前的代表性键值对的至少一部分,以及(c)键值对之后的代表性键值对的至少一部分。
步骤650可以包括找到与所述键值对相关联的代表性键值对,以及基于所述代表性键值对找到所述键值对。
第一数据结构和第二数据结构没有存储中间键。
所述第一数据结构的第一桶可以包括存储一个或多个第二数据结构标识符的第一逻辑插槽;其中,所述第一元数据可以包括(a)第一插槽定位符元数据,所述第一插槽定位符元数据用于选择所述第一逻辑插槽的第一逻辑插槽的第一插槽定位符元数据以及(b)第一冲突分离元数据,所述第一冲突分离元数据用于在每个冲突的第一逻辑插槽内选择第二桶识别符,其中,冲突的第一逻辑插槽可以映射到多个冲突的中间键。
第一插槽定位符元数据可以包括二进制序列,其可以指示每个第一逻辑插槽的多个第二桶标识符。
选择第二数据结构可以包括搜索第二数据结构标识符。
第一冲突分离元数据可以包括置换元数据;其中,该方法可以包括使用置换元数据获得置换函数;并且其中,在第一逻辑插槽内选择第二桶标识符可以包括将置换函数应用于中间值的至少一部分。
对于每个冲突的第一逻辑插槽,第一冲突分离元数据可以包括表示可以映射到冲突的第一逻辑插槽的冲突的中间键的树。
树可以是排序树(sorted tree)。
树可以是未排序的树(unsorted tree)。
对于每个冲突的第一逻辑插槽,所述树的每个父节点可以具有与不同中间键值相关联的子节点,其中,每个专利节点存储因不同中间键之间的值而不同的第一位的顺序的信息。
对于每个冲突的第一逻辑插槽,树的每个父节点具有可以与不同中间键值相关联的子节点,其中,每个专利节点可以存储关于下述项的信息:(a)因不同的中间键之间的值而不同的第一位的顺序,以及(b)在第一位之前的前缀的至少一部分。
其中,第二数据结构的第二桶可以包括第二冲突分离元数据,用于在每个冲突的第二逻辑插槽内选择(a)键值对访问信息和(b)代表性键值对访问中的至少一个,其中,冲突的第二逻辑插槽可以被映射到多个冲突的中间键。
其中,每个桶可以包括起始元数据,该起始元数据指示可以与所述桶之前的桶相关联的码字的总数。
对于每个冲突的第二逻辑插槽,第二冲突分离元数据可以包括表示可以被映射到冲突的第二逻辑插槽的冲突中间键的树。
第二数据结构可以存储关于存储多个键值对的多个码字的键值对访问信息。
该申请提供了相对于现有技术的显著技术改进-尤其是计算机科学方面的改进。
对术语“包含”或“具有”的任何提及也应解释为指“基本上由......组成”中的“组成”。例如,包括某些步骤的方法可以包括附加步骤,可以限于某些步骤,或者可以包括分别不会实质上影响该方法的基本和新颖特征的附加步骤。
本发明还可以通过用于在计算机系统上运行的计算机程序来实现,其至少包括代码部分,所述代码部分用于在可编程装置(例如计算机系统)上运行时执行根据本发明的方法的步骤或者使可编程装置能够运行根据本发明的设备或系统的功能。计算机程序可以使得存储系统将磁盘驱动器分配给磁盘驱动器组。
计算机程序是诸如特定应用程序和/或操作系统之类的指令列表。计算机程序可以例如包括下列项中的一个或多个:子例程、函数、过程、对象方法、对象实现、可执行应用程序、小应用程序、servlet、源代码、目标代码、共享库/动态加载库和/或设计用于在计算机系统上执行的其他指令序列。
计算机程序可以内部存储在计算机程序产品上,例如非易失性计算机可读介质。所有计算机程序或一些计算机程序可以永久地提供在非易失性计算机可读介质上、可移除地或远程地耦合到信息处理系统。非易失性计算机可读介质可以例如包括但不限于任意数量的以下项:磁存储介质,包括磁盘和磁带存储介质;光盘存储介质,例如光盘介质(例如CDROM,CDR等)和数字视频盘存储介质;非易失性存储器存储介质,包括基于半导体的存储器单元,例如FLASH存储器、EEPROM、EPROM、ROM;铁磁数字存储器;MRAM;易失性存储介质包括寄存器、缓冲器或高速缓存、主存储器、RAM等。计算机进程通常包括执行(运行)程序或程序的一部分,当前程序值和状态信息,以及操作系统用于管理进程的执行所使用的资源。操作系统(OS)是管理计算机资源共享的软件,并为程序员提供用于访问这些资源的接口。操作系统处理系统数据和用户输入,并通过将任务和内部系统资源作为服务分配和管理给系统的用户和程序来响应。计算机系统可以例如包括至少一个处理单元、相关的存储器和多个输入/输出(I/O)设备。当执行计算机程序时,计算机系统根据计算机程序来处理信息并通过I/O设备产生结果输出信息。
在前面的说明书中,已经参考本发明的实施例的特定示例描述了本发明。然而,明显的是,在不脱离所附权利要求中阐述的本发明的更广泛的精神和范围的情况下,可以在其中进行各种修改和改变。
此外,说明书和权利要求书中的术语“前”,“后”,“顶部”,“底部”,“上方”,“下方”等(如果有的话)用于描述性目的而并不一定用于描述永久性相对位置。应当理解的是,如此使用的术语在适当的情况下是可互换的,使得本文所描述的本发明的实施例例如能够以不同于本文所示或者描述的方向的其他方位进行操作。
本领域技术人员应当认识到,逻辑块之间的边界仅仅是说明性的,并且替代实施例可以合并逻辑块或电路元件,或者对各种逻辑块或电路元件施加功能的替代分解。因此,应该理解的是,这里所描述的架构仅仅是示例性的,并且实际上可以实现许多实现相同的功能的其他架构。
实现相同功能的任何组件布置有效地“相关联”,使得能够实现所期望的功能。因此,这里所组合的以实现特定功能的任何两个组件可以被视为彼此“相关联”,使得实现所期望的功能,而不管架构或中间组件如何。同样地,如此关联的任何两个组件还可以被视为彼此“可操作地连接”或“可操作地耦合”以实现所期望的功能。
此外,本领域技术人员应当认识到,上述操作之间的界限仅仅是说明性的。可以将多个操作组合成单个操作,可以在附加操作中分发单个操作,并且操作可以在时间上至少部分重叠地执行。此外,替代性实施例可以包括特定操作的多个实例,并且操作的顺序可以在各种其他实施例中改变。还例如,在一个实施例中,所示的示例可以实现为位于单个集成电路上或者相同的设备内的电路。可替代地,示例可以实现为以合适的方式彼此互连的任何数量的单独的集成电路或单独的设备。
又例如,示例或这些示例的部分可以实现为物理电路的软式表示或代码表示,或者可转换为物理电路的逻辑表示的软式表示或代码表示,例如以任何适当类型的硬件描述语言。
此外,本发明不限于以非可编程硬件实现的物理设备或单元,而是还可以应用于可编程设备或能够通过根据合适的程序代码操作来执行所需设备功能的单元,例如大型机、小型计算机、服务器、工作站、个人计算机、笔记本、个人数字助理、电子游戏、汽车和其他嵌入式系统、手机和各种其他无线设备、在本申请中通常表示为“计算机系统”。
然而,其他修改、变化和替代也是可能的。因此,说明书和附图应被视为说明性的而非限制性的。
在权利要求中,括号内的任何参考符号不应解释为限制权利要求。“包括”一词不排除权利要求中所列出的其他元件或步骤的存在性。此外,这里所使用的术语“一个(a)”或“一个(an)”被定义为一个或者一个以上。此外,在权利要求中使用诸如“至少一个”和“一个或多个”的介绍性短语不应被解释为暗示由不定冠词“一”或“一个”引入另一个权利要求元素将任何特定的包含这种引入的权利要求元素的权利要求限制为包含仅一个这样的元素的发明,即使当相同的权利要求包括引言短语“一个或多个”或“至少一个”以及诸如“一个”或“一个”的不定冠词的情况下。使用定冠词也是如此。除非另有说明,否则诸如“第一”和“第二”的术语用于任意区分这些术语描述的元素。因此,这些术语不一定旨在表示这些元素的时间次序或其他优先次序。在相互不同的权利要求中叙述某些措施的仅有事实并非表示这些措施的组合不能用于获益。
尽管本文已经说明和描述了本发明的某些特征,但是本领域普通技术人员现在将想到许多修改、替换、改变以及等同物。因此,应该理解的是,所附的权利要求旨在覆盖落入本发明的真实精神内的所有这些修改和变化。

Claims (61)

1.一种用于访问存储在固态硬盘(SSD)存储器中的键值对的方法,所述方法包括:
通过SSD存储器控制器基于输入键计算第一桶标识和第一桶间值;
基于所述第一桶标识符、所述第一桶间值和第一数据结构的第一元数据来确定存储所述键值对的块集群;
基于所述输入键计算第二桶标识和第二桶间值;
基于第二桶标识符、所述第二桶间值和第二数据结构的第二元数据来确定键值对检索信息;其中,所述第二数据结构被分配给所述块集群;以及
基于所述键值对检索信息检索至少所述键值对值。
2.根据权利要求1所述的方法,包括:通过所述SSD控制器接收一输入键;将输入值转换为中间键;并且其中,计算所述第一桶标识符和所述第一桶间值包括:在所述中间键上应用第一散列函数以提供第一散列结果;以及基于所述第一散列结果确定所述第一桶标识符和所述第一桶间值。
3.根据权利要求2所述的方法,其中,确定所述块集群包括:至少使用所述第一桶间值访问通过所述第一桶标识识别的第一桶的第一元数据;其中,所述第一桶属于所述第一数据结构;以及基于所述第一元数据选择所述第二数据结构。
4.据权利要求3所述的方法,包括:通过所述SSD控制器接收一输入键;将输入值转换为中间键;并且其中,计算所述第二桶标识符和所述第二桶间值包括:在所述中间键上应用第二散列函数以提供第二散列结果;以及基于所述第二散列结果确定所述第二桶标识和所述第二桶间值。
5.根据权利要求4所述的方法,其中,确定所述键值对检索信息包括:使用至少所述第二桶间值来访问由所述第二桶标识符标识的第二桶的第二元数据;其中,所述第二桶属于所述第二数据结构;以及基于所述第二元数据确定键值对检索信息。
6.根据权利要求5所述的方法,其中,所述第一数据结构和所述第二数据结构不存储所述中间键。
7.根据权利要求5所述的方法,其中,所述第一数据结构的第一桶包括存储一个或多个第二数据结构标识符的第一逻辑插槽;其中,所述第一元数据包括(a)第一插槽定位符元数据,所述第一插槽定位符元数据用于选择所述第一逻辑插槽的第一逻辑插槽的第一插槽定位符元数据以及(b)第一冲突分离元数据,所述第一冲突分离元数据用于在每个冲突的第一逻辑插槽内选择第二桶识别符,其中,冲突的第一逻辑插槽被映射到多个冲突的中间键。
8.据权利要求7所述的方法,其中,所述第一插槽定位符元数据包括二进制序列,所述二进制序列指示每个第一逻辑插槽的多个第二桶标识符。
9.根据权利要求7所述的方法,其中,选择所述第二数据结构包括搜索第二数据结构标识符。
10.根据权利要求9所述的方法,其中,所述搜索第二数据结构标识包括:
(a)根据所述二进制序列的最高有效位来计数零位的数量以找到某个位,所述零位的数量等于所述第一桶间值的值;并且
(b)将属于所述第一逻辑插槽的多个第二数据结构标识符设置为跟随所述某个位的一位的数目。
11.根据权利要求7所述的方法,其中,所述第一冲突分离元数据包括置换元数据;其中,所述方法包括使用所述置换元数据获得置换函数;并且其中,在所述第一逻辑插槽内选择所述第二桶标识符包括在中间值的至少一部分上应用所述置换函数。
12.根据权利要求7所述的方法,其中,对于每个冲突的第一逻辑插槽,所述第一冲突分离元数据包括表示被映射到所述冲突的第一逻辑插槽的冲突中间键的树。
13.根据权利要求12所述的方法,其中所述树是排序树。
14.根据权利要求12所述的方法,其中所述树是未排序的树。
15.根据权利要求12所述的方法,其中,对于每个冲突的第一逻辑插槽,所述树的每个父节点具有与不同中间键值相关联的子节点,其中,每个专利节点存储因不同中间键之间的值而不同的第一位的顺序的信息。
16.根据权利要求12所述的方法,其中对于每个冲突的第一逻辑插槽,所述树的每个父节点具有与不同中间键值相关联的子节点,其中,每个专利节点存储关于下述项的信息:(a)因不同的中间键之间的值而不同的第一位的顺序,以及(b)在第一位之前的前缀的至少一部分。
17.根据权利要求5所述的方法,其中,所述第二数据结构的第二桶包括存储一个或多个键值对访问信息的第二逻辑插槽;其中,所述第二元数据包括:(a)用于选择多个第二逻辑插槽中的第二逻辑插槽的第二插槽定位器元数据,以及(b)用于在每个冲突的第二逻辑插槽内选择键值对访问信息的第二冲突分离元数据,其中,冲突的第二逻辑插槽被映射至多个冲突的中间键。
18.根据权利要求17所述的方法,其中,每个桶包括起始元数据,所述起始元数据指示与所述桶之前的桶相关联的码字的总数。
19.根据权利要求17所述的方法,其中,对于每个冲突的第二逻辑插槽,所述第二冲突分离元数据包括表示被映射到所述冲突的第二逻辑插槽的冲突中间键的树。
20.根据权利要求17所述的方法,其中,所述第二数据结构存储关于存储多个键值对的多个码字的键值对访问信息。
21.根据权利要求20所述的方法,其中,所述第二插槽定位符元数据存储与所有所述多个键值对相关的元数据。
22.据权利要求20所述的方法,其中,所述第二插槽定位符元数据存储仅与所述多个键值对的代表性键值对相关的元数据。
23.根据权利要求22所述的方法,其中,确定所述键值对访问信息包括:(a)从仅形成所述多个键值对的一部分的多个代表键值对中选择所选择的代表键值对,以及(b)基于所选择的代表键值对来选择所述键值对。
24.根据权利要求22所述的方法,其中,所述第二冲突分离元数据包括用于选择所选择的代表的元数据,并且其中,所述第二元数据包括用于在与相同代表性键值对相关联的键值对之间进行选择的元数据。
25.根据权利要求22所述的方法,其中,对于每个冲突的第一逻辑插槽,所述第一冲突分离元数据包括表示被映射到所述冲突的第一逻辑插槽的冲突中间键的树。
26.根据权利要求25所述的方法,其中,对于每个冲突的第二逻辑插槽,所述树的每个父节点具有与不同中间键值相关联的子节点,其中,每个专利节点存储关于下述项的信息:(a)因不同的中间键之间的值而不同的第一位的顺序,以及(b)在第一位之前的前缀的至少一部分;其中,所述前缀用于在与相同代表性键值对相关联的键值对之间进行选择。
27.根据权利要求1所述的方法,其中,所述第二元数据包括第二逻辑插槽、第二插槽定位符以及第二冲突分离元数据;其中,至少所述第二插槽定位器仅包括代表性键值对的元数据,所述代表性键值对是存储在所述块集群中的多个键值对的子集。
28.根据权利要求1所述的方法,其中,至少一个第一桶被链接到第一扩展桶;并且其中,所述方法包括访问所述第一扩展桶。
29.根据权利要求1所述的方法,其中,至少一个第二桶被链接到第二扩展桶;并且其中,所述方法包括访问所述第二扩展桶。
30.根据权利要求1所述的方法,其中,所述第一数据结构的第一桶包括固定长度的第一元数据字段。
31.根据权利要求1所述的方法,其中,选择所述第二数据结构包括搜索第二数据结构标识符。
32.一种访问存储在固态硬盘(SSD)存储器中的键值对的方法,所述方法包括:
通过SSD存储器控制器基于输入键,计算第一桶标识和第一桶间值;
基于所述第一桶标识符、所述第一桶间值和第一数据结构的第一元数据来确定存储所述键值对的块集群;
基于所述输入键计算第二桶标识和第二桶间值;
基于所述第二桶标识符、所述第二桶间值和第二数据结构的第二元数据来确定键值对检索信息和代表性键值对检索信息中的至少一个;其中,所述第二数据结构被分配给块集群;其中,所述第二元数据包括第二逻辑插槽,第二插槽定位符和第二冲突分离元数据;其中,至少第二插槽定位器仅包括代表性键值对的元数据,所述代表性键值对是存储在块集群中的多个键值对的子集;以及
基于键值对检索信息和代表性键值对检索信息中的至少一个来至少检索键值对的值。
33.根据权利要求32所述的方法,包括检索包括下述项的内容:(a)键值对,以及(b)与键值对相关联的代表性键值对的至少一部分。
34.根据权利要求32所述的方法,包括检索包括下述项的内容:(a)所述键值对,(b)键值对之前的代表性键值对的至少一部分,以及(c)键值对之后的代表性键值对的至少一部分。
35.根据权利要求32所述的方法,包括:找到与所述键值对相关联的代表性键值对,以及基于所述代表性键值对找到所述键值对。
36.根据权利要求32所述的方法,其中,确定键值对检索信息和代表键值对检索信息中的至少一个包括仅确定键值对检索信息。
37.根据权利要求32所述的方法,其中,确定键值对检索信息和代表键值对检索信息中的至少一个包括仅确定代表键值对检索信息。
38.根据权利要求32所述的方法,包括:通过所述SSD控制器接收一输入键;将输入值转换为中间键;并且其中,计算所述第一桶标识符和所述第一桶间值包括:在所述中间键上应用第一散列函数以提供第一散列结果;以及基于所述第一散列结果确定所述第一桶标识和所述第一桶间值。
39.根据权利要求33所述的方法,其中,确定所述块集群包括:至少使用所述第一桶间值访问通过所述第一桶标识识别的第一桶的第一元数据;其中,所述第一桶属于所述第一数据结构;以及基于所述第一元数据选择所述第二数据结构。
40.根据权利要求39所述的方法,包括:通过所述SSD控制器接收一输入键;将输入值转换为中间键;并且其中,计算所述第二桶标识符和所述第二桶间值包括:在所述中间键上应用第二散列函数以提供第二散列结果;以及基于所述第二散列结果确定所述第二桶标识和所述第二桶间值。
41.根据权利要求40所述的方法,其中,所述第一数据结构和所述第二数据结构不存储所述中间键。
42.根据权利要求40所述的方法,其中,所述第一数据结构的第一桶包括存储一个或多个第二数据结构标识符的第一逻辑插槽;其中,所述第一元数据包括(a)第一插槽定位符元数据,所述第一插槽定位符元数据用于选择所述第一逻辑插槽的第一逻辑插槽的第一插槽定位符元数据以及(b)第一冲突分离元数据,所述第一冲突分离元数据用于在每个冲突的第一逻辑插槽内选择第二桶识别符,其中,冲突的第一逻辑插槽映射到多个冲突的中间键。
43.根据权利要求42所述的方法,其中,所述第二插槽定位符元数据包括二进制序列,所述二进制序列指示每个第一逻辑插槽的多个第二桶标识符。
44.根据权利要求42所述的方法,其中,选择所述第二数据结构包括搜索第二数据结构标识符。
45.根据权利要求44所述的方法,其中,搜索第二数据结构标识包括:
(a)根据所述二进制序列的最高有效位来计数零位的数量以找到某个位,所述零位的数量等于所述第一桶间值的值;并且
(b)将属于所述第一逻辑插槽的多个第二数据结构标识符设置为跟随所述某个位的一位的数目。
46.根据权利要求42所述的方法,其中,所述第一冲突分离元数据包括置换元数据;其中,所述方法包括使用所述置换元数据获得置换函数;并且其中,在所述第一逻辑插槽内选择所述第二桶标识符包括在中间值的至少一部分上应用所述置换函数。
47.根据权利要求42所述的方法,其中,对于每个冲突的第一逻辑插槽,所述第一冲突分离元数据包括表示被映射到所述冲突的第一逻辑插槽的冲突中间键的树。
48.根据权利要求47所述的方法,其中,所述树是排序树。
49.根据权利要求47所述的方法,其中,所述树是未排序的树。
50.根据权利要求47所述的方法,其中对于每个冲突的第一逻辑插槽,所述树的每个父节点具有与不同中间键值相关联的子节点,其中,每个专利节点存储因不同中间键之间的值而不同的第一位的顺序的信息。
51.根据权利要求47所述的方法,其中,对于每个冲突的第一逻辑插槽,所述树的每个父节点具有与不同中间键值相关联的子节点,其中,每个专利节点存储关于下述项的信息:(a)因不同的中间键之间的值而不同的第一位的顺序,以及(b)在第一位之前的前缀的至少一部分。
52.根据权利要求47所述的方法,其中,所述第二数据结构的第二桶包括第二冲突分离元数据,用于在每个冲突的第二逻辑插槽内选择(a)键值对访问信息和(b)代表性键值对访问中的至少一个,其中,冲突的第二逻辑插槽被映射到多个冲突的中间键。
53.根据权利要求52所述的方法,其中,每个桶包括起始元数据,所述起始元数据指示与所述桶之前的桶相关联的码字的总数。
54.根据权利要求52所述的方法,其中,对于每个冲突的第二逻辑插槽,所述第二冲突分离元数据包括表示被映射到所述冲突的第二逻辑插槽的冲突中间键的树。
55.根据权利要求52所述的方法,其中,所述第二数据结构存储关于存储多个键值对的多个码字的键值对访问信息。
56.一种存储有指令的非易失性计算机可读介质,所述指令一旦由固态驱动器(SSD)存储器控制器执行时,使得所述SSD存储器控制器执行以下步骤:通过SSD存储器控制器基于输入键计算第一桶标识和第一桶间值;基于所述第一桶标识符、所述第一桶间值和第一数据结构的第一元数据来确定存储键值对的块集群;基于所述输入键计算第二桶标识和第二桶间值;基于所述第二桶标识符,所述第二桶间值和第二数据结构的第二元数据来确定键值对检索信息和代表性键值对检索信息中的至少一个;其中,所述第二数据结构被分配给所述块集群;其中,所述第二元数据包括第二逻辑插槽,第二插槽定位符和第二冲突分离元数据;其中,至少第二插槽定位器仅包括代表性键值对的元数据,所述代表性键值对是存储在块集群中的多个键值对的子集;以及基于所述键值对检索信息和所述代表性键值对检索信息中的至少一个来检索键值对。
57.一种存储有指令的非易失性计算机可读介质,所述指令一旦由固态驱动器(SSD)存储器控制器执行时,使得所述SSD存储器控制器执行以下步骤:通过SSD存储器控制器基于输入键来计算第一桶标识和第一桶间值;基于所述第一桶标识符、所述第一桶间值和第一数据结构的第一元数据来确定存储所述键值对的块集群;基于所述输入键计算第二桶标识和第二桶间值;基于所述第二桶标识符、所述第二桶间值和第二数据结构的第二元数据来确定键值对检索信息;其中,所述第二数据结构被分配给所述块集群;以及基于所述键值对检索信息检索至少所述键值对值。
58.一种用于访问存储在固态驱动器(SSD)存储器中的键值对的系统,所述系统包括SSD存储器,所SSD存储器被配置成执行以下步骤:通过SSD存储器控制器基于输入键计算第一桶标识和第一桶间值;基于所述第一桶标识符、所述第一桶间值和第一数据结构的第一元数据来确定存储键值对的块集群;基于所述输入键计算第二桶标识和第二桶间值;基于所述第二桶标识符,所述第二桶间值和第二数据结构的第二元数据来确定键值对检索信息和代表性键值对检索信息中的至少一个;其中,所述第二数据结构被分配给所述块集群;其中,所述第二元数据包括第二逻辑插槽,第二插槽定位符和第二冲突分离元数据;其中,至少第二插槽定位器仅包括代表性键值对的元数据,所述代表性键值对是存储在块集群中的多个键值对的子集;以及基于所述键值对检索信息和所述代表性键值对检索信息中的至少一个来检索键值对。
59.一种用于访问存储在固态驱动器(SSD)存储器中的键值对的系统,所述系统包括SSD存储器,所SSD存储器被配置成执行以下步骤:通过SSD存储器控制器基于输入键来计算第一桶标识和第一桶间值;基于所述第一桶标识符、所述第一桶间值和第一数据结构的第一元数据来确定存储所述键值对的块集群;基于所述输入键计算第二桶标识和第二桶间值;基于所述第二桶标识符、所述第二桶间值和第二数据结构的第二元数据来确定键值对检索信息;其中,所述第二数据结构被分配给所述块集群;以及基于所述键值对检索信息检索至少所述键值对值。
60.一种访问存储在固态硬盘(SSD)存储器中的键值对的方法,所述方法包括:
通过SSD控制器接收一输入键;
将输入值转换为中间键;
在所述中间键上应用第一散列函数以提供第一散列结果;
基于第一散列结果确定与所述中间键相关联的键值对是否与存储在第一数据结构或流出数据结构中的元数据相关联;
当确定与所述中间键相关联的键值对与存储在流出数据结构中的元数据相关联时,则访问所述流出数据结构;
当确定与所述中间键相关联的键值对与存储在第一数据结构中的元数据相关联时,则基于所述第一散列结果确定第一桶标识符和第一桶间值;
至少使用所述第一桶间值访问由第一桶标识符标识的第一桶的第一元数据;其中,所述第一桶属于第一数据结构;
基于第一元数据选择分配给块集群的第二数据结构;
在所述中间键上应用第二散列函数以提供第二散列结果;
基于所述第二散列结果计算第二桶标识和第二桶间值;
至少使用所述第二桶间值访问由第二桶标识符标识的第二桶的第二元数据;其中,所述第二桶属于第二数据结构;
基于第二元数据确定键值对访问信息;其中,键值对是与输入键相关联的值;以及
使用所述键值对访问信息获得所述键值对。
61.一种访问存储在固态硬盘(SSD)存储器中的键值对的方法,所述方法包括:
通过SSD存储器控制器基于输入键计算第一桶标识和第一桶间值;
基于所述第一桶标识符,所述第一桶间值和从第一数据结构和第一流出数据结构中选择的数据结构的元数据来确定存储键值对的块集群;
基于所述输入键计算第二桶标识和第二桶间值;
基于所述第二桶标识符、所述第二桶间值和从第二数据结构和第二流出数据结构中选择的数据结构的元数据来确定键值对检索信息;其中,所述第二数据结构和所述第二流出数据结构被分配给块集群;以及
基于所述键值对检索信息检索至少所述键值对值。
CN201811590705.8A 2017-12-25 2018-12-25 数据库及固态磁盘(ssd)控制器 Pending CN110196784A (zh)

Applications Claiming Priority (6)

Application Number Priority Date Filing Date Title
US201762610244P 2017-12-25 2017-12-25
US62/610,244 2017-12-25
US201862732576P 2018-09-18 2018-09-18
US62/732,576 2018-09-18
US201862744264P 2018-10-11 2018-10-11
US62/744,264 2018-10-11

Publications (1)

Publication Number Publication Date
CN110196784A true CN110196784A (zh) 2019-09-03

Family

ID=67751124

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811590705.8A Pending CN110196784A (zh) 2017-12-25 2018-12-25 数据库及固态磁盘(ssd)控制器

Country Status (2)

Country Link
US (3) US10860249B2 (zh)
CN (1) CN110196784A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111125002A (zh) * 2019-11-15 2020-05-08 卢万龙 一种基于分布式存储的数据备份归档方法和系统

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9691452B2 (en) 2014-08-15 2017-06-27 Micron Technology, Inc. Apparatuses and methods for concurrently accessing different memory planes of a memory
US9910594B2 (en) * 2015-11-05 2018-03-06 Micron Technology, Inc. Apparatuses and methods for concurrently accessing multiple memory planes of a memory during a memory access operation
US11580162B2 (en) * 2019-04-18 2023-02-14 Samsung Electronics Co., Ltd. Key value append
US11403020B2 (en) * 2019-10-31 2022-08-02 Hewlett Packard Enterprise Development Lp Increasing sizes of buckets of a fingerprint index
CN111190550B (zh) * 2019-12-31 2024-03-29 深圳市安云信息科技有限公司 一种元数据加速方法、装置及存储设备
US12010214B2 (en) * 2021-01-20 2024-06-11 Samsung Electronics Co., Ltd. Hash based key value to block translation methods and systems
WO2023278149A1 (en) * 2021-06-28 2023-01-05 2Misses Corporation System and method for a hash table and data storage and access using the same
US11853607B2 (en) 2021-12-22 2023-12-26 Western Digital Technologies, Inc. Optimizing flash memory utilization for NVMe KV pair storage
US11817883B2 (en) 2021-12-27 2023-11-14 Western Digital Technologies, Inc. Variable length ECC code according to value length in NVMe key value pair devices
US11733876B2 (en) 2022-01-05 2023-08-22 Western Digital Technologies, Inc. Content aware decoding in KV devices
CN116737612A (zh) * 2022-03-02 2023-09-12 华为技术有限公司 一种地址管理方法及存储装置

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3178909B2 (ja) 1992-01-10 2001-06-25 株式会社東芝 半導体メモリ装置
JP2856621B2 (ja) 1993-02-24 1999-02-10 インターナショナル・ビジネス・マシーンズ・コーポレイション 一括消去型不揮発性メモリおよびそれを用いる半導体ディスク装置
US6377500B1 (en) 1999-11-11 2002-04-23 Kabushiki Kaisha Toshiba Memory system with a non-volatile memory, having address translating function
US6684289B1 (en) 2000-11-22 2004-01-27 Sandisk Corporation Techniques for operating non-volatile memory systems with data sectors having different sizes than the sizes of the pages and/or blocks of the memory
US9183219B1 (en) * 2011-04-18 2015-11-10 American Megatrends, Inc. Data migration between multiple tiers in a storage system using policy based ILM for QOS
US9043530B1 (en) * 2012-04-09 2015-05-26 Netapp, Inc. Data storage within hybrid storage aggregate
US9898224B1 (en) * 2012-09-12 2018-02-20 EMC IP Holding Company LLC Automatic adjustment of capacity usage by data storage optimizer for data migration
US9934264B2 (en) * 2015-06-02 2018-04-03 Netapp, Inc. Technique for reducing metadata stored in a memory of a node
KR102569545B1 (ko) * 2017-11-08 2023-08-22 삼성전자 주식회사 키-밸류 스토리지 장치 및 상기 키-밸류 스토리지 장치의 동작 방법

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111125002A (zh) * 2019-11-15 2020-05-08 卢万龙 一种基于分布式存储的数据备份归档方法和系统
CN111125002B (zh) * 2019-11-15 2023-10-27 卢万龙 一种基于分布式存储的数据备份归档方法和系统

Also Published As

Publication number Publication date
US20210055886A1 (en) 2021-02-25
US10860249B2 (en) 2020-12-08
US11809744B2 (en) 2023-11-07
US11604604B1 (en) 2023-03-14
US20190384530A1 (en) 2019-12-19

Similar Documents

Publication Publication Date Title
CN110196784A (zh) 数据库及固态磁盘(ssd)控制器
US11599552B2 (en) Counter-based compaction of key-value store tree data block
CN110383261B (zh) 用于多流存储装置的流选择
CN113168408B (zh) 利用压缩的键值存储树数据块溢出
TWI702503B (zh) 實施用於維護操作之合併樹修改之系統、方法及電腦可讀媒體
TWI682274B (zh) 鍵值儲存樹
TWI702506B (zh) 用於合併樹廢棄項目指標之系統、機器可讀媒體及機器實施之方法
TWI682285B (zh) 用於索引鍵值結構樹資料庫的產品、方法及機器可讀媒體
US9405790B2 (en) System, method and data structure for fast loading, storing and access to huge data sets in real time
US11899641B2 (en) Trie-based indices for databases
US20120209855A1 (en) Bit-string key classification/distribution apparatus, classification/distribution method, and program
CN108509505A (zh) 一种基于分区双数组Trie的字符串检索方法及装置
CN117216023B (zh) 一种大规模网络数据存储方法及系统
CN106990910A (zh) 存储设备和存储设备的操作方法
Franceschini et al. Optimal worst-case operations for implicit cache-oblivious search trees
CN112817530A (zh) 一种多线程安全高效读写有序数据的方法
CN115563116A (zh) 一种数据库表扫描方法、装置以及设备
KR100907827B1 (ko) 포워딩 테이블 검색 장치 및 방법
CN117851537A (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