18 outubro 2009

Brincando nas núvens com o SimpleDB da Amazon



Dias atrás apresentei o serviço S3 da Amazon e como ele serve como uma boa ferramenta de backup usando o S3Fox.

Agora vou apresentar como brincar com o SimpleDB da Amazon que nada mais é que um banco de dados distribuído rodando na Internet.

Como faz muito tempo que não brinco com php, vou usar o php com uma biblioteca de acesso aos serviços da Amazon chamado de Tarzan.

Feito o download, basta configurar no diretório de trabalho suas permissões de acesso ao serviço da Amazon (variáveis AWS_KEY e AWS_SECRET_KEY, as mesmas usadas para o S3Fox). Não esquecer que o serviço SimpleDB precisa ser assinado na Amazon antes de poder usá-lo.

Teste simples para ver os domínios (equivalentes a tabelas no caso de SQL):
$ php -r 'require_once "tarzan.class.php";$sdb = new AmazonSDB();print_r($sdb->list_domains()->body->ListDomainsResult);'
O resultado no caso de não existir nenhum domínio seria:
SimpleXMLElement Object

(

)
Seguindo as documentações do SimpleDB do Tarzan, toda a API do SimpleDB está disponível. Vamos criar um domínio novo:
$ php -r 'require_once "tarzan.class.php";$sdb = new AmazonSDB();print_r($sdb->create_domain("dominio1"));'
$ php -r 'require_once "tarzan.class.php";$sdb = new AmazonSDB(); print_r($sdb->list_domains()->body->ListDomainsResult);'
O resultado do último comando mostra:
SimpleXMLElement Object
(
    [DomainName] => dominio1
)
Legal! O dominio1 apareceu. Colocando dados de Santa Catarina, São Paulo e Ceará:
$ php -r 'require_once "tarzan.class.php";$sdb = new AmazonSDB();print_r($sdb->put_attributes("dominio1", "Santa Catarina", Array("capital"=>"Florianopolis", "populacao"=>"0005866568")));'
$ php -r 'require_once "tarzan.class.php";$sdb = new AmazonSDB();print_r($sdb->put_attributes("dominio1", "Sao Paulo",Array("capital"=>"Sao Paulo","populacao"=>"0040442795")));'
$ php -r 'require_once "tarzan.class.php"; $sdb = new AmazonSDB(); print_r($sdb->put_attributes("dominio1","Ceara", Array("capital"=>"Fortaleza","populacao"=>"0008097276")));'
Aí, com uma pesquisa simples do tipo SQL dá para procurar estados com mais de 10 milhões de habitantes:
$ php -r 'require_once "tarzan.class.php"; $sdb = new AmazonSDB();print_r($sdb->select("select populacao from dominio1 where populacao>\"0010000000\"")->body->SelectResult);
O que reporta o estado esperado e sua população:
SimpleXMLElement Object
(
    [Item] => SimpleXMLElement Object
        (
            [Name] => Sao Paulo
            [Attribute] => SimpleXMLElement Object
                (
                    [Name] => populacao
                    [Value] => 0040442795
                )
        )

)

2 comentários:

sdemario disse...

O suporte SQL é só desta biblioteca Tarzan ou é nativo do SimpleDB? Parece uma boa alternativa. Eu só não entendi aquele limite free de 1GB, se é por mês ou após isso tem que pagar invariavelmente. Se sim, parece um pouco caro pra usuários "pequenos", não?

Fabio Ferrari disse...

Sheldon, o SQL é nativo do SimpleDB, só que é um SQL limitado. Não dá para fazer joins ou transações, por exemplo.
Sim, existem limites de 1GB de espaço, 1GB de transferência mensal e 25 horas de CPU em que o preço é free, e o que passar disso tem que pagar.
Não acho o preço da Amazon assim tão caro. Por menos de 10 dólares mensais você poderia ter uma base de alguns gigabytes em operação sem problemas.