Использование графовых БД / Андрей Синицын (ItRuStore)

20
Использование графовых БД при разработке социальных сетей Андрей Синицын

Transcript of Использование графовых БД / Андрей Синицын (ItRuStore)

Page 1: Использование графовых БД / Андрей Синицын (ItRuStore)

Использование графовых БДпри разработке социальных сетей

Андрей Синицын

Page 2: Использование графовых БД / Андрей Синицын (ItRuStore)

Rate'N'Goods

● Рекомендательный сервис + соцсеть

● Пользовательские связи

● Много связей внутри проекта

http://ratengoods.com

Page 3: Использование графовых БД / Андрей Синицын (ItRuStore)

Связи между сущностями

● Рекомендации по кругам

● Геоданные

● ACL

Page 4: Использование графовых БД / Андрей Синицын (ItRuStore)

Поиск решения: RDBMS● Большие таблицы со связями

● No JOIN

● No sharding

● Add property → ALTER TABLE

Page 5: Использование графовых БД / Андрей Синицын (ItRuStore)

Поиск решения: Doc-Based● No relations

● Нет связей — нет выборок

● Consistency?

Page 6: Использование графовых БД / Андрей Синицын (ItRuStore)

Поиск решения: Key-value

Page 7: Использование графовых БД / Андрей Синицын (ItRuStore)

Graph Databases● Вершины или узлы

● Рёбра или связи

● Направления связей

● Вершина → Ребро → Вершина

Page 8: Использование графовых БД / Андрей Синицын (ItRuStore)

Graph Databases● Вершины или узлы

● Рёбра или связи

● Направления связей

● Вершина → Ребро → Вершина

Whiteboard friendly

Page 9: Использование графовых БД / Андрей Синицын (ItRuStore)

Queries? Ok! ● SparQL

SELECT ?name ?emailWHERE { ?person a foaf:Person. ?person foaf:name ?name. ?person foaf:mbox ?email.}

Page 10: Использование графовых БД / Андрей Синицын (ItRuStore)

Queries? Ok! ● Cypher

START john=node:node_auto_index(name = 'John')MATCH john-[:friend]->()-[:friend]->fofRETURN john, fof

Page 11: Использование графовых БД / Андрей Синицын (ItRuStore)

Traversal? WTF? ● Just a JOIN?

● No! It is PATH

Page 12: Использование графовых БД / Андрей Синицын (ItRuStore)

Use-cases● Выборки связей внутри сущностей

● Выборки связей между сущностями

● Хранение геоданных — Spatial

● Access Control Lists

● Analitycs data

Page 13: Использование графовых БД / Андрей Синицын (ItRuStore)

SoftwareOpen Graph Api

Facebook Graph Search API

FlockDB

No traversals :(

Page 14: Использование графовых БД / Андрей Синицын (ItRuStore)

Software

Page 15: Использование графовых БД / Андрей Синицын (ItRuStore)

Software stack: TinkerPop

← Like *DBC but for graph

← Like *Nix-pipes but for graph

← Traversal your graph

← Collect your objects

← Algo implementations

← Protocols: HTTP, Rest API, etc

Page 16: Использование графовых БД / Андрей Синицын (ItRuStore)

Neo4j: software● Java

● Web Interface

● Data Console

● REST API

● Python bindings

Page 17: Использование графовых БД / Андрей Синицын (ItRuStore)

Neo4j: REST API● Any language

● HTTP Overhead

● Libs: py2neo, bulbs

Page 18: Использование графовых БД / Андрей Синицын (ItRuStore)

Neo4j: Embedded● Native support for Java

● Python support via JPype

● Other (ruby, Scala, js)

Page 19: Использование графовых БД / Андрей Синицын (ItRuStore)

Neo4j: Bonus● No backup and clustering in

community version

● Tornado-based server

● Replication like MySQL (query log)

● Scalability

● Backup and restore

Page 20: Использование графовых БД / Андрей Синицын (ItRuStore)

Спасибо! Вопросы?

http://ratengoods.com

[email protected]