Стажировка-2015. Разработка. Занятие 12. Транзакции в БД, работа с БД из приложения
Использование графовых БД / Андрей Синицын (ItRuStore)
Transcript of Использование графовых БД / Андрей Синицын (ItRuStore)
Использование графовых БДпри разработке социальных сетей
Андрей Синицын
Rate'N'Goods
● Рекомендательный сервис + соцсеть
● Пользовательские связи
● Много связей внутри проекта
http://ratengoods.com
Связи между сущностями
● Рекомендации по кругам
● Геоданные
● ACL
Поиск решения: RDBMS● Большие таблицы со связями
● No JOIN
● No sharding
● Add property → ALTER TABLE
Поиск решения: Doc-Based● No relations
● Нет связей — нет выборок
● Consistency?
Поиск решения: Key-value
Graph Databases● Вершины или узлы
● Рёбра или связи
● Направления связей
● Вершина → Ребро → Вершина
Graph Databases● Вершины или узлы
● Рёбра или связи
● Направления связей
● Вершина → Ребро → Вершина
Whiteboard friendly
Queries? Ok! ● SparQL
SELECT ?name ?emailWHERE { ?person a foaf:Person. ?person foaf:name ?name. ?person foaf:mbox ?email.}
Queries? Ok! ● Cypher
START john=node:node_auto_index(name = 'John')MATCH john-[:friend]->()-[:friend]->fofRETURN john, fof
Traversal? WTF? ● Just a JOIN?
● No! It is PATH
Use-cases● Выборки связей внутри сущностей
● Выборки связей между сущностями
● Хранение геоданных — Spatial
● Access Control Lists
● Analitycs data
SoftwareOpen Graph Api
Facebook Graph Search API
FlockDB
No traversals :(
Software
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
Neo4j: software● Java
● Web Interface
● Data Console
● REST API
● Python bindings
Neo4j: REST API● Any language
● HTTP Overhead
● Libs: py2neo, bulbs
Neo4j: Embedded● Native support for Java
● Python support via JPype
● Other (ruby, Scala, js)
Neo4j: Bonus● No backup and clustering in
community version
● Tornado-based server
● Replication like MySQL (query log)
● Scalability
● Backup and restore