Neo4j is een schemaloze open-sourcedatabase die data opslaat in zogenaamde grafen (‘graphs’) in plaats van tabellen zoals bij een relationele database. Voordelen zijn een snellere ontwikkelingscyclus en veel snellere zoekprestaties.

In de wiskunde is een graaf of graph een verzameling knopen of nodes (soms ook vertices genoemd) die verbonden zijn door zijden of edges. De Gra-fentheorie bestudeert de eigenschappen van dergelijke grafen. Eén van de oudste problemen uit de grafentheorie, namelijk de Euler-graaf, werd overigens al in het begin van de 18de eeuw opgelost door de wiskundige Leonard Euler en staat bekend als de ‘Zeven bruggen van Koningsbergen’. Wikipedia heeft er een goed artikel over en ook Vanished Kingdoms, de recente bestseller van Norman Davies, bevat er een interessant hoofdstuk over. (In het Nederlands vertaald als Vergeten Koninkrijken; nog geen Franse vertaling.) Heel wat interessante computeralgoritmes zijn gebaseerd op deze tak van de wiskunde. Het is de wetenschap achter toepassingen zoals internetzoekmachines genre Bing en Google, sociale zoekmachines genre Facebook Graph Search, navigatiesystemen zoals TomTom en NOSQL (‘Not Only SQL’)-databases zoals het hier besproken Neo4j. Dankzij de Euler-graaf en andere grafen is het onder andere mogelijk om de kortste en dus snelste weg te berekenen tussen twee of meer knopen. Het verklaart bijvoorbeeld waarom Google Search uit een gigantische hoop ongestructureerde webdata binnen enkele milliseconden min of meer de gezochte informatie opduikelt. Het is een treffende illustratie van wat er met deze technologie allemaal mogelijk is.

Mainframes

Neo4j brengt diezelfde techniek binnen ieders bereik in de vorm van zijn algemeen inzetbare database voor netwerkgeoriënteerde data die voldoet aan de ACID (Atomicity, Consistency, Isolation, Durability)-criteria voor database-transacties. Een universele grafendatabase zoals Neo4j verhelpt het complexiteitsprobleem van relationele databasesystemen (rdbms). Grafendatabases zijn minder schaalbaar dan andere NOSQL-databases, maar ze zijn veel beter in het behandelen van complexiteit. Neo4j kan veel sneller dan een relationele database meerdere datapunten met elkaar verbinden, tot wel duizend keer sneller. Rbms’en zijn daarentegen sneller voor het uitvoeren van steeds dezelfde zoekopdrachten op grote hoeveelheden lijst-georiënteerde gegevens. Graphs zijn trouwens helemaal niet nieuw in de databasewereld: de eerste hiërarchische of navigational databases (IBM IMS, CDS IDMS etc.) zoals die gebruikt werden door mainframes waren in essentie gra-fendatabases. Maar door het succes van Oracle en andere rdbms’en werd deze technologie bijna vergeten, totdat nieuwe computertoepassingen zoals navigatie, wereldwijde web en sociale netwerken ze opnieuw leven inblies.

Zonder schema

Neo4j is een schemaloze database. U moet dus niet zoals bij een rdbms vooraf een databaseschema definiëren. Die vrijheid brengt natuurlijk een grote verantwoordelijkheid met zich mee. Het mag geen excuus zijn voor een slecht of ontbrekend database-ontwerp of voor ‘cowboy coding’. Maar in deze tijden van continue uitrol en agile-softwareontwikkeling is het vaak moeilijk om vooraf een volledig relationeel dataschema te ontwerpen. Bij Neo4j heeft elke node (elk stukje data) een verbinding met een andere node in een bepaalde richting en met een start- en een eindpunt. Zowel de nodes (gegevens) als de edges (relaties) hebben eigenschappen. Ook kan men eigenschappen definiëren op nodes en relaties tegelijk (‘properties on both’). In een grafendatabase heeft niet elke relatie hetzelfde gewicht, dit in tegenstelling tot in een relationele database. Als u een node verwijdert, verdwijnt ook de relatie. Hangende of dangeling relaties zijn immers niet toegelaten in een grafendatabase. Maar verder zijn er weinig of geen beperkingen. Neo4j slaat de data met relaties en al op, wat belangrijk is voor de prestaties. Een zoekopdracht werkt niet met indexes, maar is eerder vergelijkbaar met een wandeling over een netwerk van nodes en relaties. U definieert alleen het startpunt van die datawandeling. Het springen van datapunt naar datapunt verloopt enorm snel: rond de 2 miljoen sprongen of hops per seconde zijn op een doorsneecomputer perfect haalbaar. Hops zijn in grafendatabase het equivalent van zogenaamde joins in een rdbms. Maar terwijl iedereen weet dat joins duur zijn in een rdbms, zijn hops juist erg goedkoop in een graaf.

Cypher

Een integraal onderdeel van Neo4j is de speciaal ontwikkelde zoektaal Cypher. Bijzonder is dat dit geen imperatieve, maar net zoals SQL een declaratieve query-taal is. U specificeert een startpunt, omschrijft wat u wil vinden en de database zoekt het zelf voor u uit. Een voorbeeld van een dergelijke query kan bijvoorbeeld zijn: ‘Vind het kortste pad tussen twee datapunten’. Een ander voorbeeld kan zijn: ‘Vind alle datapunten met die en die gemeenschappelijke kenmerken.’ De bevragingssnelheid is niet afhankelijk van de omvang van de dataset, maar wel van de grootte van de resultatenset. Niet alle gegevens zijn immers met elkaar verbonden, dus Neo4j schaalt zeer goed voor query’s die peilen naar vermoede of onvermoede verbanden tussen gegevens.

Cypher is de eerste declaratieve query-taal voor grafendatabases. Hoewel het dus geen SQL is, zullen gebruikers die SQL gewend zijn er snel mee aan de slag kunnen omdat de schrijfwijze grotendeels overeenkomt. SQL kan omwille van het grondig verschillende datamodel echter niet zomaar gebruikt worden in combinatie met een grafendatabase. Zo kan je in SQL geen paden tussen datanodes beschrijven en die zijn net cruciaal in een grafendatabase. Een snelle introductie tot Cypher vindt u in deze slides: tinyurl.com/pze8pzk.

Praktijk

Neo4j is verkrijgbaar in drie edities: Community, Advanced (met monitoring) en Enterprise (met 24×7 support en clustering). De Community editie is volledig gratis. De andere kosten geld, maar zijn gratis beschikbaar voor test- en evaluatiedoeleinden. Neo Technology huldigt een ‘fair trade software licensing’-model: commerciële gebruikers moeten een commerciële licentie nemen en voor alle anderen is de software gratis beschikbaar. De software draait in een beveiligde JVM (Java Virtual Machine) op Linux, Windows en Mac OS.X. Na installatie van de kernel is de grafische console bruikbaar in gelijk welke recente webbrowser. Er is uiteraard ook een tekstconsole voor ervaren gebruikers. Neo4j wordt op gangbare cloudplatformen ondersteund en heeft ondersteuning voor de meest voorkomende ontwikkelingstalen en -omgevingen. Onder andere Adobe en Cisco zijn grote internationale klanten van Neo Technology. Bij ons heeft Neo Technology projecten lopen bij Janssen Pharmaceutica, Crop Design (BASF Plant Sciences) en de Universiteit van Gent. De Belgische Neo4j gebruikers-community komt ongeveer om de twee maanden samen. Details daarover vindt u op www.meetup.com/ graphdb-belgium.

CONCLUSIE

Als u geen tijd hebt om zelf te experimenteren met Neo4j, maar toch geïntegreerd bent door het concept van een grafendatabase dan is een bezoek aan Yasiv.com aangewezen. Deze aanbevelingswebsite tovert een grafenvoorstelling van de Amazon Recommendations-gegevens op uw scherm. Het is een treffende illustratie van wat met deze technologie allemaal mogelijk is.

INFO

PRODUCT: Neo4j NOSQL graph database 1.9, www.neo4j.org

PRODUCENT: Neo Technology, Inc., neotechnology.com

PRIJZEN: open source; Neo4j Community: gratis met online community support; Neo4j Advanced: a6000/jaar met e-mail support en advanced monitoring; Neo4j Enterprise: a24.000 met high availability, clustering, massive read scaling en 7×24 support (speciale prijzen voor start-ups: contacteer Neo Technology). Alle versies zijn gratis beschikbaar voor test- en evaluatiedoeleinden.

SYSTEEMVEREISTEN: Linux Debian, Mac OS X of Windows. Details: www.neo4j.org/download.

Jozef Schildermans

Fout opgemerkt of meer nieuws? Meld het hier

Partner Content