Dgraph
michelconrado
Created on February 8, 2018
More creations to inspire you
PRODUCT MANAGEMENT IN MOVIES & TV SHOWS
Presentation
ESSENTIAL OILS PRESENTATION
Presentation
VEGETARIANISM
Presentation
EIDIKO JEWELRY
Presentation
ANCIENT EGYPT FOR KIDS PRESENTATION
Presentation
A GLIMPSE INTO CAPE TOWN’S PAST
Presentation
ALTERNATIVE DIETS
Presentation
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