2011-01-14 13 views
14

Sé cómo implementar btree en la memoria, pero no está claro sobre cómo almacenar btree en el disco. Creo que hay dos grandes diferencias:¿Cómo se almacena btree en el disco?

  1. conversión entre un puntero a la memoria y la dirección de disco, ver este post.
  2. ¿Cómo dividir la página cuando inserta un nuevo elemento k/v? Es muy fácil de implementar en la memoria.

Gracias

+0

Posible duplicado http://stackoverflow.com/questions/872070/saving-btrees-to-a-disk-file-and-read-it aunque las respuestas allí no son realmente buenas. –

+0

¿Alguna vez resolvió esto? Aquí hay una buena implementación de código abierto: https://github.com/jankotek/JDBM3, pero lleva tiempo leerlo. Para comenzar, puede consultar: https://github.com/jankotek/JDBM3/blob/master/src/test/java/org/apache/jdbm/BTreeTest.java. Si encontraste un recurso mejor, compártelo también. – Sohaib

Respuesta

1

Mi recomendación es tener un vistazo al libro Database System Implementation"

capítulo "almacenamiento de datos" 2 y el capítulo 3 "que representa los elementos de datos" wil darle algunos consejos acerca de este problema.

estructuras de índice Capítulo 4 tiene una sección sobre Btrees

Es la mejor fuente de información que he encontrado hasta ahora sobre este tema.

+2

Hay muchos libros sobre este tema, por ejemplo, * conceptos de sistema de base de datos * (http://codex.cs.yale.edu/avi/db-book/) capítulo 11. Sin embargo, ninguno de ellos habló sobre la implementación de la realidad. – Chang

4

todo depende del DBMS que use. Si quieres saber cómo se implementa en MS SQL Server, lo que leen sobre son:

  • Páginas (supongo que son en casi todos los modernos de DBMS) - en SQL Server que son 8 Kb. El archivo de base de datos se compone de páginas.
  • Extents - grupos lógicos de 8 páginas continuas
  • (S) GAM - (Compartido) Global Allocation Map. Mapa de bits que contiene información sobre extensiones libres y ocupadas. Esta es una de las primeras páginas en el archivo de la base de datos.
  • IAM - Mapa de asignación de índice. Puede averiguar qué índice/montón se almacena en qué extensiones. Con esta información, puede colocarse en el archivo donde se almacena el índice/montón.

El uso de IAM y el GAM (o SGAM) se puede dividir la página - sólo mover parte de la página (que se supone que debe ser desbordado) a la otra página en el archivo.

IAM y GAM también son respuestas a su primera pregunta.

La mayoría de estos nombres están tomados de MS SQL Server pero estoy bastante seguro de que en otros DBMS se resuelve bastante similar.

Espero que ayude.

+0

bien al menos algunos punteros para tirar de los hilos (+1) –

Cuestiones relacionadas