nie może odtworzyć / zweryfikować twierdzeń dotyczących wydajności w bazach danych wykresów i neo4j w książkach akcji

AKTUALIZACJA Zadałem pytanie kontrolne zawierające zaktualizowane skrypty i jaśniejsze ustawieniawydajność neo4j w porównaniu z mysql (jak można ją poprawić?). Proszę kontynuować./AKTUALIZACJA

Mam pewne problemy z weryfikacją oświadczeń o wydajności przedstawionych w książce „wykresy graficzne” (strona 20) iw neo4j (rozdział 1).

Aby zweryfikować te twierdzenia, utworzyłem przykładowy zestaw 100 000 wpisów „osób” z 50 „przyjaciółmi” i próbowałem zapytać np. O przyjaciele 4 podskakują. Użyłem tego samego zestawu danych w mysql. Z przyjaciółmi przyjaciół powyżej 4 chmielumysql powraca w ciągu 0,93 sekundy, podczasneo4j potrzebuje 65 -75 sekund (przy powtarzających się połączeniach).

Jak mogę poprawić ten nędzny wynik i zweryfikować roszczenia zawarte w książkach?

Nieco więcej szczegółów:

Całość instaluję na i5-3570K z 16 GB pamięci RAM, używając ubuntu12.04 64bit, java w wersji „1.7.0_25” i mysql 5.5.31, neo4j-community-2.0.0-M03 (otrzymuję podobny wynik z 1.9 )

Wszystkie dane kodu / próbki można znaleźć na stroniehttps://github.com/jhb/neo4j-experiements/ (do użycia z 2.0.0). Otrzymane przykładowe dane w różnych formatach można znaleźć na stroniehttps://github.com/jhb/neo4j-testdata.

Do korzystania ze skryptów potrzebny jest python z zainstalowanym mysql-python, request i simplejson.

zbiór danych jest tworzony za pomocą friendsdata.py i przechowywany w grupie przyjaciółprzyjaciele.pickle zostaną zaimportowane do neo4j za pomocą import_friends_neo4j.pyprzyjaciele.pickle zostaną zaimportowane do mysql przy użyciu import_friends_mysql.pyDodaje indeksy na t_user_friend. * W mysqlDodałem „utwórz indeks na: node (noscenda_name) w neo4j

Aby ułatwić życie przyjaciołom. *. Bz2 zawiera instrukcje sql i cypher do tworzenia tych zestawów danych w mysql i neo4j 2.0 M3.

Wydajność MySQL

Najpierw rozgrzewam mysql, wysyłając zapytanie:

select count(distinct name) from t_user;
select count(distinct name) from t_user;

Potem, dla prawdziwego wysiłku, jaki robię

python query_friends_mysql.py 4 10

Spowoduje to utworzenie następującej instrukcji sql (ze zmianą t_user.names):

select 
    count(*)
from
    t_user,
    t_user_friend as uf1, 
    t_user_friend as uf2, 
    t_user_friend as uf3, 
    t_user_friend as uf4
where
    t_user.name='person8601' and 
    t_user.id = uf1.user_1 and
    uf1.user_2 = uf2.user_1 and
    uf2.user_2 = uf3.user_1 and
    uf3.user_2 = uf4.user_1;

i powtarza to 4-krotne zapytanie 10 razy. Zapytania wymagają po około 0,95 sek. Mysql jest skonfigurowany do używania klucza key_buffer 4G.

testowanie wydajności neo4j

Zmodyfikowałem neo4j.properties:

neostore.nodestore.db.mapped_memory=25M
neostore.relationshipstore.db.mapped_memory=250M

i neo4j-wrapper.conf:

wrapper.java.initmemory=2048
wrapper.java.maxmemory=8192

Aby rozgrzać neo4j, robię

start n=node(*) return count(n.noscenda_name);
start r=relationship(*) return count(r);

Następnie zaczynam używać transakcyjnego punktu końcowego http (ale otrzymuję te same wyniki przy użyciu powłoki neo4j).

Wciąż się rozgrzewam, biegnę

./bin/python query_friends_neo4j.py 3 10

Spowoduje to utworzenie zapytania o formularz (z różnymi identyfikatorami osób):

{"statement": "match n:node-[r*3..3]->m:node where n.noscenda_name={target} return count(r);", "parameters": {"target": "person3089"}

po siódmym połączeniu każde połączenie potrzebuje około 0,7-0,8 sek.

Teraz na prawdziwą rzecz (4 przeskoki)

./bin/python query_friends_neo4j.py 4 10

tworzenie

{"statement": "match n:node-[r*4..4]->m:node where n.noscenda_name={target} return count(r);", "parameters": {"target": "person3089"}

a każde połączenie trwa od 65 do 75 sekund.

Otwarte pytania / myśli

Naprawdę chciałbym, aby roszczenia w książkach były odtwarzalne i poprawne, a neo4j szybciej niż mysql zamiast wielkości wolniej.

Ale nie wiem, co robię źle ... :-(

Moje wielkie nadzieje to:

Nie zrobiłem poprawnie ustawień pamięci dla neo4jZapytanie, którego używam dla neo4j jest całkowicie błędne

Wszelkie sugestie dotyczące szybkości działania neo4j są mile widziane.

Wielkie dzięki,

Joerg

questionAnswers(2)

yourAnswerToTheQuestion