2012-01-28 5 views
9

que estaba leyendo acerca LevelDB y descubrió que:¿Cómo es posible construir un índice de base de datos en la parte superior del almacén de claves/valores?

Las futuras versiones del navegador Chrome incluye una implementación de la API IndexedDB HTML5 que se construye en la parte superior de LevelDB

IndexedDB es también un sencillo almacén de clave/valor que tiene la capacidad de indexar datos.

Mi pregunta es: ¿cómo es posible construir un índice en la parte superior de un almacén de claves/valores? Sé que un índice es un B-Tree y entiendo la forma en que los datos se indexan en una base de datos. Pero, ¿cómo se puede usar un almacén de claves/valores como LevelDB para crear un índice de base de datos?

+0

@AndyDent la respuesta es buena. Para ver cómo se hace en la práctica, consulte https://github.com/ren85/linqdb – ren

Respuesta

6

La característica vital no es que admita comparadores personalizados, sino que admita la iteración ordenada a través de las claves y, por lo tanto, busque claves parciales. Puede emular campos en claves simplemente usando convenciones para separar valores de cadena. Las muchas capas de scripting que se encuentran encima de leveldb usan ese enfoque.

El vista de diccionario de una tienda de valores-clave es que solo puede decir si una clave está presente o no por coincidencia exacta. No es realmente posible utilizar solo una tienda de KV como base para un índice de base de datos.

Tan pronto como pueda repetir las teclas a partir de una coincidencia parcial, tiene suficiente para proporcionar las operaciones de búsqueda y clasificación de un índice.

4

Sólo un par de cosas, LevelDB apoya la clasificación de los datos utilizando un comparador de encargo, de la page you linked to:

De acuerdo con el sitio del proyecto las características clave son:

  • claves y los valores son arbitrarios de bytes matrices.
  • Los datos se almacenan ordenados por clave.
  • Las personas que llaman pueden proporcionar una función de comparación personalizada para anular el orden de clasificación.
  • ....

Así LevelDB puede contener datos de esta se pueden ordenar/indexados basado en 1 orden de clasificación.

Si necesita varios campos indexables, puede agregar su propio B-Tree que funcione en la parte superior de LevelDB. Me imagino que este es el tipo de enfoque que toma el navegador Chrome, pero estoy adivinando.

Siempre puede consultar the Chrome source.

+1

; no necesitaría usar un árbol B en la parte superior de leveldb; en su lugar, debe crear otro nivelldb para servir como índice para cada uno. campo. (en efecto, imita lo que hace una base de datos relacional cuando se agregan índices a una tabla), pero cuando miré en leveldb, no vi transacciones cross db. –

+0

@DanD. ¡Secundo que! +1 para el comentario! Añadiría una cosa más: [sí, no hay transacciones, pero sí tiene escrituras por lotes] (http: // stackoverflow.com/questions/9022691/what-constituye-a-transaction-layer-when-talking-about-database-systems) y usted tiene muchas otras características que se acercan a una transacción ACID. – Kiril

+0

@Lirik Lo que quise decir con "transacción de cross db" fue _actividades que involucran varias instancias de leveldb_ que leveldb no tiene soporte. Aunque leveldb admite acciones atómicas en una sola instancia de niveld, no se pueden construir operaciones atómicas en múltiples instancias de nivelardb a partir de eso. –

Cuestiones relacionadas