NoSQL - Einfhrung in Graphen-Datenbanken mit Neo4j

  • Published on
    24-Jan-2017

  • View
    233

  • Download
    1

Transcript

1NoSQLEinfhrunginGraphenDatenbankenmitNeo4jTobiasTrelle,codecentricAG@tobiastrelle2TobiasTrelleSeniorITConsultant@codecentricAGTwitter:@tobiastrelleSlideshare:GitHub:http://de.slideshare.net/tobiastrelle/https://github.com/ttrellehttp://de.slideshare.net/tobiastrelle/https://github.com/ttrelle23AgendaNoSQL?GraphenNeo4jGraphDatabaseDataStructuresCypherQueryLanguageAPI4 . 1NoSQL?4 . 24 . 24 . 3NoSQLDatenbankenhelfenbeiderLsungderdreiProblemFelderimBigDataUmfeld(Gartner,2009):WarumNoSQL?Volume(MengeanDaten)Variety(verschiedeneStrukturen)Velocity(Geschwindigkeit)4 . 4NeueHerausforderungenHorizontaleSkalierungVerteilteSystemeCAPTheorem/EventualConsistency4 . 5CAPTheoremConsistencyAvailabilityPartitionToleranceNichtalledieseAnforderungenknnenzurgleichenZeitgleichermaenguterflltwerden!4 . 6MessagingSystemvonFacebook100NodeCluster(ApacheHBase)87BillionR/WOperations/Day9+BillionMessages/Day4PBCompressedData/Day45%Growth/MonthSource:NicolasSpiegelberg(BerlinBuzzWords,June2012)4 . 7NoSQLDatenbanken4 . 8http://nosqldatabase.org/http://nosql-database.org/4 . 84 . 9DBEnginesRankinghttp://dbengines.com/de/rankinghttp://db-engines.com/de/ranking5 . 1Graphen5 . 2Ein isteinTupel bestehendausFormaleDefinitionGraph G = (V ,E)Knoten(Vertices):Kanten(Edges):V = { , . . . , }V1 VnE V xV = { , . . . , }E1 Em5 . 3Edges/KantenEinfacherGraphVertices/Knoten5 . 4Spezialflle5 . 5Streckennetze5 . 6Stromnetz5 . 7UseCasesfrGraphenEVUs(Strom,Gas,Wasser)Streckennetze(DB,Verkehrsbetriebe)Logistik(DHL,UPS,...)SocialNetworks6 . 1Neo4j6 . 2GraphinNeo4jGerichteterGraph( )KnotenundKantenhabenEigenschaftenKnotenhabenein(odermehere)Label(s)( , ) ( , )V1 V2 V2 V1==>sog.PropertyGraph6 . 36 . 4PropertiesString(Unicode)Boole'scheWerteNumerischeWerte(float,int)ArrayssolcherTypenCREATE(john:Person:Developer{name:"John",age:36})6 . 5LabelsString(Unicode)DientzurKlassifizierungvonKnotenMehrereLabelsmglichNamensraumzurIndexDefinitionCREATE(john:Person:Developer{name:"John",age:36})//IndexCREATEINDEXON:Person(name)6 . 6BeziehungNativerDatentypVerbindetimmerzweiKnotenHateinenTypKannauchPropertieshabenCREATE(john)[:KNOWS{since:2004,level:"expert"}]>(java)6 . 7SchemaLabelsklassifizierenKnotenUniqueConstraintaufKnotenPropertyExistsConstraintaufKnotenPropertyExistsConstraintaufBeziehungProperty//KnotenPropertyuniqueCREATECONSTRAINTON(p:Person)ASSERTp.nameISUNIQUE//KantenPropertyexistiertCREATECONSTRAINTON(k:KNOWS)ASSERTexists(k.since)6 . 8Zusammenfassung7 . 1CypherQueryLanguage7 . 2CypherDeklarative(Abfrage)SpracheHatalsDSLSyntaxElementefrKnoten()undKanten>ErinnertanSQLReferenz:https://neo4j.com/docs/developermanual/current/cypher/https://neo4j.com/docs/developer-manual/current/cypher/7 . 3CREATEAnlegenvonKnotenundKanten//StarWarsJedi/SithexampleCREATE//Jedi...(yoda:Jedi:UnknownSpecies{name:"Yoda"}),(dooku:Jedi:Sith:Human{name:"CountDooku",sith_name:"DarthTyranus"(qui_gon:Jedi:Human{name:"QuiGonJinn"}),(obi_wan:Jedi:Human{name:"ObiWanKenobi"}),(anakin:Jedi:Sith:Human{name:"AnakinSkywalker",sith_name:"DarthVader"(luke:Jedi:Human{name:"LukeSkywalker"}),...//Masterrelationships(darth_plagueis)[:TRAINS]>(emperor),(yoda)[:TRAINS]>(dooku),(yoda)[:TRAINS]>(luke),(emperor)[:TRAINS]>(dooku),...7 . 4TRAINSTRAKILLSTRAINSKILLSTRAINSKILLSKILLSTRAINSTRAINSTRAINSFATHER_OF7 . 5MATCHAbfragen//MostimportantSithMATCH(s:Sith)[r]()WITHs,count(r)asnWHEREn>2RETURNsORDERBYnDESCLIMIT3LiveDemo:http://localhost:7474http://localhost:7474/8 . 1API8 . 2EndpointsundProtokolle8 . 3DriverJavaC#JavaScriptPython8 . 4JavaDriverorg.neo4j.driverneo4jjavadriver1.0.5importorg.neo4j.driver.v1.*Driverdriver=GraphDatabase.driver("bolt://localhost",AuthTokens.basic("neo4j","neo4j"))Sessionsession=driver.session()StatementResultresult=session.run("MATCH(j:Jedi)RETURNj")while(result.hasNext()){Recordjedi=result.next()System.out.println(jedi.get("name").asString())}session.close()driver.close()9 . 1Technischerberlick9 . 2Neo4jberblickInJavaimplementiertOpenSource:GLPv3LizenzEnterpriseSupportverfgbar(Clustering,Monitoring,...)https://github.com/neo4j/neo4jhttps://github.com/neo4j/neo4j9 . 3Neo4jberblickBeziehungensindFirstClassDatenstrukturenIndexFreeAdjacency,d.h.KomplexittfrTraversierungStoredProceduresseitVersion3.0O(1)NoSQL:EinfhrunginGraphenDatenbankenmitNeo4j 10DankefrIhreAufmerksamkeit

Recommended

View more >