Jak zintegrować Neo4j z innymi bazami danych (RDBMS) z użyciem JDBC

W wielu projektach zachodzi potrzeba integracji z różnymi typami baz danych. Neo4j potrafi połączyć się z relacyjnymi bazami danych by pobrać potrzebne dane lub rozszerzyć istniejący modeli danych. Dzięki apoc.load.jdbc możesz uzyskać dostęp do dowolnej bazy danych, która udostępnia sterownik JDBC, i wykonywać zapytania, których wyniki są przekształcane w strumienie wierszy. Te wiersze można następnie wykorzystać do aktualizacji lub tworzenia struktur grafów.

Konfiguracja środowiska

By używać połączenia JDBC niezbędna jest instalacja biblioteki APOC. Zobacz ten artykuł by dowiedzieć się więcej. Procedura JDBC znajduje się w wersji 'full' biblioteki APOC. Pobierz ją i skopiuj do katalogu 'plugins'. Potrzebujesz też konektor JDBC do MySQL który pobierzesz ze strony. Wgraj ten plik do katalogu 'plugins'. Po wgraniu plików, ponownie uruchom Neo4j.

Test połączenia i przykładowe komendy

Zakładając że Twoja baza MySQL znajduje się na lokalnym komputerze, poniższe zapytanie pobierze z bazy 'test', tabeli 'clients' numer klienta:

CALL apoc.load.jdbc('jdbc:mysql://localhost:3306/test?user=root&password=password','select * from clients where name=\'client2\'') YIELD row
RETURN row.customer_number

Inna wersja zapytania; pobranie szczegółów klienta z bazy MySQL i utworzenie node w bazie Neo4j:

CALL apoc.load.jdbc('jdbc:mysql://localhost:3306/test?user=root&password=password','select name, customer_number from clients where name=\'client1\'') YIELD row
CREATE (n:Clients {name:row.name, customer_no:row.customer_number})

Inny przykład; ładowanie dużej ilości danych do Neo4j

CALL apoc.periodic.iterate(
  'CALL apoc.load.jdbc("jdbc:mysql://localhost:3306/northwind?user=root","company")',
  'CREATE (p:Person) SET p += value',
  { batchSize:10000, parallel:true})
RETURN batches, total