Google App Engine e NoSQL:
Alta disponibilidade
Giovane Liberato @ TDC 2014
$whoami
Giovane Liberato
Fatec São José dos Campos, Python web
developer, Comunidade,
Google App Engine - overview
Quem usa o Google App Engine?
cloud.google.com/customers
Características
Sistemas multi-tenentes com API de namespaces
APIs de memcache, Cron Jobs e Task Queues
Limitações “Libert...
GAE Datastore
Características
Banco de dados colunar
Distribuido com alta replicação
Usado por mais de 60 projetos no Google*[1]
Cache a...
Banco de dados colunar
Row Column
Escalabilidade do banco
Entidades e Atributos
Objetos da linguagem que herdam da classe Model
Campo Key é definido pelo sistema
Classes são como t...
Entidades e Atributos - exemplo
from google.appengine.ext import ndb
class Person(ndb.Model):
name = ndb.StringProperty()
...
Modelagem de dados
Schemaless
Redundância de dados facilita o acesso
Relações podem ser feitas, porem sem integridade
refe...
Modelagem - exemplo
from google.appengine.ext import ndb
class Person(ndb.Model):
name = ndb.StringProperty()
age = ndb.In...
Relações de dados - sugestões
One-to-one
Feito com referências por keys
One-to-many
Feito com listas ou tabela de relacion...
Datastore Query
Query - API de buscas
Toda subclasse de ndb.Model sabe fazer query
Métodos filter, count, order, get, fetch, etc…
Buscas p...
Query - exemplo busca simples
from models import Person
pessoas = Person.query().fetch()
# ou
for p in Person.query():
pri...
Query - exemplo condicional
from models import Person
p = Person.query(Person.age > 5).fetch()
p = Person.query(Person.nam...
Query - exemplo paginação
from models import Person
p, cursor, more = Person.query().fetch_page(20)
if more:
p2 = Person.q...
Query - API de buscas assíncronas
Reduz o tempo de resposta da requisição
Todo método tem um correspondente _async
get_asy...
Query - API de buscas assíncronas
Async
Serial
Query - Índices
Para toda busca, o datastore cria um índice usando as
condições e ordenação da query
Subsets indexados e o...
Google Query Language
SELECT * FROM Person WHERE age >= 18
SELECT * FROM Person WHERE name IN ('Betty', 'Charlie')
SELECT ...
Datastore ORM
ORM - Métodos
Atributos estáticos: query, get_by_id(),
get_or_insert()
Atributos de instância: populate, put, delete, to_d...
ORM - exemplos
p = Person(name='Arthur Dent', age=42)
p_key = p.put()
p2 = p_key.get()
p2 == p #Retorna True
p_key.delete()
ORM - exemplos
p = Person()
p.populate(name='Arthur Dent', age=42)
p.put()
ORM - Datastore Viewer
Problemas da vida real
Problemas da vida real
Problema: Dados indisponíveis imediatamente após a
inserção
Causa: Eventual Consistency do Datastor...
Problemas da vida real
Problema: Fazer backup/dump do banco de dados
Resolução: Bulkloader e remote_api_shell
Problemas da vida real
Problema: Erros em querys logo após o deploy
Causa: GAE Gerando novos índices
Resolução: esperar e ...
Problemas da vida real
Problema: Qual tipo de busca/inserção realizar?
Resolução: Utilize a forma que menos fizer chamadas...
Problemas da vida real
Problema: É possível paralelizar buscas?
Resolução: Através das tasklets é possível paralelizar o
a...
Referências
[1] Bigtable: A Distributed Storage System for Structured Data
[2] Documentação Google App Engine para Python
...
Obrigado!
giovaneliberato@gmail.com
about.me/giovaneliberato
Google App Engine e NoSQL: Alta disponibilidade
Google App Engine e NoSQL: Alta disponibilidade
Google App Engine e NoSQL: Alta disponibilidade
Google App Engine e NoSQL: Alta disponibilidade
Google App Engine e NoSQL: Alta disponibilidade
Upcoming SlideShare
Loading in …5
×

Google App Engine e NoSQL: Alta disponibilidade

710 views

Published on

O datastore é sem dúvidas um dos protagonistas da plataforma de aplicativos do google, o Google App Engine, quando falamos em disponibilidade. O objetivo desta palestra é mostrar todos os detalhes do BigTable, desde sua estrutura interna, operadores e tipos de queries, custo e modelagem de dados.

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
710
On SlideShare
0
From Embeds
0
Number of Embeds
12
Actions
Shares
0
Downloads
17
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Google App Engine e NoSQL: Alta disponibilidade

  1. 1. Google App Engine e NoSQL: Alta disponibilidade Giovane Liberato @ TDC 2014
  2. 2. $whoami
  3. 3. Giovane Liberato Fatec São José dos Campos, Python web developer, Comunidade,
  4. 4. Google App Engine - overview
  5. 5. Quem usa o Google App Engine? cloud.google.com/customers
  6. 6. Características Sistemas multi-tenentes com API de namespaces APIs de memcache, Cron Jobs e Task Queues Limitações “Libertadoras” Vendor Lock In Precificação camarada
  7. 7. GAE Datastore
  8. 8. Características Banco de dados colunar Distribuido com alta replicação Usado por mais de 60 projetos no Google*[1] Cache automático APIs assíncronas para acesso ao banco
  9. 9. Banco de dados colunar Row Column
  10. 10. Escalabilidade do banco
  11. 11. Entidades e Atributos Objetos da linguagem que herdam da classe Model Campo Key é definido pelo sistema Classes são como tabelas, atributos são como linhas É possível criar subclasses de modelo
  12. 12. Entidades e Atributos - exemplo from google.appengine.ext import ndb class Person(ndb.Model): name = ndb.StringProperty() age = ndb.IntegerProperty()
  13. 13. Modelagem de dados Schemaless Redundância de dados facilita o acesso Relações podem ser feitas, porem sem integridade referencial
  14. 14. Modelagem - exemplo from google.appengine.ext import ndb class Person(ndb.Model): name = ndb.StringProperty() age = ndb.IntegerProperty() friends = ndb.StructuredProperty(Person, repated=True)
  15. 15. Relações de dados - sugestões One-to-one Feito com referências por keys One-to-many Feito com listas ou tabela de relacionamento Many-to-many Feito com tabela de relacionamentos
  16. 16. Datastore Query
  17. 17. Query - API de buscas Toda subclasse de ndb.Model sabe fazer query Métodos filter, count, order, get, fetch, etc… Buscas paginadas, buscas com offset e limite Funções de map nos resultados da query
  18. 18. Query - exemplo busca simples from models import Person pessoas = Person.query().fetch() # ou for p in Person.query(): print p
  19. 19. Query - exemplo condicional from models import Person p = Person.query(Person.age > 5).fetch() p = Person.query(Person.name == “Giovane”) . fetch()
  20. 20. Query - exemplo paginação from models import Person p, cursor, more = Person.query().fetch_page(20) if more: p2 = Person.query().fetch_page(20, start_cursor=cursor)
  21. 21. Query - API de buscas assíncronas Reduz o tempo de resposta da requisição Todo método tem um correspondente _async get_async, fetch_async, map_async, count_async...
  22. 22. Query - API de buscas assíncronas Async Serial
  23. 23. Query - Índices Para toda busca, o datastore cria um índice usando as condições e ordenação da query Subsets indexados e ordenados = buscas mais rápidas Geradas automaticamente pelo GAE
  24. 24. Google Query Language SELECT * FROM Person WHERE age >= 18 SELECT * FROM Person WHERE name IN ('Betty', 'Charlie') SELECT name FROM Person SELECT __key__ FROM Person WHERE age = NULL
  25. 25. Datastore ORM
  26. 26. ORM - Métodos Atributos estáticos: query, get_by_id(), get_or_insert() Atributos de instância: populate, put, delete, to_dict Pre Hooks e Post Hooks
  27. 27. ORM - exemplos p = Person(name='Arthur Dent', age=42) p_key = p.put() p2 = p_key.get() p2 == p #Retorna True p_key.delete()
  28. 28. ORM - exemplos p = Person() p.populate(name='Arthur Dent', age=42) p.put()
  29. 29. ORM - Datastore Viewer
  30. 30. Problemas da vida real
  31. 31. Problemas da vida real Problema: Dados indisponíveis imediatamente após a inserção Causa: Eventual Consistency do Datastore Resolução: Algoritmo do avestruz Isso acontece porque o datastore precisa de até 1 segundo para replicar o dado em todas as instâncias do datastore. Paradigma BASE.
  32. 32. Problemas da vida real Problema: Fazer backup/dump do banco de dados Resolução: Bulkloader e remote_api_shell
  33. 33. Problemas da vida real Problema: Erros em querys logo após o deploy Causa: GAE Gerando novos índices Resolução: esperar e trocar a versão default para uma estável
  34. 34. Problemas da vida real Problema: Qual tipo de busca/inserção realizar? Resolução: Utilize a forma que menos fizer chamadas ao banco de dados
  35. 35. Problemas da vida real Problema: É possível paralelizar buscas? Resolução: Através das tasklets é possível paralelizar o acesso ao banco
  36. 36. Referências [1] Bigtable: A Distributed Storage System for Structured Data [2] Documentação Google App Engine para Python [3] App Engine e Python: Você Programa e o Google Escala [4] Programming Google App Engine 2nd Edition
  37. 37. Obrigado! giovaneliberato@gmail.com about.me/giovaneliberato

×