Esiste un'implementazione nota open source della struttura dati B+ Tree
in Erlang?Struttura dati B + Tree in Erlang
risposta
Consiglio vivamente di esaminare l'applicazione eleveldb
se è davvero necessario un albero B +. Il punto è che si desidera archiviare i dati in foglie di un albero, non in linea su disco, poiché in questo caso i B + -trees sono normalmente un'opzione. C'è anche una variante in puro Erlang di LevelDB chiamata hanoidb
che è anche molto carina, scritta da Kresten Krab Thorup. Stessa area di utilizzo.
Se è necessaria l'archiviazione in memoria, è necessario controllare ETS o Mnesia (quest'ultimo per la distribuzione). In Erlang queste tendono ad essere le soluzioni più veloci in quanto si ha il vantaggio di non colpire mai il disco. È particolarmente vero se è possibile eseguire ricerche di chiavi/valori standard sui dati senza la necessità di eseguire all'interno del contesto transazionale in Mnesia (facendo letture sporche). La velocità di ricerca tipica è quindi di 5-10 nanosecondi.
Non c'è una libreria autonoma disponibile che io conosca. Tuttavia, lo CouchDB source code è molto leggibile e ben implementato.
solo un'alternativa se non si vuole incidere in sistemi di database open source: puramente funzionali strutture dati di
Chris Okasaki può dare qualche informazione sulla sua attuazione da soli. L'albero B + non è così complicato dalla mia esperienza.
Si consiglia di utilizzare gb_trees se si desidera sia la memoria in-memory e qualcosa di più di basso livello (in un certo senso) di ets e mnesia.