Pregunta

Como todos sabemos, hay algunas técnicas de indexación de datos, el uso de aplicaciones de indexación conocidos, como Lucene (para Java) o Lucene.NET (NET), MurMurHash, B + Árbol etc. Para una No- sql / base de datos orientada a objetos (que trato de escribir / jugar un poco alrededor con C #), la técnica que sugiere?

He leído sobre MurMurhash-2 y especialmente v3 comentarios decir soplo es muy rápido. También Lucene.Net tiene buenos comentarios sobre ella. Pero ¿qué pasa con su memoria Huellas en general? ¿Hay alguna solución eficiente que utiliza menos huella (y por supuesto si es preferible más rápido) que Lucene o soplo? O debería escribir una estructura de índice especial para obtener los mejores resultados?

Si trato de escribir mi propia cuenta, entonces ¿hay alguna escala aceptada para una buena indexación, algo así como el 1% de los datos de nodos, o el 5% de los datos de nodos? Se apreciará Cualquier indicio útil.

¿Fue útil?

Solución

creo en mal estado algunas cosas en su pregunta. Lucene (No sé nada de Lucene, NET, pero supongo que es lo mismo) es una biblioteca usada para analizar, dividir en tokens, y almacenar documentos con el fin de ser capaz de consulta y recuperar más tarde. Lucene tiene un modelo bastante antiguo pero efectivo, se utiliza invertida árboles para buscar y recuperar documentos. Sin más detalles, todos los documentos están divididos en tokens (términos), y para cada término se mantiene una estructura de datos, que almacena todos los documentos que contiene el término dado. Como una estructura de datos se podría utilizar un BTree, una tabla hash y en las últimas revisiones importantes incluso se puede enchufar sus propias estructuras de datos.

A BTree (ver página href="http://en.wikipedia.org/wiki/B-tree"> Wikipedia para más detalles), es una especie de una estructura de datos de árbol, la cual es apropiado para trabajar con grandes cantidades de datos y, a menudo se utiliza para almacenar el árbol-como estructuras ordenadas en el disco. Para residentes en memoria otros árboles realiza mejor.

El soplo de hash (véase la página href="http://en.wikipedia.org/wiki/MurmurHash"> Wikipedia para más detalles), es una familia de funciones hash utilizados en la tabla hash. La aplicación de la tabla hash no es importante, podría ser una aplicación encadenada estándar o esquema de direccionamiento de hash abierto más avanzado. La idea es que las tablas hash permite a uno para obtener una clave rápida, a partir de un conjunto desordenado de llaves, y pueden responder a tareas como: ¿Esto es parte clave de este juego de llaves? que es el valor asociado con esta clave?

Ahora, de vuelta a su problema principal. Tiene una biblioteca (Lucene) y estructuras de datos, ambas estructuras de datos se utilizan en Lucene. Ahora se ve que no es posible responder a su pregunta en estos términos, ya que no son comparables.

Sin embargo, en cuanto a que el espacio y el rendimiento parte de la cuestión. En primer lugar usted tiene que saber qué tipo de operaciones es necesario implementar.

¿Sólo se necesitan para obtener el valor clave, o necesita para encontrar todos los elementos en un rango? En otras palabras ¿Necesita orden o no? Si lo hace, que un árbol puede ayudar. Si no lo hace, que una tabla hash, que es más rápido se podría utilizar en su lugar.

¿Tiene una gran cantidad de datos que no encaja en la memoria? Si es así que una solución basada en disco ayudarían (como BTree). Si los datos se ajustan a la memoria, que el uso de los más rápidos en memoria de disco solución y su uso sólo como dispositivo de almacenamiento (con una estructura diferente, mucho más simple).

scroll top