Kyoto cabinet

En la práctica, las prestaciones etán determinadas por la velocidad de acceso a la memoria principal.

Cada operación sobre la base de datos organizada con árbol binario tiene una complejidad "O(log N)".

Kyoto Cabinet está disponible en plataforma con API conforme con C++03 con extensiones de la librería TR1.

Tras ello se desarrollaron gran cantidad de secuelas, como NDBM, SDBM, GDBM, TDB y BerkeleyDB.

Es decir, el tiempo que se requiere para recuperar un registro es constante, independiente del tamaño de los datos.

La colisión de los valores del hash se gestiona mediante un encadenamiento independiente.

Kyoto Cabinet consigue mejorar el tiempo de acceso -frente a Tokio Cabinet- cargando todo el almacén en RAM.

El almacén que está grabado en disco no se carga en RAM con la llamada a `read' sino con `mmap'.

Cuando se sobreescribe un registro con un valor cuyo tamaño es mayor que el existente, es necesario mover la región a otra posición en el fichero.

La reserva de bloques libres los gestiona y rehúsa el más adecuado para un nuevo registro.

La desfragmentación automática consiste en mover los bloques libres y los registros de manera independiente.

Los registros del árbol binario se ordenan y agrupan en páginas lógicas.

Para cada una de esas páginas se mantiene un índice organizado en árbol binario balanceado.

Aunque se requieren operaciones en muchas página para actualizar la base de datos en árbol binario, Kyoto Cabinet acelera el proceso haciendo caché de páginas para reducir el acceso a disco.

La durabilidad está asegurada mediante el log de escritura adelantada y paginación shadow.

Por esto se puede garantizar la durabilidad sin efectuar operaciones de transacción explícitas.

Un lector puede recuperar datos pero no almacenar ni borrar, un escritor además puede escribir.

Con este mecanismo se garantiza la consistencia de datos cuando hay conexiones simultáneas en entornos multitarea.

Kyoto Cabinet proporciona APIs simples basados en diseño orientado a objetos.

Pueden definirse operaciones arbitrarias sobre la base de datos y funciones a invocar.

La clase database tiene el método "accept", el cual acepta una instancia de la clave "visitante" y llama a su función con los datos del registro.

Aunque el grueso del API está desarrollado en C++, también se proporcionan llamadas en otros lenguajes como C, Java, Python, Ruby, Perl y Lua.

Inferfaz por línea de comandos también está disponible para todos los API, lo que resulta muy útil para prototipado, test y depuración.