DevSecOpsARTIGO

Computação em Nuvem com Amazon Web Services – Parte 05: processamento de conjunto de dados na nuvem com SimpleDB

Conheça os conceitos básicos do Amazon SimpleDB (SDB) e explore algumas
das funções fornecidas pelo boto, uma biblioteca Python de software
livre para interação com SDB.

Nesta série “Computação em nuvem com Amazon Web Services”,
saiba mais sobre a computação em nuvem usando Amazon Web Services.
Explore como os serviços fornecem uma alternativa convincente para
arquitetar e desenvolver aplicativos escaláveis e confiáveis.

Neste
artigo, conheça alguns dos conceitos básicos e veja algumas das funções
fornecidas por boto. Você pode conferir os outros conteúdos desta série:

Amazon SimpleDB

Amazon SDB é uma estrutura de indexação e consulta de conjunto de dados
rápida, escalável e em tempo real que facilita o armazenamento e a
recuperação de dados estruturados para os seus aplicativos baseados em
Amazon Web Services.

O SDB foi projetado para funcionar bem com outros Amazon
Web Services, como
Elastic Compute Cloud (EC2)
e Simple Storage Service (S3). Ele permite que você
crie uma pilha de aplicativo inteira no ambiente Amazon Web Services.
Você paga pelo serviço totalmente com base no uso. Há também uma camada
livre de serviço disponível.

Alguns recursos valiosos fornecidos por SDB:

  1. Confiabilidade: SDB foi projetado para armazenar os dados indexados de maneira redundante em vários datacenters e disponibilizá-las sempre.
  2. Velocidade: O SDB foi projetado para fornecer rápida recuperação de dados,
    especialmente se as solicitações tiverem sido feitas no ambiente Amazon
    Web Services a partir de uma instância EC2.
  3. Simplicidade: O modelo de programação para acessar e usar SDB é simples e pode ser
    usado a partir de uma variedade de linguagens de programação.
  4. Segurança: O SDB foi projetado para fornecer um alto nível de segurança. O acesso
    aos dados está restrito aos usuários autorizados.
  5. Flexibilidade: O SDB permite armazenar dados instantaneamente sem a necessidade de esquemas predefinidos.
  6. Baixo custo: As taxas do SDB são bem baixas. É cobrado somente o que você realmente usa.

O restante desta seção explora os conceitos que sustentam o SD.

IBM e Amazon Web Services

IBM e AWS fizeram uma parceria para fornecer acesso ao software IBM em
um ambiente de computação virtual. A experiência Amazon EC2 permite
avaliar e usar o software sem precisar instalá-lo no seu próprio
sistema.

É possível ajustar a capacidade quase instantaneamente, criando
aplicativos prontos para uso pela empresa em um ambiente confiável de
alto desempenho em que você paga somente pelo tempo e pela capacidade de
uso. As ofertas de software em EC2 incluem:

  • DB2 Express-C 9.5
  • Informix Dynamic Server Developer Edition 11.5
  • WebSphere Portal Server e Lotus Web Content Management Standard Edition
  • WebSphere sMash

Trata-se de um código no nível do produto, com todos os recursos e
opções ativados.Obtenha mais informações e faça o download de Amazon
Machine Images para esses produtos no developerWorks Cloud Computing Resource Center.

Domínios

O domain é um contêiner que permite armazenar dados
estruturados e executar consultas com relação a ele. Os dados são
armazenados em um domínio como itens. Conceitualmente, um
domínio é similar a uma guia em uma planilha; os itens são linhas na
planilha.
É possível realizar consultas com relação a um domínio,
mas ainda não é possível fazer consultas entre domínios na versão atual
do SDB.

Cada domínio tem os seguintes metadados associado a ele:

  • Data e hora da última atualização dos metadados
  • Número de todos os itens no domínio
  • Número de todos os pares nome-valor do atributo no domínio
  • Número de nomes de atributo exclusivos no domínio
  • Tamanho total de todos os nomes de item no domínio, em bytes
  • Tamanho total de todos os valores de atributo, em bytes
  • Tamanho total de todos os nomes de atributo, em bytes

O
SDB, como Simple Queue Service (SQS), segue o modelo “consistência
eventual”. O SDB mantém várias cópias de cada domínio para tolerância a
falhas. Toda mudança feita em um domínio é propagada em todas as
cópias.

Como essa operação às vezes leva alguns segundos, dependendo da carga do
sistema e da latência de rede, um consumidor do seu domínio pode não
ver as alterações imediatamente.

As mudanças serão finalmente
propagadas em todo o SDB, mas esse atraso é uma importante consideração
de quando projetar os seus aplicativos baseados em SDB.

Itens

A versão atual do SDB tem limitações que devem ser levadas em
consideração no projeto do aplicativo. A Tabela 1 mostra as limitações
(como especificado pelo Amazon em sua documentação mais recente).

Tabela 1. Limitações atuais

Parâmetro Restrições atuais
Tamanho do domínio 10 GB por domínio
250.000.000 pares de nome-valor de atributo
3-255 caracteres (a-z, A-Z, 0-9,
‘_’, ‘-‘ e ‘.’)
Domínios por conta Amazon Web Services 100
Atributos Pares nome-valor por item são 256.
Comprimento do nome é de 1024 bytes.
Comprimento do valor é de 1024 bytes.

Somente
os caracteres permitidos são os UTF-8 válidos em documentos XML.
Caracteres de controle e todas as sequências não válidas no XML não são
permitidos.

Por operação PutAttributes limitada a 100
Solicitado por operação Select ou QueryWithAttributes limitada a 256.

Máximo de itens na resposta de consulta 256
Tempo máximo de execução da consulta 5 segundos
Máximo de predicados por expressão de consulta 10
Máximo de comparações por predicado de expressão de consulta 10
Número máximo de atributos exclusivos por expressão de seleção 20
Número máximo de comparações por expressão de seleção 20
Tamanho máximo da resposta para
QueryWithAttributes e Select
1 MB

Preços

Amazon fornece uma camada livre para SDB, junto com a precificação
para uso acima do limite da camada livre. As tarifas têm como base:

  • O uso da máquina de cada solicitação de SDB.
  • A
    quantidade da capacidade da máquina usada para executar a solicitação
    especificada, normalizada para a capacidade por hora de um processador
    Xeon de 1,7 GHz.

Camada livre

Não há nenhuma cobrança nas primeiras 25 horas da máquina, 1 GB de
transferência de dados e 1 GB de armazenamento que você consome todo
mês. Essa é uma quantidade
significativa de uso sendo fornecida gratuitamente por tempo limitado
pelo Amazon. Muitos tipos de aplicativos podem operar muito facilmente
nessa camada livre. A Tabela 2 mostra a precificação de exemplo.

Tabela 2. Precificação por utilização da máquina

Quantidade Custo
Primeiras 25 horas da máquina Grátis
Horas adicionais da máquina $0,14 por hora por máquina

A Tabela 3 mostra a quantidade de dados transferidos para o e do SDB.
Não há nenhuma taxa para os dados transferidos entre o SDB e outros
Amazon Web Services na mesma região.

Os dados transferidos entre o SDB e
outros Amazon Web Services entre regiões serão cobrados com base em
taxas de transferência de dados pela Internet em ambos os lados da
transferência.

Tabela 3. Precificação para transferência de dados

Tipo de transferência Custo
Transferência de todos os dados Primeiros 1 GB de dados de transferência de entrada
são grátis
$0,100 por GB – todos os dados adicionais de transferência de entrada

Primeiros 1 GB de dados de transferência de saída são grátis
$0,170
por GB – primeiros 10 TB/mês de dados transferência de saída
$0,130 por GB – próximos 40 TB/mês de dados transferência de saída
$0,110 por GB – próximos 100 TB/mês de dados transferência de saída
$0,100 por GB – transferência de saídade dados /mês acima de 150 TB

A Tabela 4 descreve os custos para armazenamento de dados estruturados.

Tabela 4. Armazenamento de dados estruturados

Quantidade de armazenamento Custo
Todo armazenamento de dados Primeiro 1 GB de dados é grátis.
$0,25 por GB /mês – todo armazenamento de dados adicional

Para a precificação mais recente, consulte Amazon SDB. Também é possível usar a calculadora mensal simples
fornecida pelo Amazon para calcular seus custos de uso mensais para SDB e os outros Amazon Web Services.

Apresentando o SDB

Para começar a explorar o SDB, é preciso se inscrever em uma conta Amazon Web Services (consulte ao final do artigo na seção Recursos). Consulte a Parte 2
desta série para instruções detalhadas sobre a inscrição em Amazon Web
Services. Quando você tiver uma conta Amazon Web Services, ative o
serviço Amazon SDB para a sua conta:t:

  1. Faça login
    na sua conta Amazon Web Services.
  2. Navegue para a página inicial do SDB.
  3. Clique em Sign Up For This Web Service no lado direito.
  4. Forneça as informações solicitadas e finalize o processo de inscrição.

Toda
comunicação com qualquer um dos Amazon Web Services será por meio da
interface SOAP ou da interface de consulta. Neste artigo, você usa a
interface de consulta por meio de uma biblioteca de terceiros para
comunicação com o SDB.

É preciso obter suas chaves de acesso, que podem ser acessadas pela página de dados da conta de serviços da Web selecionando View Access Key Identifiers. Você está agora configurado para usar Amazon Web Services e ativou o serviço SDB para a sua conta.

Interagindo com o SDB

Para este exemplo, use uma biblioteca de software livre de terceiros Python com o nome
boto para se familiarizar com SDB executando pequenos fragmentos de código em um shell Python.

Instalar boto e configurar o ambiente

Faça o download do boto.
A versão mais recente, no momento da redação deste
artigo, era 1.6b. Descompacte o archive ZIP no diretório de sua escolha.
Vá até esse diretório e execute setup.py para instalar boto no seu ambiente Python local, como mostrado na Listagem 1.

Listagem 1. Instalar boto

$ cd directory_where_you_unzipped_boto

$ python setup.py install

Configure algumas variáveis de ambiente para apontar para as chaves de
acesso de Amazon Web Services. As chaves de acesso estão disponíveis em Web Services Account information.

Listagem 2. Configurar variáveis de ambiente

# Export variables with your AWS access keys
$ export AWS_ACCESS_KEY_ID=Your_AWS_Access_Key_ID
$ export AWS_SECRET_ACCESS_KEY=Your_AWS_Secret_Access_Key

Verifique se tudo está configurado corretamente iniciando um shell
Python e importando a biblioteca boto, como indicado na Listagem 3.

Listagem 3. Verificar a configuração

$ python
Python 2.4.5 (#1, Apr 12 2008, 02:18:19)
[GCC 4.0.1 (Apple Computer, Inc. build 5367)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import boto
>>>

Explorar SDB com boto

Use a classe SDBConnection para fornecer a interface
principal para a interação com o SDB. Você usará boto no console Python.
O exemplo chama métodos diferentes no objeto SDBConnection
e examina as respostas retornadas pelo SDB, o que o ajudará a se
familiarizar com a API enquanto você explora os conceitos que estão por
trás de SDB.

A primeira etapa é criar um objeto de conexão
com o SDB usando as chaves de acesso de Amazon Web Services exportadas
anteriormente para o seu ambiente. A biblioteca boto sempre verifica o
ambiente primeiro para detectar se essas variáveis são definidas. Se
elas forem definidas, boto automaticamente as usará ao criar a conexão.

Listagem 4. Criar uma conexão para SDB

>>> import boto
>>> sdb_conn = boto.connect_sdb()
>>>

No restante deste artigo, é possível usar o objeto sdb_conn, criado acima, para interagir com o SDB. É possível criar novos domínios especificando um nome para o domínio.

Listagem 5. Criar um domínio

>>> d1 = sdb_conn.create_domain('devworks-dom-1')
>>>

Recupere uma lista de todos os seus domínios, que retorna um objeto
result set que é essencialmente uma lista Python, como mostrado na
Listagem 6. É possível iterar essa lista e acessar cada domínio.

Listagem 6. Listar todos os domínios

>>> all_domains = sdb_conn.get_all_domains()
>>>
>>> len(all_domains)
1
>>>
>>> for d in all_domains:
... print d.name
...
devworks-dom-1

Também é possível recuperar um domínio único por nome.

Listagem 7. Listar domínio único

>>> my_domain = sdb_conn.get_domain('devworks-dom-1')
>>>
>>> print my_domain.name
devworks-dom-1

Domínios criados recentemente ficam, evidentemente, vazios até você adicionar itens a eles.
Crie um novo item em um domínio e adicione atributos a ele.

Listagem 8. Criar novo item

>>> my_domain = sdb_conn.get_domain('devworks-dom-1')
>>>
>>> i1 = my_domain.new_item('test_item_1')
>>>
>>> i1['cars'] = 'BMW'
>>>
>>> i1['fruits'] = ['apple', 'orange', 'mango']
>>>

Os itens podem ser recuperados de um domínio por meio da especificação
do nome do item, que deve ser exclusivo. Isso é similar ao conceito de
uma chave primária em um banco de dados relacional.

Listagem 9. Recuperar um item e seus atributos

>>> my_item = my_domain.get_item('test_item_1')
>>>
>>> print my_item
{u'cars': u'BMW', u'fruits': [u'apple', u'mango', u'orange']}
>>>

O objeto de item retornado acima é um objeto Item de
produção que recuperará automaticamente todos os atributos desse item do
SDB quando você acessar qualquer um de seus atributos. Qualquer
atualização feita nos valores dos atributos desse item será salva
automaticamente no SDB.

Listagem 10. Atualizar atributos

>>> my_item['cars']
u'BMW'
>>>
>>> my_item['cars'] = 'Honda'
>>>
>>> my_item['cars']
'Honda'
>>>

É possível também recuperar itens e atributos usando a classe SDBConnection e especificando os nomes de domínio e item.

Listagem 11. Recuperar um item usando SDBConnection

>>> 
>>> sdb_conn.get_attributes('devworks-dom-1','test_item_1')
{u'cars': u'Honda', u'fruits': [u'apple', u'mango', u'orange']}
>>>

Um item será excluído automaticamente pelo SDB se não tiver nenhum atributo.
É possível também excluir especificamente um item e seus atributos.

Listagem 12. Excluir um item e seus atributos

>>> sdb_conn.get_attributes('devworks-dom-1','test_item_1')
{u'cars': u'Honda', u'fruits': [u'apple', u'mango', u'orange']}
>>>
>>> sdb_conn.delete_attributes('devworks-dom-1','test_item_1')
True
>>> sdb_conn.get_attributes('devworks-dom-1','test_item_1')
{}
>>>

Listagem 13. Excluir um domínio

>>> sdb_conn.delete_domain('devworks-dom-1')
True
>>>

Consultar domínios SDB

Para pesquisar seus dados estruturados, o SDB fornece uma linguagem
de consulta customizada que contém pares nome-valor de atributo
associados aos itens. O componente básico para criar uma expressão de
consulta é conhecido como predicate. Cada predicado é delineado por um colchete reto
que envolve um atributo, um operador de comparação e um valor a ser comparado.

Por exemplo, um predicado (como [‘desc’ = ‘Hello Devworks’]) define uma comparação de igualdade no atributo desc.
Cada predicado é avaliado separadamente e produz um conjunto de nomes
de item. É possível combinar vários predicados usando operações
definidas, como union e
intersection para criar consultas complexas.

Ao usar predicados em suas consultas, é importante considerar que todas
as comparações de predicado sejam feitas de maneira lexicográfica pelo
SDB. É preciso garantir que os dados sejam armazenados em atributos com
o uso da representação de cadeia de caractere apropriada. Tenha em
mente que as consultas que levarem mais de 5 segundos serão
automaticamente interrompidas pelo SDB.

Listagem 14. Criar alguns dados de teste

>>> d2 = sdb_conn.create_domain('devworks-dom-2')
>>>
>>> i1 = d2.new_item('car1')
>>>
>>> i1['make']= 'BMW'
>>> i1['color']='grey'
>>> i1['year']='2008'
>>> i1['desc']='Sedan'
>>> i1['model']='530i'
>>>
>>> i2 = d2.new_item('car2')
>>>
>>> i2['make']= 'BMW'
>>> i2['color']='white'
>>> i2['year']='2007'
>>> i2['desc']='Sports Utility Vehicle'
>>> i2['model']='X5'
>>>

Listagem 15. Consulta com predicado único

>>> rs = d2.query("['make' = 'BMW']")
>>> for result in rs:
... print result.name
...
car1
car2
>>>

Listagem 16. Consulta com vários predicados

>>> rs = d2.query("['make' = 'BMW'] intersection ['year' = '2007']")
>>> for result in rs:
... print result.name
...
car2
>>>

A linguagem da consulta fornece suporte a uma variedade de operadores
de comparação.
Ela permite fazer consultas em intervalos e consultas de
atributo com vários valores.

Para obter um bom alcance de todas as
possibilidades e boas práticas para criar consultas e ajustá-las com
precisão para melhor desempenho, é altamente recomendado revisar os
artigos introdutórios na linguagem de consulta fornecida pelos Amazon
Web Services.

É possível também recuperar os metadados de um domínio que fornecem o número total de itens no domínio (além de outros dados).

Listagem 17. Metadadados de um domínio

>>> my_domain = sdb_conn.get_domain('devworks-dom-2')
>>>
>>> my_metadata = my_domain.get_metadata()
>>>
>>> print my_metadata.item_count
2
>>> print my_metadata.item_names_size
8
>>> print my_metadata.attr_value_count
10
>>> print my_metadata.attr_names_size
22
>>> print my_metadata.attr_values_size
56
>>> print my_metadata.timestamp
1231798889
>>>

Conclusão

Este artigo apresentou o serviço SDB do Amazon. Você viu alguns dos
conceitos básicos e explorou algumas das funções fornecidas por boto,
uma biblioteca Python de software livre para interação com o SDB.

Recursos

Aprender

Obter produtos e tecnologias

***

artigo publicado originalmente no developerWorks Brasil, por Prabhakar Chaganti


Prabhakar Chaganti é o diretor de tecnologia (CTO) da Ylastic, uma empresa que está criando
uma interface unificada exclusiva para arquitetar, gerenciar e monitorar todo o ambiente de
computação da nuvem AWS de um usuário: EC2, S3, SQS e SimpleDB. Ele é autor de dois livros
recentes, Xen Virtualization e GWT Java AJAX Programming É também vencedor do
prêmio de escolha da comunidade pelo dispositivo virtual mais inovador no VMware Global Virtual
Appliance Challenge.

é o portal de tecnologia da IBM para profissionais de TI de todo o mundo. Colabore, aprenda a criar aplicativos inovadores e compreenda tecnologias avançadas. Acesse mais artigos e tutoriais em www.ibm.com/developerworks/br

Ver perfil