Odpowiedź jest niestety: Twoje zdanie jest całkowicie poprawne w każdym punkcie. Musisz przechowywać węzły (wierzchołki) w jednej tabeli oraz krawędzie odwołujące się do węzła FromNode i ToNode, aby przekonwertować strukturę danych wykresu na relacyjną strukturę danych. I masz również rację, że kończy się to dużą liczbą odnośników, ponieważ nie jesteś w stanie podzielić go na podgrafy, które mogą być natychmiast zapytane. Musisz przejść od węzła do krawędzi do węzła do krawędzi do węzła ... i tak dalej (rekurencyjnie, podczas gdy SQL działa z zestawami).
Chodzi o to ...
relacyjny, wykres zorientowany, obiektowe, Dokument oparte są różne typy struktur danych, które spełniają różne wymagania. O tym wszystkim chodzi i dlaczego powstało tak wiele różnych baz danych NoSQL (większość z nich to proste sklepy z dokumentami), ponieważ po prostu nie ma sensu organizować dużych danych w sposób relacyjny.
Alternatywa 1 - wykres zorientowany w bazie
Ale są też zorientowany wykres baz danych NoSQL, które sprawiają, że model danych wykresu pierwszej klasy obywatel jak OrientDB której jestem zabawy z odrobiną na chwilę. Zaletą jest to, że chociaż dane są nadal widoczne w formie wykresu, nadal można go używać w sposób relacyjny lub nawet zorientowany obiektowo lub dokumentowo (np. Za pomocą zwykłego zapytania SQL). Niemniej jednak, Traversing the graph jest optymalnym sposobem na uzyskanie danych z tego na pewno.
Alternative 2 - praca z wykresami w pamięci
Jeśli chodzi o szybki routing, ramy routingu jak Graphhopper budować graf pełny (miliardy węzłów) wewnątrz pamięci. Ponieważ Graphhopper wykorzystuje implementację MemoryMapped w swoim GraphStore, która działa nawet na urządzeniach z Androidem z tylko kilkoma MB pamięci. Kompletny wykres jest odczytywany z bazy danych na pamięć podczas uruchamiania, a następnie odbywa się tam rutowanie, więc nie trzeba sprawdzać bazy danych.
W celu udzielenia cennej porady potrzebuję więcej informacji z Twojej strony. Ile węzłów i ile relacji mówimy? –
Cóż, powiedziałbym, miliardy węzłów. Tak jak powiedziałem, jest to w większości konceptualna, ale jestem ciekawa jak skalować na wiele rekordów. Mam na myśli bardzo duże wykresy. –
Nie open source, ale dokładnie to, czego szukasz: nowy Aster 6.0 jest wyposażony w silnik graficzny w relacyjnej bazie danych - o nazwie SQL-GR i ma na celu wykorzystanie istniejących i nowych funkcji na wykresach przechowywanych w tabelach relacyjnych (w Aster): reprezentowane za pomocą tabeli węzłów i tabeli krawędzi. – topchef