Queremos tornar muito fácil para você ser capaz de armazenar qualquer quantidade de dados semi-estruturados e ser capaz de ler, escrever e modificá-lo de forma rápida, eficiente, e com performance previsível. Não queremos que você tenha que se preocupar com servidores, discos, replicação, proteção contra falhas, monitoramento, instalação de software, configuração, patches, upgrades de hardware, largura de banda de rede, espaço de disco, sharding, rearquitetura ou uma série de outras coisas que podem causar problemas no pior momento possível.
Nós queremos que você pense grande, sonhe grande e imagine (e, em seguida, construa) aplicações intensivas de dados que podem escalar de zero usuários até dezenas ou centenas de milhões de usuários antes que você perceba. Queremos que você tenha sucesso, e nós não queremos que o seu banco de dados fique em seu caminho para o sucesso. Concentre-se em sua aplicação e na construção de uma base de usuários, e deixe a condução para nós.
Parece bom?
Olá, DynamoDB!
Hoje estamos introduzindo o Amazon DynamoDB, nosso serviço de banco de dados NoSQL com extrema escalabilidade. Construído a partir do zero para ser eficiente, escalável e altamente confiável, o DynamoDB permite que você armazene tantos dados quanto quiser e acesse-os quantas vezes você quiser, com um desempenho previsível permitido pelo uso de Solid State Disks , mais conhecido como SSD.
DynamoDB funciona na base de throughput provisionado. Quando você cria uma tabela no DynamoDB, basta nos dizer o quanto de throughput de leitura e escrita você precisa. Nos bastidores, vamos provisionar serviços para que possamos atender às suas necessidades, mantendo a latência em poucos milissegundos. Mais tarde, se suas necessidades mudarem, você pode simplesmente aumentar ou diminuir o throughput e vamos ajustar de acordo com seu pedido. Você pode fazer isso online, sem tempo de inatividade e sem impacto sobre o seu throughput atual. Em outras palavras, você pode escalar até mesmo enquanto o seu banco de dados estiver em atividade.
Fizemos o DynamoDB muitíssimo fácil de usar. Tabelas recém-criadas geralmente ficarão prontas para serem usadas em um minuto ou dois. Com a tabela criada, basta começar a armazenar dados (tantos quantos você quiser) nela, pagando apenas pelo armazenamento que você usar (não há necessidade de provisionamento prévio de armazenamento). Mais uma vez, nos bastidores, vamos provisionar o armazenamento adequado para você.
Cada tabela deve ter um índice primário. Nesta versão do DynamoDB, você pode escolher entre dois tipos de chaves primárias: Hash Keys Simples e Hash Keys Compostas com Intervalo de Chaves.
- Hash Keys Simples dá ao DynamoDB a abstração de uma Tabela Hash Distribuída e são usados para índexar em uma chave única. A chave é processada em múltiplas partições para otimizar a distribuição da carga de trabalho.
- Hash Keys Compostas com Intervalo de Chaves fornecem a capacidade de criar uma chave primária que é composta de dois atributos - um atributo hash e um atributo de intervalo. Quando você consulta usando este tipo de chave, o atributo hash deve ser combinado mas um intervalo pode ser especificado para o atributo de intervalo. Você pode usar esse recurso para executar consultas como "todos os pedidos feitos pelo José Papo nas últimas 24 horas."
Cada item em uma tabela DynamoDB consiste de um conjunto de pares chave / valor. Cada valor pode ser uma string, um número, um string, ou um conjunto de número. Quando você escolhe obter (get) um item, você pode escolher entre uma leitura fortemente consistente e uma leitura eventualmente consistente baseado em suas necessidades. A leitura eventualmente consistente consome metade dos recursos, então há uma consideração de throughput para se pensar.
Parece ótimo, mas e a confiabilidade e a durabilidade de dados? Não se preocupe, nós pensamos nisso também! Quando você cria uma tabela DynamoDB em uma determinada região, vamos replicar seus dados de forma síncrona através de servidores em várias zonas de disponibilidade. Você nunca será afetado por falhas de hardware ou instalação. Se alguma coisa falhar, vamos obter os dados de outro servidor.
Eu não posso deixar de reforçar o desempenho operacional do DynamoDB. Você pode começar pequeno (digamos, 5 leituras por segundo) e escalar até 50, 500, 5000, ou até mesmo 50 mil leituras por segundo. Tudo isso de forma automática e sem alterações ao seu código. E (é claro), você pode fazer o mesmo para escritas. O DynamoDB vai crescer com você, e não vai ficar entre você e o seu sucesso.
Como parte da Oferta Gratuita AWS, você ganha 100 MB de armazenamento gratuito, 5 escritas por segundo, e 10 leituras fortemente consistentes por segundo (ou 20 leituras eventualmente consistentes por segundo). Além disso, o preço é baseado em quanto throughput você provisiona e quantos dados você armazena. Como sempre ocorre na AWS, não há custos adicionais por transferência de dados entre uma instância EC2 e uma tabela DynamoDB na mesma região.
Você pode criar até 256 tabelas, cada uma delas provisionadas para 10.000 leituras e 10.000 escritas por segundo. Estamos prontos, dispostos e somos capazes de aumentar qualquer um destes valores, basta clicar aqui e nos fornecer algumas informações adicionais. Alguns de nossos clientes iniciais do programa Beta privado já excederam e muito esses limites default!
DynamoDB através do AWS Management Console
O AWS Management Console tem um novo tab chamado DynamoDB. Você pode criar uma nova tabela, provisionar throughput, criar índices, e configurar alarmes CloudWatch com apenas alguns cliques
Você pode entrar com requisitos de throughput manualmente:
Ou pode usar a calculadora embutida:
Você pode usar as métricas CloudWatch para disparar alarmes e adicionar throughput extra para uma tabela:
Você pode monitorar as métricas cloudWatch para saber como está seu consumo e analisar detalhes do DynamoDB:
Você pode facilmente aumentar ou diminuir throughput:
Programando com o DynamoDB
Os SDKs da AWS foram atualizados e agora incluem suporte completo para o DynamoDB. Aqui vão alguns exemplos usando o AWS SDK para PHP.
O primeiro passo é incluir o SDK e criar um objeto de referência:
require_once("sdk.class.php");
$DDB = new AmazonDynamoDB(
array('credentials' => 'production'));
Criar uma tabela requer três argumentos: nome da tabela, especificação da chave e especificação de throughput:
// Create a table
$Schema =
array('HashKeyElement' =>
array('AttributeName' => 'RecordId',
'AttributeType' => AmazonDynamoDB::TYPE_STRING));
$Throughput =
array('ReadsPerSecond' => 5, 'WritesPerSecond' => 5);
$Res = $DDB->create_table(
array('TableName' => 'Sample',
'KeySchema' => $Schema,
'ProvisionedThroughput' => $Throughput));
Depois que create_table retornar, o status da tabela ficará em CREATING. Ela transicionará para ACTIVE quando a tabela for provisionada e pronta para aceitar dados. Você pode usar a função describe_tablepara verificar o status e outras informações sobre a tabela:
$Res = $DDB->describe_table(
array('TableName' => 'Sample'));
print_r($Res->body->Table);
Esse é o resultado como um objeto PHP:
CFSimpleXML Object
(
[CreationDateTime] => 1324673829.32
[ItemCount] => 0
[KeySchema] => CFSimpleXML Object
(
[HashKeyElement] => CFSimpleXML Object
(
[AttributeName] => RecordId
[AttributeType] => S
)
)
[ProvisionedThroughput] => CFSimpleXML Object
(
[ReadsPerSecond] => 5
[WritesPerSecond] => 5
)
[TableName] => Sample
[TableSizeBytes] => 0
[TableStatus] => ACTIVE
)
É realmente simples inserir novos itens. Você precisa especificar o tipo de dado de cada item; aqui está como você pode fazer isso (as outras constantes de tipos de dados são TYPE_ARRAY_OF_STRINGS e TYPE_ARRAY_OF_NUMBERS):
for ($i = 1; $i < 100; $i++)
{
print($i);
$Item =
array('RecordId' =>
array(AmazonDynamoDB::TYPE_STRING => (string) $i),
'Square' =>
array(AmazonDynamoDB::TYPE_NUMBER => (string) ($i * $i)));
$Res = $DDB->put_item(
array('TableName' => 'Sample', 'Item' => $Item));
}
Recuperação pela chave de RecordId também é igualmente fácil:
for ($i = 1; $i < 100; $i++)
{
$Key =
array('HashKeyElement' =>
array(AmazonDynamoDB::TYPE_STRING => (string) $i));
$Item = $DDB->get_item(
array('TableName' => TABLE,
'Key' => $Key));
print_r($Item->body->Item);
}
Cada item retornado se parece com um objeto PHP:
CFSimpleXML Object
(
[RecordId] => CFSimpleXML Object
(
[S] => 44
)
[Square] => CFSimpleXML Object
(
[N] => 1936
)
)
A API DynamoDB também inclui funções de query e scan. A função de query consulta atributos de chave primária e suporta o uso de operadores de comparação. A função de scan verifica a tabela inteira com filtro opcional dos resultados da verificação. As queries são geralmente mais eficiente do que scans.
Você também pode atualizar itens, recuperar vários itens, excluir itens ou excluir vários itens. DynamoDB inclui atualizações condicionais (para garantir que uma escrita não ocorra dentro de uma operação de leitura / modificação / escrita, bem como operações atômicas. Leia mais no Guia do Desenvolvedor do Amazon DynamoDB.
E aí está, o nosso primeiro grande lançamento de 2012! Eu gostaria de ouvir mais sobre como você planeja usar o DynamoDB em suas aplicações. Por favor, fique à vontade para deixar um comentário no blog.
-- José Papo
Recent Comments