Want to make creations as awesome as this one?

Transcript

Introdução ao Dgraph

Sobre mim

michelconrado@cryptoengage.com.br

@micheldizaeh

@micheldiz

Michel conrado A. Diz

GraphQL

Vocês conhecem?

Neo4j

Vocês conhecem? blz, só que Dgraph é 15x mais rápido com muito maior load :3

redis

Vocês conhecem?

Dgraph é a união destes conceitos

Linguagem Graphql+-

DB Grafo

KV de alta velocidade e disponibilidade

+

+

director(func: allofterms(name@en, "steven spielberg")) { name@en director.film { name@en initial_release_date country { name@en } genre { name@en } } }

Teoria dos grafos

A teoria dos grafos é um ramo da matemática que estuda as relações entre os objetos de um determinado conjunto. Para tal são empregadas estruturas chamadas de grafos, G(V,E), onde V é um conjunto não vazio de objetos denominados vértices (ou nós) e E é um subconjunto de pares não ordenados de V, chamados arestas.

fonte: https://pt.wikipedia.org/wiki/Teoria_dos_grafos

O que é um DB grafo

É um sistema Otimizado para pesquisas de valor-chave (KV) e cruzamentos de borda (famigerados JOINS). Que utiliza da teoria dos grafos na sua estrutura básica. Hoje o Dgraph é considerado uma mistura de noSQL e "NewSQL" tanto pela linguagem utilizada quanto das propriedades ACID. (Atomicidade, Consistência, Isolamento e Durabilidade)

Dgraph Seria uma boa escolha?

2 Você possui dados esparsos, ao qual não se encaixam corretamente nas tabelas SQL?

1 Você tem mais de 10 tabelas SQL, conectadas entre si por foreign IDs?

3 Você quer um esquema simples e flexível, que seja legível e sustentável ao longo do tempo?

4 Você se preocupa com velocidade e desempenho em escala?

3 Se pretende criar um "newsFeeds", uma engine de recomendações, Sistema de busca contextual, sistema de detecção de padrões e fraudes, e muito mais.

Dgraph Seria uma boa escolha?

Se as respostas anteriores forem todas "SIM", então Dgraph seria perfeito! para sua aplicação. O Dgraph fornece o NoSQL como escalabilidade, ao mesmo tempo que fornece transações de SQL e a capacidade de selecionar, filtrar e agregar pontos de dados. Combina isso com junções distribuídas, travessas e operações gráficas, o que facilita a criação de aplicativos com ele.

Quem usa grafos?

O Google usa "Knowledge Graph" desde 2012 e resultou numa melhora de performance e escalabilidade do sistema de buscas. Em outubro de 2016, o Google anunciou que o "Knowledge Graph" continha mais de 70 bilhões de fatos.

Quem usa grafos?

Na conferência F8 do Facebook realizada em 24 de maio de 2007, quando foi usada para explicar como a nova Plataforma do Facebook aproveitaria os relacionamentos entre indivíduos para oferecer uma experiência online mais rica. A definição foi expandida para se referir a um gráfico social de todos os usuários da Internet.

Quem criou o Dgraph?

Manish Rai Jain - Fundador do dgraph.io. Autor de Dgraph e Badger. Ex-Google. Ex-Quora. Engenheiro de núcleo do Dgraph. Liderou vários projetos para consolidar e servir o gráfo knowledge do Google.

Mas o que é o Dgraph?

É um interpretador de linguagem para BadgerDB. De código aberto construido para escalonar ambientes em produção. Totalmente feito em Go Lang. Com várias funções.

Features

Rápido

Open Source

ACID transactions

Escalonavel (clustering)

Altamente Disponível

Características

+ Linguagem própria

Com: Filtros, Matching, +8 Funcs, Alias, Logic (AND, OR, NOT), Paginação, Contador, Sorteamento, Multiplos blocos de consulta, Variáveis e GraphQL variáveis, funções matemáticas, Schema simples, Facets, Consulta recursiva, Fragmentos, indexação e etc.

ACID: Atomicidade, Consistência, Isolamento e Durabilidade

Protocolos disponíveis no Dgraph

Clientes

Incompletos

Oficiais

Outras langs

localhost:8080/*API

Ferramentas

Grafana

Como funcionar o Dgraph

BadgerDB

Dgraph

Dgraph-js

dgraph4j

Banco de dados Assícrono de KV (key + Value)

Binário Dgraph cluster contendo três aplicações: Dgraph Zero, Dgraph Server e Ratel.

Analogias:BadgerDB = CozinhaDgraph Server = CozinheiroDgraph Zero = GarçonsRatel = Cardápio (Interface de usuário)Dgraph-JS = Cliente consumindo

Conceito

director.film: uid @reverse @count . genre: uid @reverse . initial_release_date: dateTime @index(year) . name: string @index(term) . starring: uid @count .

Estrutura - do Schema

nome: string @index(term) . idade: int @index(int) . amigo: uid @count . industria: string @index(term) . chefe_de: uid @reverse.

Conceito

Estrutura - do Schema

uid: uint64 int: int64 float: ponto flutuante string: string bool: booleano List Type: [string] ou [int] ou [geo] ou [UID] @reverse: para "friend" se usa => ~friend

dateTime: time.Time (RFC3339 format [Optional timezone] ) geo: go-geom (GeoJSON) password: string (Encriptação nativa)

Conceito

Estrutura - de Indexing do Schema

@index(hash) => O índice mais performante para eq é hash. @index(exact) => Permite uma classificação mais rápida. @index(term) => Permite pesquisar por um termo em uma frase. @index(fulltext) => Correspondência com derivações e palavras específicas do idioma. @index(trigram) => Correspondência de expressões regulares. Também pode ser usado para verificar a igualdade. @index(year) @index(month) @index(day) @index(hour)

Conceito

Estrutura - Relação

Conceito

<subject> <predicate> <object> (facete=true) .

<nome> <"michel"> (tags=Bitcoin) .

<estuda_aq> <True> (desde=2016) .

Entidade + Atributo + valor + valor extra .

_:blank-0 <name> "alguma string" (tags=InfoExtra) .

Estrutura - Padrão RDF N-Quad

petOwner(func: eq(name, "Michel")) { name idade dono_de: owns_pet { name castrado raca { name } } } }

<name>

<idade>

<name>

<castrado>

Michel Conrado

28

Joe

false

uid: 0xfd32

uid: 0xh55v

<is_adm>

true

<owns_pet>

0xfd32

owns_pet: uid @reverse

<raça>

0xa01

<vacinas>

[lista]

GEO - geolocalização

<_:0xeb1dde9c> <loc> "{'type':'Point','coordinates' [-122.4220186,37.772318]}"^^<geo:geojson> . <_:0xeb1dde9c> <name> "Hamon Tower" .

<_:0xf76c276b> <loc> "{'type':'Polygon','coordinates':[[[-122.409869,37.7785442],[-122.4097444,37.7786443],[-122.4097544,37.7786521],[-122.4096334,37.7787494],[-122.4096233,37.7787416],[-122.4094004,37.7789207],[-122.4095818,37.7790617],[-122.4097883,37.7792189],[-122.4102599,37.7788413],[-122.409869,37.7785442]],[[-122.4097357,37.7787848],[-122.4098499,37.778693],[-122.4099025,37.7787339],[-122.4097882,37.7788257],[-122.4097357,37.7787848]]]}"^^<geo:geojson> . <_:0xf76c276b> <name> "Best Western Americana Hotel" .

MultiPolygon

Polygon

JSON object

{ "name": "diggy", "food": "pizza" }

_:blank-0 <name> "diggy" . _:blank-0 <food> "pizza" .

Gera automaticamente um RDFs mutation

Envie um obj JSON

<0x467ba0> <name> "diggy" . <0x467ba0> <food> "pizza" .

Obtenha | RDFs gravado no DB

http://www.apcjones.com/arrows/#

https://realtimeboard.com/app/board/o9J_k0N22Eo=/ Fazer tour https://labs.play-with-docker.com/ https://tour.dgraph.io/intro/2/

Sobre mim

michelconrado@cryptoengage.com.br

@micheldizaeh

@micheldiz

Michel conrado A. Diz