nosql na nuvem
DESCRIPTION
Utilizando NoSQL datastores na nuvemTRANSCRIPT
![Page 1: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/1.jpg)
NoSQL Na Nuvem
Como aproveitar bancos NoSQL prontos para uso
disponíveis para uso na nuvem
![Page 2: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/2.jpg)
Tópicos Abordados
Conceitos iniciais:O que é Cloud Computing
Google App Engine:Armazenando dados com DB Datastore
Data-Modeling APIPythonJavaAplicações de Exemplo
![Page 3: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/3.jpg)
Tópicos Abordados
Amazon SimpleDB:EstruturaAPI em diversas linguagens
![Page 4: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/4.jpg)
Conceitos Iniciais
O que é Cloud Computing ?
![Page 5: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/5.jpg)
Conceitos Iniciais
Afinal, o que é Cloud Computing ?
“Cloud computing refers to both the applications delivered as services over the Internet and the hardwareand systems software in the datacenters that provide those services”
[1]
![Page 6: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/6.jpg)
Conceitos Iniciais
Categorias:
IaaS: Infra-estrutura
PaaS: Plataforma
SaaS: Software
![Page 7: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/7.jpg)
Google App Engine
Criando aplicações e armazenando
dados com o GAE
![Page 8: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/8.jpg)
Google App Engine
Google App Engine:
PaaS: serviço que permite a criação de aplicações Web
Abstração da infra-estrutura
Hosting: hospeda aplicações
SDK: API própria para desenvolvimento
![Page 9: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/9.jpg)
Google App Engine
Linguages:PythonJavaPHPGo
StoragesDB DataStoreGoogle Cloud SQL
![Page 10: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/10.jpg)
Google App Engine
“There is no free lunch”
![Page 11: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/11.jpg)
Python SDK
Persistindo dadoscom a linguagem
Python
![Page 12: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/12.jpg)
Python SDK
Python: Foi a primeira linguagem suportada pelo GAE
Dados modelados com mapeamento ORM
Aplicações construídas com webapp2
![Page 13: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/13.jpg)
Python SDK
Modelagem: A classe db.Model fornece métodos básicos de persistência
Subclasses de db.Property definem campos de vários tipos
![Page 14: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/14.jpg)
Python SDK
Mapeamento:Classes definem tipos de entidades
Cada objeto é uma entidade unicamente identificada
Key: caminho ancestral + ID
![Page 15: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/15.jpg)
Python SDK
Identificação:ID numérico gerado pelo DataStore
Campo string indicado como chave
Chave completa é determinada pelo ID de cada entidade pai
![Page 16: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/16.jpg)
Python SDK
Entidades:db.Expando: define entidades que podem receber campos dinamicamente
db.PolyModel: define um tipo de entidade que pode ser estendido
![Page 17: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/17.jpg)
Python SDK
Exemplos:#modelando uma entidade
from google.appengine.ext import db
class Task(db.Model): name = db.StringProperty(required=True)
description = db.StringProperty()
start_date = db.DateProperty(required=True)
due_date = db.DateProperty()
end_date = db.DateProperty()
tags = db.StringListProperty()
![Page 18: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/18.jpg)
Python SDK
Exemplos:#criando uma entidade Task
#campos obrigatórios devem ser informados no construtortask = Task(
name=”seminario”,start_date=dateime(“20/11/2013”))
#demais campos podem ser informados depoistask.description = “seminario sobre NoSQL”task.tags = [“nosql”,”cloud”,”python”]
#persiste no datastoretask.put()
![Page 19: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/19.jpg)
Python SDK
Exemplos:#recuperando pela chave
key = db.Key.from_path('Task', 123456789)task = db.Model.get(key)
#recuperando diretamente pelo ID
task = db.Model.get_by_id(123456789)
#recuperando por nome único
task = db.Model.get_by_key_name('seminario10')
![Page 20: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/20.jpg)
Python SDK
Google Query Language:
Especifica consultas em termos de tipos de entidades e seus campos
Semelhante a SQL, porém mais restrita
![Page 21: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/21.jpg)
Python SDK
Algumas restrições GQL:
Não permite listar camposSeleciona todos campos ou apenas a chave
Não permite joins
![Page 22: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/22.jpg)
Python SDK
Exemplo GQL:q = db.GqlQuery(“SELECT * FROM Task” +
“WHERE start_date >= :1” +“tags IN :2” +“ORDER BY start_date”,datetime.datetime(2011, 1, 1, 12, 0, 0).date(),
[“Important”, “Sample”])
![Page 23: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/23.jpg)
Python SDK
Índices:
Para cada propriedade o GAE pré-define um índice
Índices adicionais podem ser definidos no arquivo index.yaml
![Page 24: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/24.jpg)
Python SDK
Índices: Cada índice é uma entrada contendo o nome da entidade e uma lista de campos
Exemplo: Indexes:
- kind: Task Properties: - name: start_date
- name: tags
![Page 25: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/25.jpg)
Java SDK
Persistindo dadoscom a linguagem
Java
![Page 26: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/26.jpg)
Java SDK
Java: Amplamente difundida no desenvolvimento de aplicações comerciais
Oferece 2 abordagensJPA (Java Persistence API)JDO (Java Data Objects)
![Page 27: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/27.jpg)
Java SDK
JPA: É a API de persistência mais utilizada pela comunidade Java
Originalmente concebida para trabalhar com BDs relacionais
Realiza o mapeamento através de anotações de metadados
![Page 28: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/28.jpg)
Java SDK
Exemplo:
@Entitypublic class Task implements Serializable {
@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;
@Column(name="task_name")private String name;
private String description;private Date startDate;private Date endDate;private Date dueDate;private List<String> tags;
//gets, sets, etc.}
![Page 29: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/29.jpg)
Java SDK
Exemplos:
//criando um EntityManager
EntityManagerFactory emf = Persistence.createEntityManagerFactory("task-manager-
unit");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
Task task = new Task();task.setName(“seminario”);task.setStartDate(new Date(20,11,2013));
em.merge(task);
em.getTransaction().commit();
![Page 30: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/30.jpg)
Amazon SimpleDB
Persistindo dadoscom a linguagem
Java
![Page 31: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/31.jpg)
Amazon SimpleDB
SimpleDB: Uma instância é chamada de conta
Uma conta pode agrupar um ou mais domínios
Cada domínio é uma coleção de items
Cada item é um conjunto de pares chave-valor
![Page 32: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/32.jpg)
Amazon SimpleDB
SimpleDB: Para utilizar, basta criar uma conta na Amazon Web Services
Obter uma chave de acesso
Interface Web disponível para download
![Page 33: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/33.jpg)
Amazon SimpleDB
API REST: CreateDomain DeleteDomain ListDomains DomainMetadata
![Page 34: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/34.jpg)
Amazon SimpleDB
API REST: PutAttributes BatchPutAttributes GetAttributes DeleteAttributes Select
![Page 35: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/35.jpg)
Amazon SimpleDB
Exemplos:
#listar até 10 domínios
GET /?MaxNumberOfDomains=10&Action=ListDomains&Version=2009-04-15&AWSAccessKeyId=AKIAJ2BVRV5YHQHHXGPQ&SignatureVersion=2&SignatureMethod=HmacSHA1&Timestamp=2013-12-07T20%3A23%3A01.000Z&Signature=U0ebqdJGfXD8RAVK9h7eUd4FSpY%3D HTTP/1.1
Host: sdb.amazonaws.com
![Page 36: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/36.jpg)
Amazon SimpleDB
Exemplos:
#listar até 10 domínios (retorno)
<ListDomainsResponse><ListDomainsResult>
<DomainName>tasks</DomainName></ListDomainsResult>
</ListDomainsResponse>
![Page 37: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/37.jpg)
Amazon SimpleDB
API REST: Os comandos podem ser gerados por ferramentas Amazon ScratchPad Java Ruby Python
![Page 38: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/38.jpg)
Referências
Tiwari, Shashank; Professional NoSQL, Chapter 10
Google App Engine Documentation:https://developers.google.com/appengine/docs/
Amazon Web Services Documentation:http://aws.amazon.com/documentation/
Exemplos:https://github.com/rodolfomendes/NoSQLCloud
![Page 39: NoSQL Na Nuvem](https://reader035.vdocuments.site/reader035/viewer/2022062406/558e6f351a28ab1f4a8b465b/html5/thumbnails/39.jpg)
Obrigado!
Rodolfo Martignon Sevilhano MendesTópicos Especiais em Bancos de Dados
e ImagensProf. Dr. Humberto Luiz Razente