To jest bardziej właściwie pytanie Lucene, ale jest w kontekście bazy danych neo4j.Indeksowanie Neo4j (z Lucene) - dobry sposób na uporządkowanie "typów" węzłów?
Mam bazę danych, która jest podzielona na około 50 typów węzłów (więc "kolekcje" lub "tabele" w innych typach dbs). Każdy ma podzbiór właściwości, które muszą być indeksowane, niektóre mają tę samą nazwę, inne nie.
Podczas wyszukiwania zawsze chcę znaleźć węzły określonego typu, nigdy we wszystkich węzłach.
Widzę trzy sposoby organizowania tego:
jeden indeks danego rodzaju, właściwości map naturalnie do pól indeksów: indeksu 'foo',
'id'='1234'
.Pojedynczy wskaźnik globalny, każdy mapy terenowe do nazwy własności, aby odróżnić typ albo dołączyć je jako część wartości (
'id'='foo:1234'
) lub sprawdzić węzły raz oni wrócili (duplikaty Spodziewam się bardzo rzadko).Pojedynczy indeks, typ jest częścią nazwy pola:
'foo.id'='1234'
.
Po utworzeniu baza danych jest tylko do odczytu.
Czy są jakieś korzyści pod względem wygody, wydajności/wydajności pamięci podręcznej/pamięci podręcznej?
Jak rozumiem, dla pierwszej opcji neo4j utworzy osobny indeks fizyczny dla każdego typu, który wydaje się nieoptymalny. Po trzecie, kończę z większością lucene docs tylko mając mały podzbiór pól, nie jestem pewien czy to wpływa na cokolwiek.
Posiadanie osobnego indeksu dla każdego typu wydaje się wygodniejsze i szybsze, ponieważ ogólny rozmiar indeksu będzie mniejszy. Ale może czegoś brakuje. – biziclop
@biziclop: Wydawało mi się to najmniej wygodne dla mnie, ponieważ musiałbym zarządzać otwieraniem/zamykaniem poszczególnych indeksów. Rozumiem, że ogólny rozmiar również będzie większy (patrz odpowiedź jpountza). – Dmitri
@Dimitri Cóż, oczywiście ogólny rozmiar będzie większy, pytanie brzmi: czy wyszukuje wszystkie typy równo rozłożone w czasie? Czy niektóre typy są wyszukiwane dużo częściej niż inne? Tak czy inaczej, chciałbym wdrożyć rozwiązanie, które uważam za najwygodniejsze i sprawdzić, czy działa dobrze. Jeśli tak, masz swojego zwycięzcę. – biziclop