2016-01-31 16 views
7

Chcę zbudować sieć społecznościową. (Np. Osoby mają inne osoby jako przyjaciół) i domyślam się, że baza danych wykresów lepiej poradziłaby sobie z klasyczną bazą danych. Chciałbym przechowywać atrybuty na krawędziach i węzłach. Mogą to być json, ale nie obchodzi mnie, czy DB rozumie JSON.Neo4j vs. ArangoDB podczas modelowania sieci społecznościowej

ArangoDB może również przechowywać dokumenty, a Neo4J jest "tylko" graficzną bazą danych.

Chciałbym mieć węzeł użytkownika dla każdej osoby 2 np.

Użytkownicy - [nazwa użytkownika] -> człowiek
Użytkownicy - [id] -> osoba

I istnieje potrzeba, że ​​istnieje indeks na krawędziach. Nie chcę innej bazy danych, więc byłoby miło przechowywać obraz (tablicę bajtów) w bazie danych, może nawet różne rozmiary dla każdego obrazu/wideo, niezależnie. Również posty i takie powinny być przechowywane w bazie danych.

To, co otrzymałem, to że Neo4j lepiej obsługuje język zapytań niezależny od producenta, ale wydaje mi się, że łatwiej i lepiej nauczyć się standardu producenta. Wszelkie zalecenia, które systemy zarządzania bazami danych są lepiej dostosowane? Będę pisać kod w Javie (i trochę Scali).

+0

Cypher staje się otwartym wysiłkiem, zobacz opencypher.org –

Odpowiedz

22

Zarówno ArangoDB i Neo4j są zdolne do wykonywania pracy masz na myśli. Oba projekty mają niesamowitą dokumentację, a uzyskanie odpowiedzi na którekolwiek z nich jest łatwe. Oba mogą być używane z Java (chociaż Neo4j can be embedded).

Jedną z rzeczy, które mogą pomóc w podejmowaniu decyzji jest rozpoznanie, że wiele baz danych NoSQL rozwiązuje znacznie węższy problem, niż ludzie doceniają.

Sarah Mei napisała epic blog post about MongoDB, korzystając z przykładu z danymi dotyczącymi programów telewizyjnych. Z podsumowania:

Idealny przypadek użycia MongoDB jest jeszcze węższy niż nasze dane telewizyjne. Jedyna rzecz, w której jest dobra, to przechowywanie dowolnych fragmentów JSON.

wierzę, że Neo4j rozwiązuje podobnie wąski problem, o czym świadczy jak powszechne jest stosowanie Neo4j alongsidesome other przechowywania danych.

Nie wiem, czy przechowywanie obrazu lub danych wideo jest świetnym pomysłem w ArangoDB lub Neo4j.Chciałbym go przechowywać na jakimś innym serwerze (takim jak S3) i zapisać adres URL do tego pliku w Neo4j/Arango.

Chociaż prawdą jest, że it is possible to create queries that only a graph database can answer, wydajność bazy danych wykresów na każde zapytanie varies wildly i może dać pewne zaskakujące wyniki. Na przykład, oto a paper from the International Journal of Computer Science and Information Technologies robi porównanie Neo4j vs MySQL, Vertica i VoltDB z zapytaniami będzie można zakładać Neo4j byłoby niesamowite w: Performance comparison

Chodzi o to, że „społecznościowy” nie oznacza automatycznie wyższość, lub nawet wykorzystanie bazy danych wykresów (szczególnie od GraphQL i Falcor).

Aby odpowiedzieć na pytanie dotyczące języków zapytań. Nie ma standardowego języka dla graficznych baz danych.

AQL to język zapytań zapewniający ujednolicony interfejs do pracy z danymi klucza/wartości, dokumentu i wykresu.

Cypher to język zapytań graficznych.

Badwolf Query Language to język inspirowany językiem SPARQL dla wykresów czasowych.

Języki te istnieją, ponieważ dotyczą różnych problemów. Bazy danych, które je obsługują, również rozwiązują różne problemy.

Neo4j ma an example z "wielojęzycznej wytrwałość" na swojej stronie internetowej:

Using neo4j redis and mongo together

myślę że jest problem, że ArangoDB i AQL jest się rozwiązać, hipoteza jest, że to jest możliwe, aby rozwiązać że nie jest gorszy od specjalistów takich jak Neo4j. Do tej pory wygląda na to, że są might be right.

1

Nie rozumiem, dlaczego chcesz modelować nazwę i identyfikator oddzielnie od użytkownika? Są to po prostu właściwości należące do użytkownika. Wolisz zamodelować połączenia z innymi użytkownikami, posty lub podobieństwa itp. Jako łącza.

np ..

(:User {name:"Florian",id:12})-[:KNOWS]->(:User {name:"Michael",id:3}) 

Czego potrzebujesz indeksu na relacje dla? Neo4j może nie być optymalny do przechowywania obrazów, ale ludzie robili to w przeszłości, ale filmy niestety nie.

Można użyć Neo4j zarówno z Java i Scala, zobacz http://neo4j.com/developer/language-guides

HTH

+0

Witam, ideą tego było posiadanie użytkowników, którzy nie mają związku ze wszystkimi (n) użytkownikami. Maksymalna liczba (m)> n. Jeśli n jest duże, nadal potrzebuję szybko uzyskać dostęp do węzła użytkowników. Nie chcę, żeby była złożona, chcę mieć złożoność liczby cyfr m. To samo dotyczy nazw użytkowników. Indeks o strukturze drzewa pasowałby idealnie. Nie wiem, jak szybko będzie twoje zapytanie, jeśli masz milion użytkowników. Mam nadzieję, że to wyjaśnienie wydaje się rozsądne. –

Powiązane problemy