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 ...
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živat...
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 jsm...
Sociální vazby mezi uživateli


upgrade: veškeré vazby mezi uživateli






kdo se s kým kamarádí na FB
kdo koho svez...
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

...
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á data...
Dotazy v neo4j


potřebujeme cesty přes nejméně hran seřazené dle celkové
vzdálenosti



Cypher
START from=node:node_aut...
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 ...
Děkuji za pozornost

Vaše dotazy?
Neo4j Jízdomat
Neo4j Jízdomat
Upcoming SlideShare
Loading in …5
×

Neo4j Jízdomat

629 views
550 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
629
On SlideShare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Neo4j Jízdomat

  1. 1. Neo4j na Jízdomatu Jan Mittner
  2. 2. Kdo jsme a co děláme?
  3. 3. 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
  4. 4. Jaký problém jsme řešili?
  5. 5. 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?
  6. 6. Jak jsme to vyřešili?
  7. 7. 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 
  8. 8. 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
  9. 9. 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
  10. 10. Technické řešení
  11. 11. 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);
  12. 12. 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)
  13. 13. Několik čísel
  14. 14. 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?
  15. 15. Děkuji za pozornost Vaše dotazy?

×