NoSQL Na Nuvem

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