View
141
Download
4
Category
Preview:
DESCRIPTION
Utilizando NoSQL datastores na nuvem
Citation preview
NoSQL Na Nuvem
Como aproveitar bancos NoSQL prontos para uso
disponíveis para uso na nuvem
Tópicos Abordados
Conceitos iniciais:O que é Cloud Computing
Google App Engine:Armazenando dados com DB Datastore
Data-Modeling APIPythonJavaAplicações de Exemplo
Tópicos Abordados
Amazon SimpleDB:EstruturaAPI em diversas linguagens
Conceitos Iniciais
O que é Cloud Computing ?
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]
Conceitos Iniciais
Categorias:
IaaS: Infra-estrutura
PaaS: Plataforma
SaaS: Software
Google App Engine
Criando aplicações e armazenando
dados com o GAE
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
Google App Engine
Linguages:PythonJavaPHPGo
StoragesDB DataStoreGoogle Cloud SQL
Google App Engine
“There is no free lunch”
Python SDK
Persistindo dadoscom a linguagem
Python
Python SDK
Python: Foi a primeira linguagem suportada pelo GAE
Dados modelados com mapeamento ORM
Aplicações construídas com webapp2
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
Python SDK
Mapeamento:Classes definem tipos de entidades
Cada objeto é uma entidade unicamente identificada
Key: caminho ancestral + ID
Python SDK
Identificação:ID numérico gerado pelo DataStore
Campo string indicado como chave
Chave completa é determinada pelo ID de cada entidade pai
Python SDK
Entidades:db.Expando: define entidades que podem receber campos dinamicamente
db.PolyModel: define um tipo de entidade que pode ser estendido
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()
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()
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')
Python SDK
Google Query Language:
Especifica consultas em termos de tipos de entidades e seus campos
Semelhante a SQL, porém mais restrita
Python SDK
Algumas restrições GQL:
Não permite listar camposSeleciona todos campos ou apenas a chave
Não permite joins
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”])
Python SDK
Índices:
Para cada propriedade o GAE pré-define um índice
Índices adicionais podem ser definidos no arquivo index.yaml
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
Java SDK
Persistindo dadoscom a linguagem
Java
Java SDK
Java: Amplamente difundida no desenvolvimento de aplicações comerciais
Oferece 2 abordagensJPA (Java Persistence API)JDO (Java Data Objects)
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
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.}
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();
Amazon SimpleDB
Persistindo dadoscom a linguagem
Java
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
Amazon SimpleDB
SimpleDB: Para utilizar, basta criar uma conta na Amazon Web Services
Obter uma chave de acesso
Interface Web disponível para download
Amazon SimpleDB
API REST: CreateDomain DeleteDomain ListDomains DomainMetadata
Amazon SimpleDB
API REST: PutAttributes BatchPutAttributes GetAttributes DeleteAttributes Select
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
Amazon SimpleDB
Exemplos:
#listar até 10 domínios (retorno)
<ListDomainsResponse><ListDomainsResult>
<DomainName>tasks</DomainName></ListDomainsResult>
</ListDomainsResponse>
Amazon SimpleDB
API REST: Os comandos podem ser gerados por ferramentas Amazon ScratchPad Java Ruby Python
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
Obrigado!
Rodolfo Martignon Sevilhano MendesTópicos Especiais em Bancos de Dados
e ImagensProf. Dr. Humberto Luiz Razente
Recommended