데이터 베이스 MySQL 튜토리얼 LevelDB系列之SSTable(Sorted Strings Table)文件

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

Jun 07, 2016 pm 05:37 PM
leveldb sorted 시리즈

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记录格式

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Xiaomi 15 시리즈 전체 코드명 공개: Dada, Haotian, Xuanyuan Xiaomi 15 시리즈 전체 코드명 공개: Dada, Haotian, Xuanyuan Aug 22, 2024 pm 06:47 PM

샤오미 Mi 15 시리즈는 10월 정식 출시될 예정이며, 전체 시리즈 코드명이 외신 MiCode 코드베이스에 노출됐다. 그중 주력 제품인 샤오미 미 15 울트라의 코드명은 '쉬안위안(Xuanyuan)'('쉬안위안(Xuanyuan)'이라는 뜻)이다. 이 이름은 중국 신화 속 황제(Yellow Emperor)에서 유래한 것으로 귀족을 상징한다. Xiaomi 15의 코드명은 "Dada"이고, Xiaomi 15Pro의 이름은 "Haotian"("Haotian"을 의미)입니다. Xiaomi Mi 15S Pro의 내부 코드명은 "dijun"으로, "산과 바다의 고전"의 창조신인 Jun 황제를 암시합니다. Xiaomi 15Ultra 시리즈 커버

화웨이 메이트 60 시리즈 구매 최적기, 새로운 AI 제거 + 이미지 업그레이드, 가을 프로모션 즐기기 화웨이 메이트 60 시리즈 구매 최적기, 새로운 AI 제거 + 이미지 업그레이드, 가을 프로모션 즐기기 Aug 29, 2024 pm 03:33 PM

지난해 화웨이 메이트60 시리즈가 출시된 이후 개인적으로는 메이트60프로를 메인폰으로 사용해오고 있다. 거의 1년 동안 Huawei Mate60Pro는 여러 번의 OTA 업그레이드를 거쳤으며 전반적인 경험이 크게 개선되어 사람들에게 끊임없이 새로운 느낌을 줍니다. 예를 들어, 최근 Huawei Mate60 시리즈는 이미징 기능이 다시 한 번 크게 업그레이드되었습니다. 첫 번째는 행인과 잔해를 지능적으로 제거하고 빈 영역을 자동으로 채울 수 있는 새로운 AI 제거 기능입니다. 두 번째로 메인 카메라의 색상 정확도와 망원 선명도가 크게 업그레이드되었습니다. 개학 시즌을 고려하여 Huawei Mate60 시리즈도 가을 프로모션을 시작했습니다. 휴대폰 구매 시 최대 800위안 할인 혜택을 누릴 수 있으며, 시작 가격은 최저 4,999위안입니다. 일반적으로 사용되며 종종 가치가 높은 새로운 제품

iPhone 15와 iPhone 15 Pro 중에서 선택하는 방법은 무엇입니까? 9가지 주요 차이점을 한 번에 iPhone 15와 iPhone 15 Pro 중에서 선택하는 방법은 무엇입니까? 9가지 주요 차이점을 한 번에 Sep 14, 2023 am 08:01 AM

iPhone15와 iPhone15Pro는 오늘 공식적으로 출시되었습니다. 그러나 Pro 시리즈는 고급 모델로서 가격이 더 높을 뿐만 아니라 많은 독점 기능을 갖추고 있습니다. iPhone15에서만 사용할 수 있는 기능입니다. 모니터에는 동일한 디스플레이 패널이 장착되어 있지만 ProMotion 자동 적응형 업데이트 빈도 기술과 상시 ​​디스플레이 기능은 여전히 ​​Pro 시리즈에만 적용됩니다. 나머지 iPhone 15 및 iPhone 15 Pro 시리즈는 해상도, 대비, 최대 밝기 등이 동일합니다. 액션 버튼 액션 버튼은 현재 iPhone 15 Pro 시리즈 전용 디자인으로 사용자가 개인화할 수 있습니다.

Java를 사용하는 방법 Java를 사용하는 방법 Apr 19, 2023 am 11:40 AM

개념 1. Sorted는 정렬된 스트림을 반환하는 중간 작업입니다. 사용자 정의 비교기를 입력하지 않으면 기능이 자연스러운 순서로 정렬됩니다. 사용법 참고 2. Sorted 작업을 수행한 후에도 stringCollection의 요소 순서는 변경되지 않았습니다. Sorted는 원래 컬렉션의 요소 순서를 변경하지 않고 스트림의 요소만 정렬합니다. 예 stringCollection.stream().sorted().filter((s)->s.startsWith("a")).forEach(System.out::printl

CentOS에 LevelDB 설치 및 CentOS에 v2 설치 CentOS에 LevelDB 설치 및 CentOS에 v2 설치 Feb 14, 2024 am 09:33 AM

CentOS 시스템에 LevelDB를 설치하고 구성하는 것은 매우 유용한 기술입니다. LevelDB는 데이터베이스, 캐시, 로깅 시스템 등 다양한 애플리케이션을 구축하는 데 사용할 수 있는 고성능 키-값 저장소입니다. CentOS에 LevelDB를 설치 및 구성하고 시스템에 LevelDB를 설치 및 구성하며 몇 가지 실용적인 명령과 기술을 제공하는 과정입니다. CentOS에 LevelDB 설치 다음은 CentOS 시스템에 LevelDB를 설치하는 단계입니다. 종속성 설치 LevelDB 설치를 시작하기 전에 터미널을 열고 다음 명령을 실행하여 종속성을 설치해야 합니다.

목록 정렬: Python의 정렬, 정렬 및 numpy.argsort 메서드에 대한 자세한 설명 목록 정렬: Python의 정렬, 정렬 및 numpy.argsort 메서드에 대한 자세한 설명 Jun 10, 2023 am 09:22 AM

Python 프로그래밍에서는 목록이나 배열을 정렬해야 하는 경우가 많습니다. Python은 sort, sorted, numpy.argsort 등을 포함한 다양한 정렬 방법을 제공합니다. 이 기사에서는 이러한 정렬 방법의 사용법과 주의 사항을 자세히 소개합니다. 1. 정렬 방법 정렬 방법은 Python 목록에 내장된 방법으로 목록을 제자리에서 정렬할 수 있으며(즉, 값을 반환하지만 새 정렬 개체를 생성하지 않음) 추가 가져오기 라이브러리가 필요하지 않습니다. 정렬 방법에는 두 개의 매개변수가 있습니다.

Python 함수 소개: 정렬 함수의 사용법 및 예 Python 함수 소개: 정렬 함수의 사용법 및 예 Nov 03, 2023 am 11:02 AM

Python 함수 소개: 정렬 함수의 사용법 및 예 Python에는 많은 내장 함수가 있으며, 그 중 매우 일반적으로 사용되는 함수 중 하나는 sorted() 함수입니다. sorted() 함수는 반복 가능한 객체를 정렬하고 새로운 정렬된 목록을 반환하는 데 사용됩니다. 이 기사에서는 sorted() 함수의 사용법을 소개하고 몇 가지 구체적인 코드 예제를 제공합니다. sorted() 함수의 기본 사용법 sorted() 함수의 기본 구문은 다음과 같습니다.

명예의 전당에는 어떤 시리즈가 있나요? 명예의 전당에는 어떤 시리즈가 있나요? Feb 04, 2024 am 09:18 AM

메모리 스틱을 구매하려는 많은 사용자는 GALAX 명예의 전당 브랜드에 어떤 시리즈의 메모리 스틱이 있는지 알고 싶어합니다. 실제로 이 브랜드에는 현재 HOFEXTREME 한정판, HOFEXTREME 및 HOFPROGB의 세 가지 시리즈가 있습니다. 명예의 전당 메모리 시리즈는 무엇입니까: A: HOFEXTREME 한정판, HOFEXTREME, HOFPROGB. 이 세 가지 메모리 모듈은 모두 상대적으로 좋은 성능을 가지고 있습니다. 그 중 HOFEXTREME 한정판은 이전 두 모델에 비해 성능이 가장 좋습니다. HOFPROGB는 약간 약하지만 성능도 매우 좋습니다. 명예의 전당 메모리 확장 소개: 1. 메모리 입자의 왕이며 수명이 긴 삼성 B-die 입자를 사용합니다.

See all articles