Heim Datenbank MySQL-Tutorial LevelDB系列之SSTable(Sorted Strings Table)文件

LevelDB系列之SSTable(Sorted Strings Table)文件

Jun 07, 2016 pm 05:37 PM
leveldb sorted Serie

SSTable是Bigtable中至关重要的一块,对于LevelDb来说也是如此,对LevelDb的SSTable实现细节的了解也有助于了解Bigtable中一些实现细节。 本节内容主要讲述SSTable的静态布局结构,我们曾在整体架构中说过,SSTable文件形成了不同Level的层级结构,至于这个

 

SSTable是Bigtable中至关重要的一块,对于LevelDb来说也是如此,对LevelDb的SSTable实现细节的了解也有助于了解Bigtable中一些实现细节。

本节内容主要讲述SSTable的静态布局结构,我们曾在“整体架构”中说过,SSTable文件形成了不同Level的层级结构,至于这个层级结构是如何形成的我们放在后面Compaction一节细说。本节主要介绍SSTable某个文件的物理布局和逻辑布局结构,这对了解LevelDb的运行过程很有帮助。

LevelDb不同层级有很多SSTable文件(以后缀.sst为特征),所有.sst文件内部布局都是一样的。上节介绍Log文件是物理分块的,SSTable也一样会将文件划分为固定大小的物理存储块,但是两者逻辑布局大不相同,,根本原因是:Log文件中的记录是Key无序的,即先后记录的key大小没有明确大小关系,而.sst文件内部则是根据记录的Key由小到大排列的,从下面介绍的SSTable布局可以体会到Key有序是为何如此设计.sst文件结构的关键。

wps_clip_image-18291

图4.1 .sst文件的分块结构

图4.1展示了一个.sst文件的物理划分结构,同Log文件一样,也是划分为固定大小的存储块,每个Block分为三个部分,红色部分是数据存储区,蓝色的Type区用于标识数据存储区是否采用了数据压缩算法(Snappy压缩或者无压缩两种),CRC部分则是数据校验码,用于判别数据是否在生成和传输中出错。

以上是.sst的物理布局,下面介绍.sst文件的逻辑布局,所谓逻辑布局,就是说尽管大家都是物理块,但是每一块存储什么内容,内部又有什么结构等。图4.2展示了.sst文件的内部逻辑解释。

wps_clip_image-4580

图4.2逻辑布局

从图4.2可以看出,从大的方面,可以将.sst文件划分为数据存储区和数据管理区,数据存储区存放实际的Key:Value数据,数据管理区则提供一些索引指针等管理数据,目的是更快速便捷的查找相应的记录。两个区域都是在上述的分块基础上的,就是说文件的前面若干块实际存储KV数据,后面数据管理区存储管理数据。管理数据又分为四种不同类型:紫色的Meta Block,红色的MetaBlock 索引和蓝色的数据索引块以及一个文件尾部块。

LevelDb 1.2版对于Meta Block尚无实际使用,只是保留了一个接口,估计会在后续版本中加入内容,下面我们看看数据索引区和文件尾部Footer的内部结构。

wps_clip_image-18980

图4.3数据索引

图4.3是数据索引的内部结构示意图。再次强调一下,Data Block内的KV记录是按照Key由小到大排列的,数据索引区的每条记录是对某个Data Block建立的索引信息,每条索引信息包含三个内容,以图4.3所示的数据块i的索引Index i来说:红色部分的第一个字段记载大于等于数据块i中最大的Key值的那个Key,第二个字段指出数据块i在.sst文件中的起始位置,第三个字段指出Data Block i的大小(有时候是有数据压缩的)。后面两个字段好理解,是用于定位数据块在文件中的位置的,第一个字段需要详细解释一下,在索引里保存的这个Key值未必一定是某条记录的Key,以图4.3的例子来说,假设数据块i 的最小Key=“samecity”,最大Key=“the best”;数据块i+1的最小Key=“the fox”,最大Key=“zoo”,那么对于数据块i的索引Index i来说,其第一个字段记载大于等于数据块i的最大Key(“the best”)同时要小于数据块i+1的最小Key(“the fox”),所以例子中Index i的第一个字段是:“the c”,这个是满足要求的;而Index i+1的第一个字段则是“zoo”,即数据块i+1的最大Key。

文件末尾Footer块的内部结构见图4.4,metaindex_handle指出了metaindex block的起始位置和大小;inex_handle指出了index Block的起始地址和大小;这两个字段可以理解为索引的索引,是为了正确读出索引值而设立的,后面跟着一个填充区和魔数。

wps_clip_image-24284

图4.4Footer

上面主要介绍的是数据管理区的内部结构,下面我们看看数据区的一个Block的数据部分内部是如何布局的(图4.1中的红色部分),图4.5是其内部布局示意图。

wps_clip_image-7105

图4.5数据Block内部结构

从图中可以看出,其内部也分为两个部分,前面是一个个KV记录,其顺序是根据Key值由小到大排列的,在Block尾部则是一些“重启点”(Restart Point),其实是一些指针,指出Block内容中的一些记录位置。

“重启点”是干什么的呢?我们一再强调,Block内容里的KV记录是按照Key大小有序的,这样的话,相邻的两条记录很可能Key部分存在重叠,比如key i=“the Car”,Key i+1=“the color”,那么两者存在重叠部分“the c”,为了减少Key的存储量,Key i+1可以只存储和上一条Key不同的部分“olor”,两者的共同部分从Key i中可以获得。记录的Key在Block内容部分就是这么存储的,主要目的是减少存储开销。“重启点”的意思是:在这条记录开始,不再采取只记载不同的Key部分,而是重新记录所有的Key值,假设Key i+1是一个重启点,那么Key里面会完整存储“the color”,而不是采用简略的“olor”方式。Block尾部就是指出哪些记录是这些重启点的。

wps_clip_image-6552

图4.6记录格式

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Vollständige Codenamen der Xiaomi 15-Serie enthüllt: Dada, Haotian, Xuanyuan Vollständige Codenamen der Xiaomi 15-Serie enthüllt: Dada, Haotian, Xuanyuan Aug 22, 2024 pm 06:47 PM

Die offizielle Veröffentlichung der Xiaomi Mi 15-Serie wird im Oktober erwartet, und die vollständigen Codenamen der Serie wurden in der MiCode-Codebasis ausländischer Medien veröffentlicht. Unter ihnen trägt das Flaggschiff Xiaomi Mi 15 Ultra den Codenamen „Xuanyuan“ (was „Xuanyuan“ bedeutet). Dieser Name stammt vom Gelben Kaiser in der chinesischen Mythologie, der Adel symbolisiert. Xiaomi 15 trägt den Codenamen „Dada“, während Xiaomi 15Pro den Namen „Haotian“ (was „Haotian“ bedeutet) trägt. Der interne Codename des Xiaomi Mi 15S Pro lautet „dijun“, was auf Kaiser Jun anspielt, den Schöpfergott von „The Classic of Mountains and Seas“. Abdeckungen der Xiaomi 15Ultra-Serie

Der beste Zeitpunkt, um die Huawei Mate 60-Serie, die neue KI-Eliminierung + Image-Upgrade zu kaufen und Herbstaktionen zu genießen Der beste Zeitpunkt, um die Huawei Mate 60-Serie, die neue KI-Eliminierung + Image-Upgrade zu kaufen und Herbstaktionen zu genießen Aug 29, 2024 pm 03:33 PM

Seitdem die Huawei Mate60-Serie letztes Jahr in den Handel kam, nutze ich persönlich das Mate60Pro als mein Haupttelefon. In fast einem Jahr wurde das Huawei Mate60Pro mehreren OTA-Upgrades unterzogen und das Gesamterlebnis wurde erheblich verbessert, sodass die Menschen das Gefühl haben, immer neu zu sein. So hat beispielsweise die Huawei Mate60-Serie kürzlich noch einmal ein deutliches Upgrade der Bildgebungsfunktionen erhalten. Erstens die neue KI-Eliminierungsfunktion, die Passanten und Schmutz auf intelligente Weise eliminieren und leere Bereiche automatisch ausfüllen kann. Zweitens wurden die Farbgenauigkeit und die Teleschärfe der Hauptkamera erheblich verbessert. Angesichts der Schulanfangssaison hat die Huawei Mate60-Serie auch eine Herbstaktion gestartet: Beim Kauf des Telefons erhalten Sie einen Rabatt von bis zu 800 Yuan, der Startpreis liegt bei nur 4.999 Yuan. Häufig verwendete und oft neue Produkte mit großem Wert

Wie wähle ich zwischen iPhone 15 und iPhone 15 Pro? Neun große Unterschiede auf einmal Wie wähle ich zwischen iPhone 15 und iPhone 15 Pro? Neun große Unterschiede auf einmal Sep 14, 2023 am 08:01 AM

iPhone15 und iPhone15Pro wurden heute offiziell veröffentlicht. Als High-End-Modelle hat die Pro-Serie jedoch nicht nur einen höheren Preis, sondern verfügt auch über viele exklusive Funktionen. Verbraucher müssen die Unterschiede vor dem Kauf erkennen, um einige nach dem Kauf des iPhone15 nicht zu entdecken . Die Funktion ist nur in der Pro-Serie verfügbar. Obwohl die Monitore mit dem gleichen Anzeigefeld ausgestattet sind, sind die ProMotion-Technologie mit automatischer adaptiver Aktualisierungsfrequenz und die Always-on-Display-Funktion weiterhin exklusiv für die Pro-Serie. Der Rest der iPhone 15- und iPhone 15 Pro-Serie ist hinsichtlich Auflösung, Kontrast, Spitzenhelligkeit usw. gleich. Aktionstaste Die Aktionstaste ist derzeit ein exklusives Design für die iPhone 15 Pro-Serie, sodass Benutzer sie personalisieren können.

So verwenden Sie Java Sortiert So verwenden Sie Java Sortiert Apr 19, 2023 am 11:40 AM

Konzept 1. Sorted ist eine Zwischenoperation, die einen sortierten Stream zurückgibt. Wenn Sie keinen benutzerdefinierten Komparator eingeben, werden die Funktionen in natürlicher Reihenfolge angeordnet. Verwendungshinweis 2. Nach der Ausführung der Sorted-Operation hat sich die Reihenfolge der Elemente in stringCollection nicht geändert. Sortiert sortiert nur die Elemente im Stream, ohne die Reihenfolge der Elemente in der ursprünglichen Sammlung zu ändern. Beispiel stringCollection.stream().sorted().filter((s)->s.startsWith("a")).forEach(System.out::printl

LevelDB unter CentOS installieren und v2 unter CentOS installieren LevelDB unter CentOS installieren und v2 unter CentOS installieren Feb 14, 2024 am 09:33 AM

Die Installation und Konfiguration von LevelDB in CentOS-Systemen ist eine sehr nützliche Fähigkeit. LevelDB ist ein leistungsstarker Schlüsselwertspeicher, der zum Erstellen verschiedener Anwendungen wie Datenbanken, Caches und Protokollierungssystemen verwendet werden kann Installieren und konfigurieren Sie LevelDB unter CentOS. Der Prozess der Installation und Konfiguration von LevelDB auf dem System sowie die Bereitstellung einiger praktischer Befehle und Techniken. Installieren von LevelDB unter CentOS Im Folgenden finden Sie die Schritte zur Installation von LevelDB auf dem CentOS-System: Abhängigkeiten installieren Bevor Sie mit der Installation von LevelDB beginnen, müssen Sie einige erforderliche Abhängigkeiten installieren. Öffnen Sie das Terminal und führen Sie den folgenden Befehl aus, um diese Abhängigkeiten zu installieren: „sudoyuminstallsnappy-deve“.

Listensortierung: Detaillierte Erläuterung der Python-Methoden sort, sorted und numpy.argsort Listensortierung: Detaillierte Erläuterung der Python-Methoden sort, sorted und numpy.argsort Jun 10, 2023 am 09:22 AM

Bei der Python-Programmierung ist es oft notwendig, Listen oder Arrays zu sortieren. Python bietet eine Vielzahl von Sortiermethoden, darunter sort, sorted, numpy.argsort usw. In diesem Artikel werden die Verwendung und Vorsichtsmaßnahmen dieser Sortiermethoden ausführlich vorgestellt. 1. Sortiermethode Die Sortiermethode ist eine integrierte Methode in Python-Listen. Sie kann die Liste direkt sortieren (d. h. sie gibt einen Wert zurück, generiert aber kein neues Sortierobjekt) und erfordert keine zusätzlichen Importbibliotheken. Die Sortiermethode hat zwei Parameter: k

Einführung in Python-Funktionen: Verwendung und Beispiele für sortierte Funktionen Einführung in Python-Funktionen: Verwendung und Beispiele für sortierte Funktionen Nov 03, 2023 am 11:02 AM

Einführung in Python-Funktionen: Verwendung und Beispiele der sortierten Funktion Python verfügt über viele integrierte Funktionen, von denen eine sehr häufig verwendete Funktion die Funktion sorted() ist. Die Funktion sorted() wird verwendet, um ein iterierbares Objekt zu sortieren und eine neue sortierte Liste zurückzugeben. In diesem Artikel wird die Verwendung der Funktion sorted() vorgestellt und einige spezifische Codebeispiele bereitgestellt. Grundlegende Verwendung der Funktion sorted() Die grundlegende Syntax der Funktion sorted() lautet wie folgt: sorted(iterable

Welche Serien gibt es in der Hall of Fame? Welche Serien gibt es in der Hall of Fame? Feb 04, 2024 am 09:18 AM

Viele Benutzer, die Speichersticks kaufen möchten, möchten wissen, welche Serien von Speichersticks die Marke GALAX Hall of Fame hat. Tatsächlich gibt es von dieser Marke derzeit drei Serien, nämlich HOFEXTREME Limited Edition, HOFEXTREME und HOFPRORGB. Was sind die Serien der Hall of Fame-Erinnerung: A: HOFEXTREME Limited Edition, HOFEXTREME, HOFPRORGB. Diese drei Speichermodule weisen alle eine relativ gute Leistung auf. Die HOFEXTREME Limited Edition weist die beste Leistung auf. Das HOFPRORGB ist etwas schwächer als die beiden vorherigen, weist jedoch eine sehr gute Leistung auf. Einführung in die Hall of Fame-Speichererweiterung: 1. Verwendung von Samsung B-Die-Partikeln, dem König der Speicherpartikel mit langer Lebensdauer.

See all articles