《Indexing in flash storage devices: a survey on challenges, current approaches, and future trends》
ref:https://doi.org/10.1007/s00778-019-00559-8
Athanasios Fevgas1 · Leonidas Akritidis1 · Panayiotis Bozanis1 · Yannis Manolopoulos2
Abstract:
Index 已经在 DBMSes equipped with hard disk drives (HDDs) 硬盘数据库上用的很好了,近些年,SSD替换了HDDs,
However, treating SSDs
as simply another category of block devices ignores their idiosyncrasies, like erase-before-write, wear-out and asymmetric read/write, and may lead to poor performance.
但我们不能仅仅把它当成另外一种块设备,而忽略它的特性:
1 ,erase-before-write, 写前擦除
2,wear-out 损耗
3, asymmetric read/write, 非对称读写
ssd的这些特性要求对主要为hdd设计的索引技术进行重构甚至重新发明。
1)本文对62种不同数据类型的闪存感知索引进行了综述,分析了它们采用的主要技术,并对它们的主要优缺点进行了评述,旨在为从事ssd算法设计和索引开发的研究人员提供系统的、有价值的资源。
2)我们还讨论了未来的趋势和新的研究方向
Keywords Indexing · Flash memory · Solid-state drives · Nonvolatile memory · New hardware technologies
Introduction
直接在闪存上使用这些数据结构(B-trees [9], R-trees [56], linear [101], and extendible hashing [44].)将导致性能差,这是由于它与磁盘不同的几个显著特性。
为了隐藏这三个特性,ssd提供了一个固件FTL(闪存转换层)。FTL采用一种错位策略,使用逻辑地址映射,并负责损耗均衡、空间回收和坏块管理。
算法设计不应该混合读和写,或者应该批处理(并行)I/O操作。----这些是对闪存设备实验分析得出来的结论,因为厂商不透露设计细节。
通过改造B-trees和R-trees闪存高效访问的方法,分别来使一维数据和多维数据访问的更快。
索引工作原理:
1)要么试图通过维护内存中的写缓冲区来推迟单个写操作,2)要么应用日志记录技术来限制小的随机写操作,3)或者努力利用ssd的内部并行化。
本篇综述的工作重点分为4个:
-概述了闪存和NAND闪存SSD技术,以及它们对算法和数据结构设计的挑战;
-我们广泛调查了各种数据类型的62个闪存感知索引;
-我们总结了采用的主要指标设计技术;
– We discuss future trends and identify new and significant
lines of research.
本文的其余部分组织如下。第2节提供了关于闪存和基于闪存的ssd的必要背景信息。第3节讨论了flash感知索引中使用的主要设计技术。第4节介绍了一维索引,第5节总结了多维索引,第6节介绍了通用框架。第7节涵盖反向指数,而未来的趋势和有趣的研究线在第8节简要介绍。最后,
第9节结束了我们的工作。
在本节中,我们回顾了非易失性存储器(NVM)技术,重点介绍了基于NAND闪存芯片的闪存和ssd。了解这种媒介的基本功能、弱点以及如何解决这些弱点,可以让我们初步了解如何正确使用这种媒介来进行有效的数据操作。
增加闪存密度的两种方法:
1)SLC,MLC multi level, TLC (triple level) QLC(quadruple level) 单位单元储存的电荷数增加。 (存储的电荷越多,寿命越短,越复杂:QLC电池可以使用16种不同的电荷水平(15个阈值)存储4位。与MLC和TLC相比,QLC设备速度较慢,耐用性较差)
2)另一种增加闪存存储密度的方法是将闪存单元层层堆叠起来。这种类型的存储器被称为3D NAND或垂直NAND(V-NAND)。(64层已广泛使用,96层也已经推出了(2020年))
这里需要看一下大神总结的ssd的结构特征:
ref:https://blog.csdn.net/wwwlyj123321/article/details/107387018
LUN:逻辑单元
A logical unit (LUN) is the minimum unit that can independently execute commands and reportstatus.
LUN又可以称作Die,是闪存内可执行命令并回报自身状态的最小独立单元。
一个lun可以拥有1到多个Plane。如东芝BiCS3闪存的一个512Gb Die,包含了两个256Gb容量的Plane面,总容量512Gb。
die彼此独立地操作,也就是说,它们能够同时执行不同的命令(例如,读取、编程、擦除)。
Each page has a data region and an additional area for error correction data and metadata [107] and may comprise
a few sectors.
每个页面都有一个数据区域和一个用于纠错数据和元数据的附加区域[107],并且可以包含几个扇区。
页和块大小通常是未知的。典型值分别为2 ~ 16kb和128 ~ 512kb。