To jest kontynuacja do can't reproduce/verify the performance claims in graph databases and neo4j in action books. Zaktualizowałem konfigurację i testy, i nie chcę zbytnio zmieniać pierwotnego pytania.Wydajność neo4j w porównaniu do mysql (jak to poprawić?)
Cała historia (w tym skrypty itp) jest https://baach.de/Members/jhb/neo4j-performance-compared-to-mysql
Krótka wersja: podczas próby zweryfikowania roszczeń wydajności wykonanych w książce „Graph Database” doszedłem do następujących wyników (zapytania do losowy zbiór danych zawierający N ludzie, każdy z 50 znajomych):
My results for 100k people
depth neo4j mysql python
1 0.010 0.000 0.000
2 0.018 0.001 0.000
3 0.538 0.072 0.009
4 22.544 3.600 0.330
5 1269.942 180.143 0.758
"*": pojedynczy uruchomić tylko
My results for 1 million people
depth neo4j mysql python
1 0.010 0.000 0.000
2 0.018 0.002 0.000
3 0.689 0.082 0.012
4 30.057 5.598 1.079
5 1441.397* 300.000 9.791
"*": jednym razem tylko
Korzystanie 1.9.2 na Ubuntu 64bit mam neo4j.properties konfiguracji z tych wartości:
neostore.nodestore.db.mapped_memory=250M
neostore.relationshipstore.db.mapped_memory=2048M
i neo4j-wrapper.conf z:
wrapper.java.initmemory=1024
wrapper.java.maxmemory=8192
Moje zapytanie do neo4j wygląda to (przy użyciu API odpoczynek)
start person=node:node_auto_index(noscenda_name="person123") match (person)-[:friend]->()-[:friend]->(friend) return count(distinct friend);
Node_auto_index ma miejsce, oczywiście
Czy jest coś, co mogę zrobić, aby przyspieszyć działanie neo4j (aby być szybszym od mysql)?
A także jest another benchmark in Stackoverflow z tym samym problemem.
Niestety, scenariusz w akcji neo4j to "zwróć wszystkich przyjaciół znajomych ...", nie znajdując ścieżki między przyjaciółmi. Odnoszę się do pierwszego rozdziału Neo4j w akcji. Instrukcje sql dotyczą wyszukiwania wszystkich znajomych, podobnie jak wyniki w tabelach (rekordy zwrócone). I ważniejsze: absolutnie nie mogę odtworzyć 3 sekund. Zapytanie np. 'start person = node (100) match (person) - [: friend] ->() - [: friend] ->() - [: friend] ->() - [: friend] -> (friend) return count (przyjaciela); 'zajmuje 28,9 sekundy. Bardzo dziwne ... –
I tak: na zbiorze danych 1m ścieżka między danym A i B trwa około 2390 ms na mysql i tylko około 25 ms na neo4j. –
aka neo4j pokazują swoją moc, jeśli chodzi o relacje zapytań (ścieżki) zamiast węzłów, prawda? –