Esto es más bien más una pregunta de Lucene, pero está en el contexto de una base de datos neo4j.Indexación Neo4j (con Lucene): ¿una buena forma de organizar los "tipos" de nodos?
Tengo una base de datos que está dividida en aproximadamente 50 tipos de nodos (por lo tanto, "colecciones" o "tablas" en otros tipos de dbs). Cada uno tiene un subconjunto de propiedades que deben indizarse, algunas comparten el mismo nombre y otras no.
Al buscar, siempre quiero encontrar nodos de un tipo específico, nunca en todos los nodos.
puedo ver tres formas de organizar esta:
un índice por tipo, propiedades del mapa de forma natural a los campos de índice: índice de 'foo',
'id'='1234'
.Un índice global único, cada campo se asigna a un nombre de propiedad, para distinguir el tipo incluirlo como parte del valor (
'id'='foo:1234'
) o verificar los nodos una vez que se devuelven (espero que los duplicados sean muy raros)Un solo índice, tipo es parte del nombre del campo:
'foo.id'='1234'
.
Una vez creada, la base de datos es de sólo lectura.
¿Hay algún beneficio para uno de ellos, en términos de conveniencia, tamaño/eficiencia de caché o rendimiento?
Según tengo entendido, para la primera opción, neo4j creará un índice físico separado para cada tipo, que parece no ser óptimo. Para el tercero, termino con la mayoría de los documentos de lucene teniendo solo un pequeño subconjunto de los campos, no estoy seguro si eso afecta algo.
Tener un índice separado para cada tipo parece ser más conveniente y también más rápido, ya que el tamaño total de su índice será más pequeño. Pero me puede estar perdiendo algo. – biziclop
@biziclop: En realidad, me pareció el menos conveniente, ya que tendría que gestionar la apertura/cierre de los índices individuales. Tengo entendido que el tamaño general también será mayor (ver la respuesta de jpountz). – Dmitri
@Dimitri Bueno, obviamente el tamaño total será mayor, la pregunta es: ¿las búsquedas de todos los tipos se distribuyen de manera uniforme a tiempo? ¿O se buscan algunos tipos con mucha más frecuencia que otros? De cualquier manera, lo que haría es implementar la solución que considero más conveniente y ver si funciona bien. Si lo hace, tienes tu ganador. – biziclop