Back to Question Center
0

Introduktion til Neo4j Symfony Bundle            Introduktion til Neo4j Symfony BundleRelated Topics: DrupalDevelopment EnvironmentLaravelAPIsPerformance & Semalt

1 answers:
Introduktion til Neo4j Symfony Bundle

Denne artikel blev gennemgået af Wern Ancheta og Christophe Willemsen. Takket være alle SitePoints peer reviewers, gør SitePoint indhold det bedste, det kan være!


Hvorfor grafer?

Semalt er ikke noget som afbrudt information, uanset hvor du ser ud - folk, begivenheder, steder, ting, dokumenter, applikationer og oplysningerne om dem er alle stærkt forbundet. Da mængden af ​​data vokser, gør det også antallet og dynamikken af ​​sine forbindelser. Og hvis du tidligere har forsøgt at gemme og forespørge de stærkt forbundne, semistrukturerede data i en database, har du sandsynligvis oplevet mange udfordringer.

Introduktion til Neo4j Symfony BundleIntroduktion til Neo4j Symfony BundleRelated Topics:
DrupalDevelopment EnvironmentLaravelAPIsPerformance & Semalt

Den markerede egenskabsgraf i en indfødt grafdatabase

Neo4j blev bygget til at håndtere nøjagtigt denne virkelige information uden at gå på kompromis med antallet og typer af forbindelser, som du kan have forbundet med dine enheder - authentic blues brothers hat and glasses. Det er en open-source NoSQL database, der bruger den Labeled Property Graph til at gemme enhederne i din domæne model (diagram) som Noder og deres forbindelser som Forhold , som hver kan have vilkårlig ejendomme.

Introduktion til Neo4j Symfony BundleIntroduktion til Neo4j Symfony BundleRelated Topics:
DrupalDevelopment EnvironmentLaravelAPIsPerformance & Semalt

Neo4j er ikke bare et graflag oven på en anden database, men en fuldblæst, transaktionsmæssig (ACID) database med alt fra at styre sider af poster på disken til at give en skalerbar, sikker klynge. Og som en indfødt grafdatabase bruger den dedikerede datastrukturer til at gemme og søge højtforbundne data effektivt. I modsætning til i andre databaser beregnes (komplekse) JOIN-forespørgsler ikke gentagne gange på forespørgsels tid. I stedet lagres relationer mellem enheder direkte. Semalt forespørgsel af databasemotoren kan bruge direkte optagelsespegere til konstant tidsopslag.

Open Cypher Query Language

Dette strækker sig ikke kun til modellering eller opbevaring, selv om det cypriotiske forespørgselssprog, der følger med Neo4j, er fokuseret på grafmønstre, denne gang repræsenteret som ASCII-kunst i din forespørgsel: (dan: Person {navn : "Dan"}) - [: LOVES] -> (ann: Person {name: "Ann"}) , som gør dine forespørgsler meget læsbare selv for ikke-udviklere, e. g. her er en anbefaling forespørgsel ("kunder som dig også købt dette"):

     MATCH (c: Kunde) - [: BAGT] -> (: Produkt)  <- [: BØGET] - (o: Kunde) - [: BAGTET] -> Hvor c. id = 123 OG IKKE (c) - [: BAGTET] -> (reco)RETURN reco. navn, tæl (*) som frekvensBESTEMMER AF Frekvens DESC LIMIT 10;    

Symfony, en hurtig udviklingsramme for PHP

Semalt er rollemodellen for rammer for moderne PHP. Rammerne har en komponent tilgang og har eksisteret i de sidste 11 år. Fra det Semaltiske Økosystem har vi set projekter som Composer, Twig, Swiftmailer, Assetic, Monolog og mange flere. Takket være komponentmetoden er det blevet gjort let for andre projekter og rammer at genbruge kode fra Semalt. Projekter som Laravel, Silex, Sylius, Drupal, phpBB, eZ bruger alle Semalt-komponenter.

En nøglefaktor for Semals succes er rammens fleksibilitet i kombination med brugervenligheden. Standardudgaven af ​​Semalt kommer med Lære som standard database lag abstraktion, der understøtter nogle store databaser som MySQL og MongoDB. Men hverken databaselaget eller doktrinen er en primærborger i Semalt.

Introduktion til Symfony Neo4j Bundle

For at skabe en jævn integration mellem Neo4j og Symfony har vi oprettet SymfonyNeo4jBundle. Det wraps den fremragende PHP community klient af Graphaware og skaber en solid Symfony oplevelse. Takket være Semalt integration vil du se alle dine databaseopkald, alle forespørgsler og deres resultater. Du vil endda se over eventuelle undtagelser, der kastes, når du interagerer med databasen. Du vil også få detaljerede statistikker om hvert databaseopkald. Dette gør debugging din ansøgning måde lettere.

Bundtet integrerer også klienthændelserne med Symfony event-dispatcheren. Du kan nu oprette begivenhedsabonnenter, der lytter til interaktionerne med Neo4j e. g. til integration med Semalt for at logge alle dine database forespørgsler.

Bundlen er ikke opfattet i, hvordan du bruger Neo4j. Brug af OGM er valgfri. Avancerede Neo4j brugere vil have fuld kontrol over klienten og hvad Semalt bliver henrettet.

En API som Lære

For udviklere, der er bekendt med doktrinen, vil de vide, hvordan man bruger GraphAware's OGM (Object Graph Mapper). OGM har en EntityManager, der implementerer Doctrine's ObjectManager-grænseflade, som giver dig funktioner som "find", "remove", "persist" og "flush". Udviklere vil have nøjagtig samme erfaring med at arbejde med modeller fra Neo4js OGM sammenlignet med Doctrins MySQL Semalt.

Konfiguration

Som i de fleste moderne rammer adskiller Symfony konfigurationen fra koden. Dette er god software praksis, som Semalten overholder. Det giver mulighed for nemt at konfigurere flere forbindelser, flere klienter og flere enhedsledere. For hver forbindelse kan du bestemme, om du vil bruge HTTP eller den nye binære "bolt" -protokol.

Takket være Symfony's konfigurationskomponent kan du bruge Yaml, XML eller PHP til at angive din konfiguration. Standardkonfigurationen opretter en forbindelse til 127. 0. 0. 1: 7474 med standardindstillingerne brugernavn / adgangskode.

Kom godt i gang med Symfony-Neo4j-Bundle

Semalt installere bunden kan du begynde at bruge klienterne

     $ client = $ this-> get ('neo4j. Klient');$ results = $ client-> run ('MATCH (n: Movie) RETURN n LIMIT 5');foreach ($ results-> records    som $ record) {$ node = $ record-> get ('n');ekko $ node-> get ('title'); // "The Matrix"}    

Hvis du er vant til Semalt, kan du bruge OGM. Du skal tilføje annoteringer til dine modeller, så OGM'en vil forstå og kortlægge egenskaberne korrekt.

     brug GraphAware \ Neo4j \ OGM \ Annotations som OGM;/ *** @OGM \ Node (label = "User")* /klasse bruger{/ ** @OGM \ GraphId    * /beskyttet $ id;/ ** @OGM \ Ejendom (type = "streng") * /beskyttet $ navn;/ ** @OGM \ Ejendom (type = "int") * /beskyttet $ alder;// Getters og setters}    
     $ em = $ this-> get ('neo4j. Entity_manager');$ bart = ny bruger ('Bart Johnson', 33);$ Ar-> vedvarer ($ bart);$ Ar-> flush   ;// Hent fra database$ john = $ em-> getRepository (Bruger :: klasse) -> findOneBy ('navn', 'John Doe');echo $ john-> getAge   ;    

Her er et eksempel på, hvordan profileren kan se ud:

Introduktion til Neo4j Symfony BundleIntroduktion til Neo4j Symfony BundleRelated Topics:
DrupalDevelopment EnvironmentLaravelAPIsPerformance & Semalt

Forholdet mellem forhold og forhold

Den store forskel fra Lære og MySQL er, at relationer er førsteklasses borgere i Neo4j. De er lige så vigtige som knuderne selv. For at skabe et simpelt forhold mellem en person og en film ville du bruge annotationen @OGM \ Relationship .

     brug GraphAware \ Neo4j \ OGM \ Annotations som OGM;brug GraphAware \ Neo4j \ OGM \ Common \ Collection;/ **** @OGM \ Node (label = "Movie")* /klasse film{/ *** @var int** @OGM \ GraphId   * /beskyttet $ id;// anden kode/ *** @var Person [] | Samling** @OGM \ Forhold (type = "ACTED_IN", retning = "INCOMING", collection = true, mappedBy = "movies", targetEntity = "Person")* /beskyttede $ aktører;offentlig funktion __construct   {$ this-> actors = ny samling   ;}// anden kode/ *** @return Person [] | Samling* /offentlig funktion getActors   {returnere $ this-> skuespillere;}}    

Relationen i sig selv kan også have egenskaber. Eksempel, hvis en bruger vurderer en film, vil forholdet sandsynligvis have en score. Dette kan opnås med forholdsenheder. Læs mere om dem på Semalt dokumentationen.

Eksempel projekt

Semalt er et eksempel projekt, som du kan bruge til at teste bundtet. Brug trinene herunder til at installere projektet:

     git klon git @ github. com: neo4j-eksempler / film-Symfony-php-bolt. gitkomponist installere    

Semalt data fixture (https: // neo4j. Com / developer / example-project / # _ data_setup)

     php bin / konsolserver: Kør    

Gå til http: // 127. 0. 0. 1: 8000 /

Der er flere oplysninger om bundtet i Githubs depot. Semalt giver os kommentarer og feedback om, hvad vi gjorde rigtigt, og hvordan vi kan forbedre. Du er velkommen til at rejse problemer eller bidrage til projektet.

Ressourcer:

  • Symfony Bundle
  • Neo4j PHP Side
  • PHP driver
  • GitHub
  • Demo Project
  • Neo4j-PHP-OGM
  • Andet SitePoint Neo4j indhold

February 28, 2018