Cómo aprender el código fuente de SQLite
En primer lugar, los datos en SQLite en realidad no son ni más ni menos.
Muchas razones se deben a que estos materiales realmente pueden ayudarlo a comprender los principios de diseño de SQLite.
La razón por la que digo que no es mucho es para que entiendas su principio, nada más.
Los datos de SQLite provienen principalmente de cuatro lugares, de menos profundo a más profundo:
1.& lt& gtEste es un pequeño libro sobre los "principios básicos" de SQLite, de solo unas 80 páginas. Introduce el principio de "backend" de SQLite. Este libro se puede descargar de Baidu, enlace: dentro de sqlite_Baidu lo sabe. En el github anterior, nuestros socios del proyecto han traducido este libro, pero aún no se ha completado. Se recomienda escanear la versión original directamente.
2.Documentación oficial, enlace: documentación de SQLite. Sin embargo, la documentación que contiene también es importante para los estudiantes. Se recomienda leer la documentación técnica en la columna "Documentación técnica/de diseño de SQLite".
3.& lt& ltSistema de base de datos SQLite: diseño e implementación& gt& gtEste también es un pequeño libro sobre SQLite, de menos de 200 páginas. El contenido de este libro es en realidad el mismo que
4. Los comentarios del código fuente de SQLite son muy detallados, más detallados que los dos libros anteriores... los comentarios en cada uno. El código C de SQLite es casi más rápido que el código y, además de la arquitectura básica, muchos detalles que no se mencionan en los materiales anteriores también se mencionan en los comentarios del código fuente.
============================================ = =====================
A continuación, hablemos de los métodos de aprendizaje que recomiendo ~ ~
== == ================================================== == ==========
A continuación se explica cómo estudiar mucho. Si quieres aprender rápida y ferozmente, simplemente lee el siguiente párrafo.
Si quieres estudiar mucho.
Primero debes leer el documento "Arquitectura SQLite", que detalla la estructura de siete capas de SQLite, que generalmente se divide en "frontend", "VM intermedia" y "backend".
Después de leer el artículo arch.html, sabrá que el "front-end" realiza principalmente análisis de sintaxis y el "back-end" implementa principalmente las propiedades de la base de datos (ACID).
Personalmente, recomiendo aprender desde el backend. Después de todo, aprender SQLite es aprender a implementar una base de datos.
El árbol backend, el buscapersonas y la capa del sistema operativo en realidad no son difíciles (al menos no son difíciles de entender).
Recomiendo OS->Pageer->Tree para aprender y escribir demostraciones al mismo tiempo.
Hablaré brevemente sobre algunos puntos que encontré en el proceso de aprendizaje de estas tres capas. Espero que sean útiles para el cartel original.
Sistema Operativo:
El sistema operativo es una capa fina, principalmente para mejorar la portabilidad.
El método para aprender esta capa es aproximado: primero mire "OS backend (VFS) para SQLite" y luego mire "test_demovfs.c" en el código fuente.
Comprenda principalmente las siguientes tres estructuras.
sqlite3_vfs
sqlite3_io_methods
sqlite3_file
En mi demo 1.1 en github, hay una demostración más simple. Consulte los tres códigos OS.c, OS.h y UNIX_OS.c.
-
Máquina buscapersonas:
El buscapersonas implementa principalmente tres funciones :ACID, registro, caché.
Hablemos primero del ácido:
Para esta parte del ácido, solo miré los métodos más básicos y elegí omitirlo. La forma en que sqlite implementa ACID puede considerarse como "compromiso atómico en SQLite".
Lo traduje aquí, puedes leerlo.
"Cómo lograr -a-db-like-SQLite/Cómo lograr la atomicidad.
mdatmaster qw 4990/how-implementation-a-db-like-SQLite Github".
Además de este documento más básico, recomiendo leer
Luego, el almacenamiento en caché, sqlite proporciona complementos. estructura de caché de tipo ins, por lo que quizás se pregunte por qué hay Pager.c, pcache.c y pcache 1.c en sqlite al mismo tiempo:
Esta parte del caché es relativamente simple,
En github En mi demo1.1, la función de almacenamiento en caché también se completó 1. Consulte los cuatro códigos de pager.h, pager.c, pcache.c y pcache 1.
Elijo ignorar esta parte ahora...
-
Capa de árbol:
Capa de árbol de SQLite utiliza el árbol B+/B- para mantener los datos, a fin de lograr el propósito de "agregar, eliminar, verificar y modificar" rápidamente
No hay mucha información sobre esta capa en el documento oficial <. /p>
En primer lugar, el algoritmo en sí, es decir, el árbol B+/B-/B, no hay nada que decir, y hay muchos libros de algoritmos.
El siguiente enfoque es. cómo SQLite aplica B-tree a su propia base de datos
Esto se puede ver
& lt& ltSistema de base de datos SQLite& gt& gtAdemás del principio, también se dice que btree en sqlite. dividido aproximadamente en varias estructuras
Lo anterior es lo que aprendí después de estudiar. Algunos puntos encontrados al final
================. ===========================================
Si el método de aprendizaje anterior es más problemático,
Puedes navegar primero. Echa un vistazo a "Arquitectura SQLite",
Luego, echa un vistazo a "Commitción atómica en SQLite",
Finalmente, escaneé breve y aproximadamente los dos libros recomendados.
También sé aproximadamente cómo está diseñado SQLite.
Sin embargo, personalmente creo que SQLite es un. "Artesanía exquisita de nivel maestro". Es un poco "imprudente" decir que lo terminé después de leer dos libros
p>Además de los métodos básicos de diseño de bases de datos (es decir, el. contenido de esos dos libros), también vale la pena aprender las habilidades de programación, el diseño de ingeniería y varias pequeñas consideraciones contenidas en el código fuente de SQLite
==============. ================================== ==============
Finalmente, para resumir
Si desea aprender de manera simple, aproximada y rápida, puede escanear directamente arch.html, atomiccommit.html y esos dos libros para comprender cómo está diseñado sqlite.
Si desea aprender en profundidad, se recomienda comenzar desde el séptimo piso y escribir demostraciones mientras lee el código fuente.