¿Cuál es la técnica más la indexación de datos eficiente
-
16-10-2019 - |
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.
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.
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).