Pregunta

He oído que las bases de datos de árbol B son más rápidas que las tablas hash, así que pensé de utilizar una base de datos de árbol B para mi proyecto. ¿Hay alguna marco existente en Python que nos permite utilizar dicha estructura de datos o voy a tener que código desde cero?

¿Fue útil?

Solución

La única razón para elegir un B-Árbol sobre una tabla hash, ya sea en la memoria o con el almacenamiento en bloque (como en una base de datos) es apoyar las consultas que no sean iguales. Un árbol B permite realizar consultas de rango con un buen rendimiento. Muchas tiendas de valores clave (tales como db Berkley) no hacen esta visible desde el exterior, sin embargo, debido a que todavía picadillo las llaves, pero esto todavía le permite iterar sobre el conjunto de datos de forma rápida y de manera estable (iteradores siguen siendo válidas incluso si no son añade o eliminaciones, o el árbol necesario reequilibrar).

Si usted no necesita consultas de rango, y que no es necesario iteración concurrente, entonces no necesitas los árboles B, utilizan una tabla hash, que será más rápido a cualquier escala.

Editar que he tenido ocasión de lo anterior para ser cierto; Para ello, el href="http://pypi.python.org/pypi/blist" rel="noreferrer"> blist paquete

Otros consejos

que realmente debe comprobar fuera de ZODB. http://www.zodb.org/en/latest/

i hizo una monografía sobre ello largo ir, aunque su español en http://sourceforge.net/projects/banta/files/Labs/zodb/Monografia%20-%20ZODB.pdf/download

La información contenida en Inglés es por todo el lugar.

Programa de lo que está intentando hacer en primer lugar, a continuación, si es necesario optimizar. Período.

EDIT:

http://pypi.python.org/pypi/blist

gota en el reemplazo para el pitón está construido en la lista.

SQLite3 usa árboles B internamente, pero parece que es posible que desee un almacén de claves-valor. Trate de Berkeley DB para eso. Si no es necesario transacciones, tratar HDF5. Si quieres un almacén de claves-valor distribuido, también hay http://scalien.com/keyspace/ , pero que es un sistema de tipo cliente-servidor que abriría todo tipo de tiendas de valores clave NoSQL.

Todos estos sistemas será O (log (n)) para la inserción y recuperación, por lo que probablemente será más lento que las tablas hash que está utilizando actualmente.

Kioto Gabinete ofrece un árbol de hash, por lo que puede ser más de lo que está viendo, ya que debe ser O (1) para la inserción y la recuperación, pero no se puede hacer el recorrido en orden si necesita que ( aunque ya está usando actualmente hash árboles, esto no debería ser un problema).

http://fallabs.com/kyotocabinet/

Si usted está buscando el rendimiento, tendrá que tener los elementos críticos de velocidad implementados en un lenguaje compilado y luego tener una API envoltorio en Python.

Es posible que desee echar un vistazo a mxBeeBase que forma parte de la Distribución eGenix mx Base. Se incluye una aplicación B + Árbol rápida en disco y ofrece clases de almacenamiento que permiten la construcción de diccionarios o bases de datos en disco en Python.

Aquí hay una buena árbolB implementación de Python puro. Se puede adaptar si es necesario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top