NoSQL Na Nuvem

Post on 27-Jun-2015

141 views 4 download

description

Utilizando NoSQL datastores na nuvem

Transcript of NoSQL Na Nuvem

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