Análisis de código fuente de Leveldb 1.2: descripción general básica de la arquitectura general

Análisis de código fuente de Leveldb 1.2: descripción general básica de la arquitectura general

Introducción

Leveldb adopta el árbol LSM (Log Structured-Merge Tree) para lograr, al ceder parte del rendimiento de lectura a cambio de la mejora del rendimiento de escritura. Convierta el archivo de escritura aleatoria tradicional en un archivo de escritura de adición secuencial. Toda la implementación del código fuente de leveldb tiene muchos diseños inteligentes. Por ejemplo, el hash de cubeta se usa para reducir la probabilidad de exclusión mutua de subprocesos, y el diseño de lru_ e in_use_ en la caché para evitar el borrado accidental de los objetos de datos que se están usando, etc., se han usado cuando escribí otro middleware antes .

1 Arquitectura general

La arquitectura central de todo el leveldb es la siguiente:
Inserte la descripción de la imagen aquí
está dividida en dos capas: la capa superior es la arquitectura de memoria y la capa inferior es la arquitectura del sistema de archivos.
Al escribir datos: primero, agregue los datos al archivo de registro; luego, agréguelo al caché de MemTable; cuando MemTable exceda un cierto umbral, se convertirá en un MemTable inmutable y luego se escribirá en el archivo sstable por segundo plano subproceso; el
archivo sstable utiliza almacenamiento jerárquico, por lo que se llama leveldb. El archivo de manifiesto registra qué archivos se incluyen en cada capa; cuando hay una MemTable inmutable o una determinada capa alcanza una determinada condición (por ejemplo, el archivo total tamaño excede un cierto valor), se ejecutará Fusionar a niveles inferiores, y luego se generará un nuevo archivo de manifiesto; el archivo actual registra el nombre del archivo de manifiesto actual.
Al leer datos: consulte primero MemTable, devuelva si hay, de lo contrario, realice la consulta posterior; luego consulte la MemTable inmutable, devuelva si hay, de lo contrario, realice la consulta posterior; si no se encuentra después de los dos primeros pasos, se le dará prioridad a la consulta Si el archivo sstable de nivel 0 existe, si lo hay, devuélvalo, en caso contrario, ejecute la consulta posterior; finalmente consulte el nivel 1 a 6 en secuencia, si existe, devuelva, en caso contrario devuelva un resultado vacío

2 Término de diseño

2.1 UserKey 与 InternalKey

En la implementación de leveldb, hay dos conceptos de Key: UserKey e InternalKey. UserKey es el valor de clave pasado por el llamador de leveldb durante las operaciones put / get / delete; dado que las operaciones en la misma UserKey están ordenadas, InternalKey es el objeto agregado de la UserKey interna más la secuencia de operación SequenceNumber y el tipo de operación ValueType. En el archivo sstable, InternalKey se ordena primero por UserKey. Si UserKey es igual, se ordena por SequenceNumber en orden descendente.

2.2 Rebanada

Slice, también conocido como slice, es una clase contenedora para fragmentos de matrices de bytes. No gestiona el ciclo de vida de la memoria ocupada por la matriz de caracteres y se utiliza principalmente para evitar que la copia de datos de bytes afecte el rendimiento.

Supongo que te gusta

Origin blog.csdn.net/fs3296/article/details/107783323
Recomendado
Clasificación