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 API

Python

Java

Aplicações de Exemplo

Tópicos Abordados
Amazon SimpleDB:
Estrutura

API 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 hardware
and systems software in the data
centers 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:



Python

Java

PHP

Go




Storages

DB DataStore

Google Cloud SQL
Google App Engine
“There is no free lunch”
Python SDK

Persistindo dados
com 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 construtor
task = Task(
name=”seminario”,
start_date=dateime(“20/11/2013”))
#demais campos podem ser informados depois

task.description = “seminario sobre NoSQL”
task.tags = [“nosql”,”cloud”,”python”]
#persiste no datastore
task.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 campos

Seleciona 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 dados
com a linguagem
Java
Java SDK
Java:

Amplamente difundida no
desenvolvimento de aplicações
comerciais
Oferece 2 abordagens

JPA (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:
@Entity
public 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 dados
com 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 Mendes
Tópicos Especiais em Bancos de Dados e
Imagens
Prof. Dr. Humberto Luiz Razente

NoSQL Na Nuvem

Notas do Editor

  • #6 Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • #9 Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • #10 Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • #11 Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • #13 Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • #14 Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • #15 Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • #16 Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • #17 Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • #18 Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • #19 Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • #20 Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • #21 Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • #22 Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • #23 Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • #24 Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • #25 Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • #27 Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • #28 Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • #29 Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • #30 Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • #32 Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • #33 Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • #34 Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • #35 Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • #36 Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • #37 Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • #38 Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.
  • #39 Em termos de tecnologia de índices, os data stores abordados não ofereceram nenhuma inovação.