Neo4j Jízdomat
Upcoming SlideShare
Loading in...5
×
 

Neo4j Jízdomat

on

  • 407 views

 

Statistics

Views

Total Views
407
Views on SlideShare
407
Embed Views
0

Actions

Likes
0
Downloads
0
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Neo4j Jízdomat Neo4j Jízdomat Presentation Transcript

    • Neo4j na Jízdomatu Jan Mittner
    • Kdo jsme a co děláme?
    • Jízdomat  webová aplikace pro spolujízdu autem    řidič nabídne místo v autě na určené trase cestující se na jízdu přihlásí, zaplatí poměrnou část nákladů a sveze se kam jsme se dostali   70 tisíc registrovaných uživatelů 4 tisíce jízd týdně  190 tisíc vypsaných jízd celkem
    • Jaký problém jsme řešili?
    • Důvěra mezi uživateli  klíčový faktor úspěchu: důvěra mezi řidičem a cestujícím  jak ji podpořit?  hodnocení uživatelů  celkem  87 tisíc hodnocení; 98,5 % pozitivní ověření telefonu, e-mailu a adresy  mojeID  sociální vazby mezi uživateli  jak ale na to?
    • Jak jsme to vyřešili?
    • Sociální vazby mezi uživateli  facebooková přátelství  „řidiče Frantu můžete znát přes kamaráda Pepu“  počítali jsme dávkově přes dijkstru v PHP  vydrželo  počítali jsme dávkově přes joiny v MySQL  vydrželo  pár tisíc uživatelů pár desítek tisíc uživatelů nakonec jsme přestali počítat 
    • Sociální vazby mezi uživateli  upgrade: veškeré vazby mezi uživateli     kdo se s kým kamarádí na FB kdo koho svezl v autě kdo se s kým zároveň vezl v autě vazby mají různou intenzitu     typ vazby: přátelství vs. dva náhodní spolucestující četnost: pravidelní vs. náhodní cestující čas poslední interakce mezi uživateli hodnocení mezi uživateli (palec nahoru a dolů) => funkce, která určí intenzitu vazby == vzdálenost mezi dvěma uživateli
    • Use case   můžu si u řidiče / cestujícího kliknout na odkaz Znáte se? spočítá to nejkratší cestu k tomuto uživateli   nejkratší ve smyslu co nejintenzivnějších vazeb pokud max 2 mezičlánky, pořád slušná vypovídací hodnota  znám někoho, komu můžu říct, aby se zeptal jeho známého, jak byl s daným uživatelem spokojen
    • Technické řešení
    • Graf    uzly = uživatelé  cca 70 tisíc uzlů hrany = sociální vazby mezi uživateli  cca 480 tisíc hran grafová databáze neo4j   export produkční databáze do GraphML <graph><node id=“1”/><edge source=“1” … dávkový import do neo4j skrz Gremlin g.clear();g.loadGraphML(URL);
    • Dotazy v neo4j  potřebujeme cesty přes nejméně hran seřazené dle celkové vzdálenosti  Cypher START from=node:node_auto_index(user_id="{FROM}"), to=node:node_auto_index("user_id:({TO})") MATCH p = from-[r*1..{MAX_LENGTH}]->to RETURN extract(n in nodes(p) : n.user_id), extract(rel in relationships(p) : rel.cost), extract(rel in relationships(p) : type(rel)) ORDER BY length(p), reduce(totalCost = 0, rel in relationships(p) : totalCost + rel.cost) LIMIT 3   bohužel velmi pomalé (řádově sekundy) plugin do neo4j od Michala Bachmana  velmi rychlé (10-20 ms)
    • Několik čísel
    • Statistiky  70 tisíc uzlů (uživatelů)  40 tisíc uzlů má hranu k jinému uzlu  já:      196 uživatelů přes 1 hranu 2740 uživatelů přes 2 a méně hran 20247 uživatelů přes 3 a méně hran dál už mi to nespočítalo  nechtěl by si někdo pohrát se získáním statistik?
    • Děkuji za pozornost Vaše dotazy?