2011-01-14 8 views
14

So come implementare btree in memoria, ma non chiaro su come memorizzare btree nel disco. Penso che ci sono due grandi differenze:In che modo btree è memorizzato sul disco?

  1. conversione tra puntatore di memoria e l'indirizzo del disco, vedere questo post.
  2. Come dividere la pagina quando si inserisce un nuovo elemento k/v? È molto facile da implementare in memoria.

Grazie

+0

Possibile duplicato http://stackoverflow.com/questions/872070/saving-btrees-to-a-disk-file-and-read-it anche se le risposte non sono molto buone. –

+0

Lo hai mai capito? C'è una bella implementazione open source qui: https://github.com/jankotek/JDBM3 ma ci vuole tempo per leggerla. Per iniziare puoi dare un'occhiata a: https://github.com/jankotek/JDBM3/blob/master/src/test/java/org/apache/jdbm/BTreeTest.java. Se hai trovato una risorsa migliore, condividila pure. – Sohaib

risposta

1

La mia raccomandazione è quella di avere uno sguardo al libro Database System Implementation"

capitolo "memorizzazione dei dati" 2 e il capitolo 3 "che rappresentano elementi di dati" wil darvi alcuni suggerimenti su questo problema.

strutture di indice del capitolo 4 è una sezione su Usa Btree

E 'la migliore fonte di informazioni che ho trovato finora su questo argomento.

+2

Ci sono molti libri su questo argomento, ad esempio, * concetti di sistema del database * (http://codex.cs.yale.edu/avi/db-book/) capitolo 11. tuttavia nessuno di loro ha parlato della realtà della implzione. – Chang

4

tutto dipende dal DBMS che si utilizza. Se volete sapere come viene implementato in MS SQL Server, le cose per leggere sono:

  • Pages (suppongo che siano in quasi tutti i moderni DBMS) - in SQL Server sono 8Kb. Il file di database è composto da pagine.
  • Estensioni - gruppi logici di 8 pagine continue
  • (S) GAM - Mappa di assegnazione globale (condivisa). Bitmap contenente informazioni su estensioni libere e occupate. Questa è una delle prime pagine sul file di database.
  • IAM - Mappa allocazione indici. È possibile scoprire quale indice/heap è memorizzato in quali estensioni. Avendo queste informazioni, è possibile ottenere posto nel file in cui è memorizzato l'indice/heap.

Utilizzando IAM e GAM (o SGAM) è possibile dividere la pagina: è sufficiente spostare parte della pagina (che deve essere inondata) in un'altra pagina del file.

IAM e GAM sono anche le risposte alla tua prima domanda.

La maggior parte di questi nomi sono presi da MS SQL Server ma sono abbastanza sicuro che in altri DBMS è stato risolto in modo abbastanza simile.

Spero che aiuti.

+0

bravi almeno alcuni puntatori per tirare i thread (+1) –

Problemi correlati