Jakie są przypadki użycia baz danych opartych na grafach (http://neo4j.org/)? [Zamknięte]

130

Często korzystałem z Relational DB i zdecydowałem się na inne dostępne typy.

Ten konkretny produkt wygląda dobrze i obiecująco: http://neo4j.org/

Czy ktoś korzystał z graficznych baz danych? Jakie są zalety i wady z perspektywy użyteczności?

Czy korzystałeś z nich w środowisku produkcyjnym? Jaki wymóg skłonił cię do ich użycia?

Khangharoth
źródło
Neo4j ma obecnie różne zastosowania w międzynarodowych firmach. Neo Technology ma kilka oficjalnych
Chirag Maliwal

Odpowiedzi:

188

W poprzedniej pracy korzystałem z graficznej bazy danych. Nie używaliśmy neo4j, to była wewnętrzna rzecz zbudowana na bazie Berkeley DB, ale była podobna. Był używany w produkcji (nadal jest).

Powodem, dla którego użyliśmy grafowej bazy danych, było to, że dane przechowywane przez system i operacje, które system wykonywał na danych, były dokładnie słabym punktem relacyjnych baz danych i były dokładnie mocnym punktem grafowych baz danych. System musiał przechowywać kolekcje obiektów, które nie mają ustalonego schematu i są połączone ze sobą relacjami. Aby uzasadnić te dane, system musiał wykonać wiele operacji, które byłyby kilkoma przechodzeniami w bazie danych wykresów, ale byłyby to dość złożone zapytania w języku SQL.

Głównymi zaletami modelu wykresu był szybki czas rozwoju i elastyczność. Mogliśmy szybko dodać nowe funkcje bez wpływu na istniejące wdrożenia. Gdyby potencjalny klient chciał zaimportować własne dane i przeszczepić je na nasz model, zwykle mógłby to zrobić na miejscu przedstawiciel handlowy. Elastyczność pomogła również podczas projektowania nowej funkcji, chroniąc nas przed próbami wtłaczania nowych danych do sztywnego modelu danych.

Posiadanie dziwnej bazy danych pozwoliło nam zbudować wiele innych naszych dziwnych technologii, dając nam wiele sekretów, aby odróżnić nasz produkt od produktów konkurencji.

Główną wadą było to, że nie korzystaliśmy ze standardowej technologii relacyjnych baz danych, co może stanowić problem, gdy Twoi klienci są przedsiębiorczy. Nasi klienci pytaliby, dlaczego nie możemy po prostu hostować naszych danych w ich gigantycznych klastrach Oracle (nasi klienci zwykle mają duże centra danych). Jeden z członków zespołu faktycznie przepisał warstwę bazy danych, aby korzystała z Oracle (lub PostgreSQL lub MySQL), ale była nieco wolniejsza niż oryginał. Co najmniej jedno duże przedsiębiorstwo miało nawet politykę dotyczącą wyłącznie Oracle, ale na szczęście Oracle kupiło Berkeley DB. Musieliśmy także napisać wiele dodatkowych narzędzi - nie mogliśmy na przykład po prostu używać Crystal Reports.

Inną wadą naszej bazy danych grafów było to, że sami ją zbudowaliśmy, co oznaczało, że kiedy napotkaliśmy problem (zwykle ze skalowalnością), musieliśmy go rozwiązać samodzielnie. Gdybyśmy użyli relacyjnej bazy danych, sprzedawca rozwiązałby problem już dziesięć lat temu.

Jeśli tworzysz produkt dla klientów korporacyjnych, a Twoje dane pasują do modelu relacyjnego, jeśli możesz, użyj relacyjnej bazy danych. Jeśli Twoja aplikacja nie pasuje do modelu relacyjnego, ale pasuje do modelu wykresu, użyj bazy danych wykresów. Jeśli pasuje tylko do czegoś innego, użyj tego.

Jeśli Twoja aplikacja nie musi pasować do obecnej architektury blub, użyj graficznej bazy danych, CouchDB, BigTable lub czegokolwiek, co pasuje do Twojej aplikacji i uważasz, że jest fajne. Może dać ci przewagę i fajnie jest próbować nowych rzeczy.

Cokolwiek wybierzesz, staraj się nie budować silnika bazy danych samodzielnie, chyba że naprawdę lubisz budować silniki bazy danych.

Will Harris
źródło
32

Pracujemy z zespołem Neo od ponad roku i jesteśmy bardzo szczęśliwi. Modelujemy artefakty naukowe i ich relacje, co jest na miejscu dla bazy danych wykresu, i uruchamiamy algorytmy rekomendacji w sieci.

Jeśli już pracujesz w Javie, myślę, że modelowanie przy użyciu Neo4j jest bardzo proste i ma najbardziej płaską / najszybszą wydajność dla R / W spośród wszystkich innych wypróbowanych przez nas rozwiązań.

Szczerze mówiąc, ciężko jest mi nie myśleć w kategoriach wykresu / sieci, ponieważ jest to o wiele łatwiejsze niż projektowanie zawiłych struktur tabel do przechowywania właściwości i relacji obiektów.

Mając to na uwadze, przechowujemy pewne informacje w MySQL po prostu dlatego, że stronie biznesowej łatwiej jest uruchamiać szybkie zapytania SQL. Aby wykonać te same funkcje z Neo, musielibyśmy napisać kod, na który po prostu nie mamy teraz wystarczającej przepustowości. Jak tylko to zrobimy, przenoszę wszystkie te dane do Neo!

Powodzenia.

DataRiot
źródło
1
czy możesz mi powiedzieć, jakie informacje przechowujesz w MySQL? Mam zamiar utworzyć nową społeczność, czy mogę przechowywać wszystkie „zwykłe” informacje, takie jak nazwa użytkownika, hasło, imię i nazwisko itd. W neo4j, czy nie jest to do tego odpowiednie? : o
Muqito
3
Możesz absolutnie przechowywać wszystkie te informacje w Neo. Zbudowałem kilka systemów, w których wszystkie informacje o koncie są na wykresie. Informacje, które zwykle przechowuję poza wykresem, to duże ilości danych szeregów czasowych, które należy przeszukiwać w celu raportowania.
DataRiot
1
Jeśli pracujesz w stosie .Net / Microsoft, Neo4jCLient działa dobrze.
Manuel Hernandez
23

Dwa punkty:

Po pierwsze, na danych, z którymi pracowałem przez ostatnie 5 lat w SQL Server, niedawno trafiłem na ścianę skalowalności z SQL dla typów zapytań, które musimy uruchamiać (zagnieżdżone relacje ... wiesz ... wykresy ). Bawiłem się neo4j i moje czasy wyszukiwania są o kilka rzędów wielkości szybsze, gdy potrzebuję tego rodzaju wyszukiwania.

Po drugie, do tego stopnia, że ​​graficzne bazy danych są przestarzałe. Yyy ... nie. Na początku, gdy ludzie próbowali dowiedzieć się, jak efektywnie przechowywać i wyszukiwać dane, tworzyli i bawili się modelami baz danych w stylu wykresów i sieci. Zostały one zaprojektowane tak, aby model fizyczny odzwierciedlał model logiczny, więc ich wydajność nie była tak duża. Ten typ struktury danych był dobry w przypadku danych częściowo ustrukturyzowanych, ale nie był tak dobry w przypadku gęstych danych strukturalnych. Tak więc ten gość z IBM o imieniu Codd badał efektywne sposoby porządkowania i przechowywania ustrukturyzowanych danych i wpadł na pomysł stworzenia modelu relacyjnej bazy danych. I było dobrze, a ludzie byli szczęśliwi.

Co my tu mamy? Dwa narzędzia do dwóch różnych celów. Grafowe modele baz danych są bardzo dobre do reprezentowania danych częściowo ustrukturyzowanych i relacji między jednostkami (które mogą istnieć lub nie). Relacyjne bazy danych są dobre dla danych ustrukturyzowanych, które mają bardzo statyczny schemat i gdzie głębokości złączeń nie są zbyt głębokie. Jedna jest dobra dla jednego rodzaju danych, druga jest dobra dla innych rodzajów danych.

Aby wymyślić to zdanie, nie ma Srebrnej Kuli. Bardzo krótkowzroczne jest stwierdzenie, że modele baz danych wykresów są nieaktualne, a korzystanie z nich oznacza 40 lat postępu. To tak, jakby powiedzieć, że używanie C oznacza rezygnację z całego postępu technologicznego, przez który przeszliśmy, aby uzyskać takie rzeczy, jak Java i C #. To nie jest prawda. C to narzędzie potrzebne do niektórych zadań. A Java to narzędzie do innych zadań.

Turbo
źródło
15

Używam MySQL od lat do zarządzania danymi inżynieryjnymi i działa dobrze, ale jednym z problemów, które mieliśmy (ale nie zdawaliśmy sobie sprawy, że mamy) było to, że zawsze musieliśmy zaplanować schemat z góry. Innym problemem, o którym wiedzieliśmy, było mapowanie danych do obiektów domeny iz powrotem.

Teraz właśnie zaczęliśmy wypróbowywać neo4j i wygląda na to, że rozwiązuje on oba problemy. Możliwość dodawania różnych właściwości do każdego węzła (i relacji) pozwoliła nam przemyśleć całe nasze podejście do danych. To jest jak języki dynamiczne kontra statyczne (Ruby kontra Java), ale dla baz danych. Budowanie modelu danych w bazie danych może odbywać się w znacznie bardziej zwinny i dynamiczny sposób, co znacznie upraszcza nasz kod.

A ponieważ model obiektowy w kodzie jest ogólnie strukturą grafową, mapowanie z bazy danych jest również prostsze, zawiera mniej kodu, a co za tym idzie mniej błędów.

Jako dodatkowy bonus, nasz początkowy kod prototypowy do ładowania naszych danych do neo4j działa szybciej niż poprzednia wersja MySQL. Nie mam stałych liczb na ten temat (jeszcze), ale to była fajna dodatkowa funkcja.

Ostatecznie jednak wybór prawdopodobnie powinien opierać się głównie na naturze modelu domeny. Czy lepiej odwzorowuje tabele lub wykresy? Zdecyduj, wykonując prototypy, załaduj dane i baw się nimi. Użyj neoclipse, aby przyjrzeć się różnym widokom danych. Gdy już to zrobisz, miejmy nadzieję, że wiesz, czy masz coś dobrego, czy nie.

Craig Taverner
źródło
1
Na razie nie mam żadnych wymagań biznesowych, aby korzystać z Graphic Db, może to być spowodowane tym, że nie myślę o niczym innym niż RDBMS. Możliwe, że przez większość czasu próbuję kołek kwadratowy w okrągłym otworze. Db oparte na grafach jest dla mnie zupełnie nowym perspektywą. Użyłem platformy trwałości opartej na Scenegraph (Java3D, Xith3D), ale to było do przechowywania aplikacji opartej na grafice. Cała ta rozmowa daje mi nowe spojrzenie. Dowolna referencja aplikacji, która korzysta z bazy danych opartej na wykresie, że widzę rzeczy w akcji!
Khangharoth
4

Buduję intranet w mojej firmie.

Interesuje mnie zrozumienie, jak ładować dane, które były przechowywane w tabelach (Oracle, MySQL, SQL Server, Excel, Access, różne listy losowe) i ładować je do Neo4J lub innej bazy danych grafów. W szczególności, co się dzieje, gdy wspólne dane nakładają się na istniejące już w systemie.

Tak, wiem, że niektóre dane najlepiej modeluje się w RDBMS, ale drażni mnie ten pomysł, że kiedy trzeba nałożyć kilka różnych tabel, model wykresu jest lepszy niż struktura tabeli.

Na przykład pracuję w środowisku produkcyjnym. Istnieje duży projekt, nad którym pracujemy i ze względu na złożoność, każdy dział utworzył oddzielny arkusz kalkulacyjny Excel, który ma hierarchię BOM (zestawienie komponentów) w kolumnie po lewej stronie, a następnie kilka kolumn notatek i kontroli wykonanych przez poszczególne osoby kto zrobił te arkusze.

Tak więc jednym z problemów jest połączenie wszystkich tych notatek w jeden „widok”, aby ktoś mógł zobaczyć wszystkie kwestie, które należy rozwiązać w określonej części.

Drugi problem polega na tym, że arkusz kalkulacyjny programu Excel nie radzi sobie z przedstawieniem hierarchicznej LM, gdy wspólny komponent jest używany w więcej niż jednym podzespole. Czyli jeśli ktoś napisze notatkę o przekaźniku P34 w podzespole zapłonu to ten sam komentarz należy skojarzyć z przekaźnikami P34 zastosowanymi w podzespole sterownika silnika. Nie wystąpi to w arkuszu kalkulacyjnym programu Excel.

W intranecie firmowym chcę mieć możliwość łatwego wyszukiwania wszystkiego. Takie jak dane związane z numerem części, strukturą BOM, numerem telefonu, adresem e-mail, polityką firmy lub procedurą. Chcę nawet rozszerzyć to, aby zarządzać zasobami sprzętu komputerowego i zainstalowanym oprogramowaniem.

Wyobrażam sobie, że kiedy sieć informacyjna zacznie się zapełniać, można zacząć robić fajne przemierzania, takie jak „Chcę napisać e-maila do wszystkich pracujących nad projektem XYZ”. Osoby zostaną skojarzone z projektem, ponieważ zostaną otagowane jako osoby tworzące i modyfikujące dane w projekcie XYZ. Więc używając projektu XYZ jako klucza wyszukiwania, zostanie utworzony ogromny zestaw zawierający wszystko, co jest związane z projektem XYZ. Zawiera linki do osób, które zbudowały projekt XYZ. Linki osób będą łączyć się z ich adresami e-mail. Tak więc przez ich zaangażowanie w projekt XYZ zostaną uwzględnieni w moim e-mailu. Jest to wyraźne przeciwieństwo sytuacji, w której sekretarz próbuje prowadzić listę osób pracujących nad projektem. Generujemy wiele list. Spędzamy dużo czasu na utrzymywaniu list i upewnianiu się, że są one aktualne.

Kolejne fajne przeglądanie może raportować wszystkie komputery, na których jest zainstalowane określone oprogramowanie, według wersji. Ten raport może zostać użyty do wygenerowania zadań w celu usunięcia dodatkowych kopii starego oprogramowania i zaktualizowania osób, które muszą mieć najnowszą kopię. Byłoby również przydatne do śledzenia licencji.

Paul Bock
źródło
@Paul Bock: Myślę, że naprawdę dobrze byłoby rozwiązać tego rodzaju problemy za pomocą neo4j. Jeśli dołączysz do listy mailingowej, jestem pewien, że możesz uzyskać wiele informacji od społeczności: neo4j.org/community/list
nawroth
2
Nie rozumiem, jak nie można tego zrobić w relacyjnej bazie danych. Czy coś mi brakuje?
Andrew Harry,
5
Nie sądzę, aby jakakolwiek dyskusja na temat „NoSQL” koncentrowała się na tym, czego nie można zrobić z relacyjnymi bazami danych, chyba że wymaga skalowania. Myślę, że często (przynajmniej dla mnie tak jest) o tym, jak naturalne jest rozwiązanie, jak skutecznie rozwiązuje twoje problemy itp.
Eelco
4

Oto dobry artykuł, który mówi o potrzebach, które wypełniają nierelacyjne bazy danych: http://www.readwriteweb.com/enterprise/2009/02/is-the-relational-database-doomed.php

Robi dobrą robotę, wskazując (poza nazwą), że relacyjne bazy danych nie są wadliwe ani błędne, po prostu w dzisiejszych czasach ludzie zaczynają przetwarzać coraz więcej danych w głównym oprogramowaniu i witrynach internetowych, a relacyjne bazy danych po prostu nie będą skalowane dla tych potrzeb.

Angular University
źródło
3

może być trochę spóźniony, ale rośnie liczba projektów wykorzystujących Neo4j, te bardziej znane są wymienione na Neo4j . Również NeoTechnology, firma stojąca za Neo4j, ma kilka odniesień na stronie swoich klientów

Uwaga: jestem częścią zespołu Neo4j

Peter Neubauer
źródło