O Amazon DynamoDB é um serviço de banco de dados NoSQL de gestão completa que fornece um desempenho rápido e previsível com facilidade de escalabilidade. O Amazon DynamoDB permite aos clientes redirecionar as cargas administrativas de operação, assim como escalar bancos de dados distribuídos para a AWS. Dessa forma, os clientes ficam isentos de preocupações com provisionamento, instalação e configuração de hardware, replicação, patches de software ou escalabilidade de cluster.
O Amazon DynamoDB elimina um dos maiores empecilhos da escalabilidade de bancos de dados, a gestão do software de banco de dados e o provisionamento de hardware necessário para executá-lo. Os clientes podem implantar um banco de dados não relacional em apenas alguns minutos. O DynamoDB faz o particionamento e o reparticionamento de seus dados e fornece capacidade de servidor adicional, à medida que sua tabela aumenta de tamanho, ou sua taxa de transferência provisionada é aumentada. Além disso, o Amazon DynamoDB replica simultaneamente os dados através de três recursos em uma região da AWS, proporcionado maior disponibilidade e durabilidade de dados.
O Amazon DynamoDB armazena três réplicas geograficamente distribuídas de cada tabela para permitir maior disponibilidade e durabilidade de dados. A consistência de leitura representa a forma e o momento em que a gravação bem-sucedida ou a atualização de uma gravação de item de dados é refletida em uma operação de leitura posterior desse mesmo item. O Amazon DynamoDB apresenta uma lógica que permite que você especifique as características de consistência desejadas para cada solicitação de leitura dentro de seu aplicativo.
Ao fazer a leitura de dados no Amazon DynamoDB, os usuários podem especificar se desejam que a leitura seja eventualmente consistente ou fortemente consistente:
O Amazon DynamoDB suporta atualizações atômicas rápidas. É possível aumentar ou diminuir um atributo numérico em uma fila usando uma chamada API única. Do mesmo modo, também é possível adicionar ou remover de um conjunto de sequências de caracteres automaticamente. Veja nossa documentação para saber mais sobre atualizações atômicas.
O Amazon DynamoDB é executado exclusivamente em discos de estado sólido (SSDs). Os SSDs ajudam a atingir objetivos em projetos de momentos de resposta previsível de baixa latência para armazenar e acessar dados em qualquer dimensão. O alto desempenho de E/S dos SSDs também nos permite atender a solicitações de grandes cargas de trabalho com boa relação custo-benefício e oferecer essa eficiência a preços acessíveis.
Assim como com qualquer produto, incentivamos os possíveis clientes do Amazon DynamoDB a considerar o custo total de uma solução, não apenas o valor de um preço específico. O custo total da prestação de serviços para cargas de trabalho de bancos de dados é uma função dos requisitos de tráfego de solicitações e da quantidade de dados armazenados. A maioria das cargas de trabalho de banco de dados é caracterizada por uma solicitação para E/S elevada (leituras/segundo e gravações/segundo altas) por GB armazenado. O Amazon DynamoDB é estruturado com discos de estado sólido, que aumentam os custos por GB armazenado, relativo a mídia rotativa, o que nos permite também oferecer preços muito acessíveis. Com base no que sabemos a respeito de cargas de trabalho de banco de dados típicas, acreditamos que o custo total para a utilização do serviço do DynamoDB baseado em SSD será usualmente mais baixo que o custo de utilização de um banco de dados típico relacional ou não relacional com base em uma mídia rotatória. Se você tiver um caso de uso que envolva o armazenamento de uma grande quantidade de dados raramente acessados, então o DynamoDB pode não ser adequado. Recomendamos que use o S3 para casos como esse.
Também é importante notar que o custo de armazenamento reflete o custo de armazenar várias cópias de cada item de dados por meio de vários recursos em uma região AWS.
Não. O DynamoDB oferece facilidade de escalabilidade para que você possa iniciar com demandas pequenas, aumentando e diminuindo a escala conforme a necessidade. Caso necessite de um desempenho rápido e previsível em qualquer escala, o DynamoDB pode ser a escolha certa para você.
Para começar a usar o Amazon DynamoDB ainda hoje, clique no botão "Registrar", na página de detalhe do Amazon DynamoDB. A partir daí, você pode começar a utilizar o Amazon DynamoDB usando tanto o AWS Management Console quanto APIs do Amazon DynamoDB. Caso você já seja usuário do AWS Management Console, é possível criar uma tabela com o Amazon DynamoDB e começar a explorar com apenas alguns cliques.
O Amazon DynamoDB suporta operações de valor-chave GET/PUT, usando uma chave primária definida pelo usuário. A chave primária é o único atributo solicitado para itens em uma tabela e identifica cada item especificamente. A chave primária é especificada quando você cria uma tabela.
Uma chave primária pode tanto ser uma chave de hash de atributo único quanto uma chave de faixa de hash composta. Uma chave primária de hash de atributo único pode ser, por exemplo, "UserID". Isso permitiria a rápida leitura e gravação de dados para cada item associado a uma determinada ID do usuário.
Uma chave de faixa de hash composta é indexada como um elemento de chave de hash e um elemento de chave de faixa. Essa chave multipartes mantêm uma hierarquia entre o primeiro e o segundo valores de elemento. Por exemplo, uma chave de faixa de hash composta pode ser uma combinação de "UserID" (hash) e "carimbo de data/hora" (faixa). Mantendo a constante do elemento de chave hash, é possível pesquisar por meio do elemento de chave de faixa para recuperar itens. Isso permitiria o uso da API Query para, por exemplo, recuperar todos os itens para uma UserID específica em uma faixa de carimbo de data/hora.
Depois de criar uma tabela usando o AWS Management Console ou a API CreateTable, você poderá usar as APIs PutItem ou BatchWriteItem para inserir um item. Então é possível usar GetItem, BatchGetItem, ou, se chaves primárias compostas estiverem ativadas e em uso na tabela, usar a API Query para recuperar os itens que você adicionou à tabela.
Sim, é possível especificar uma condição que precisa ser cumprida por um PUT, atualizar ou excluir uma operação em um item a ser concluído. Por exemplo, você pode escolher atualizar um item somente se ele tiver um determinado valor. É possível, também, escolher colocar um item em uma tabela somente se não existir nenhum registro para a chave primária que você especificou. Operações condicionais permitem aos usuários implementar sistemas de controle de simultaneidade otimista. Para saber mais sobre operações condicionais, consulte a documentação.
Sim, o Amazon DynamoDB permite operações de decremento e incremento atômico em valores escalares.
Os aplicativos baseados na web atuais geram e consomem quantidades massivas de dados. Por exemplo, um jogo on-line pode começar com apenas alguns milhares de usuários e uma carga de trabalho de banco de dados leve, consistindo em 10 gravações por segundo e 50 leituras por segundo. No entanto, se o jogo obtiver sucesso, é possível crescer rapidamente para um milhão de usuários e gerar dezenas (ou até centenas) de milhares de gravações e leituras por segundo. É possível também criar terabytes de dados por dia, ou ainda mais. Desenvolver seus aplicativos junto ao Amazon DynamoDB permite que você comece com uma demanda pequena e simplesmente aumente a capacidade de solicitações para uma tabela, à medida que suas solicitações aumentam, sem incorrer em tempo ocioso. Você paga tarifas com uma boa relação custo-benefício para a capacidade de solicitação provisionada, e deixa o Amazon DynamoDB fazer o trabalho desde o particionamento de dados e tráfego até os recursos de servidor suficientes para satisfazer as suas necessidades. O Amazon DynamoDB faz a gestão e a administração de banco de dados e você simplesmente armazena e requisita seus dados. Replicação e failovers automáticos fornecem tolerância de falha integrada, maior disponibilidade e durabilidade de dados. O Amazon DynamoDB lhe proporciona a tranquilidade de que seu banco de dados tem uma gestão completa e pode crescer com as solicitações de seu aplicativo.
Embora o Amazon DynamoDB solucione os principais problemas de escalabilidade, gestão, desempenho e confiabilidade de banco de dados, ele não possui todas as funcionalidades de um banco de dados relacional. Não suporta consultas relacionais complexas (p. ex., associações) ou transações complexas. Se sua carga de trabalho precisa dessa funcionalidade, ou se estiver procurando compatibilidade com um mecanismo relacional existente, você pode querer executar um mecanismo relacional no Amazon RDS ou Amazon EC2. Enquanto mecanismos de banco de dados relacionais fornecem funcionalidades e recursos robustos, escalar uma carga de trabalho além de uma instância de banco de dados relacional específica é altamente complexo e requer tempo e experiência significativos. Do mesmo modo, se você já sabe os requisitos de escalabilidade para seu novo aplicativo, não precisando de recursos relacionais, o Amazon DynamoDB pode ser a sua melhor escolha.
Os dois serviços são bancos de dados não relacionais que eliminam a tarefa de administração de banco de dados. O Amazon DynamoDB se concentra no provisionamento de escalabilidade contínua e desempenho rápido e previsível. É executado em discos de estado sólido (SSDs) para momentos de respostas de baixa latência, sem limites da capacidade de requisição ou do tamanho de armazenamento para uma tabela específica. É por isso que o Amazon DynamoDB particiona automaticamente seus dados e trabalha com um número suficiente de servidores para satisfazer os requisitos de escala que você fornece. Em comparação, uma tabela no Amazon SimpleDB possui uma limitação de armazenamento total de 10 GB e está limitada à capacidade de solicitações que pode alcançar (normalmente inferior a 25 gravações/segundo); sendo você o responsável por administrar o particionamento e reparticionamento de dados em tabelas do SimpleDB adicionais, caso necessite de um dimensionamento adicional. Enquanto o SimpleDB possui limitações de escalabilidade, ele pode ser ideal para cargas de trabalho menores e que requerem flexibilidade de consulta. O Amazon SimpleDB indexa automaticamente todos os atributos de item e, desse modo, suporta flexibilidade de consulta em detrimento do desempenho e escala.
O post sobre o DynamoDB no blog de Werner Vogels, CTO da Amazon, oferece mais informações sobre a evolução da tecnologia de banco de dados não relacionais na Amazon.
O Amazon DynamoDB armazena dados estruturados, indexados por chave primária, e permite acesso de gravação e leitura de baixa latência a itens de 1 byte a 64KB. O Amazon S3 armazena BLOBs não estruturados e é adequado para armazenar grandes objetos de até 5 TB. A fim de otimizar seus custos com os serviços AWS, objetos ou arquivos grandes devem ser armazenados no Amazon S3, enquanto pequenos elementos de dados ou arquivo ponteiros (possivelmente para objetos do Amazon S3) devem ser salvos no Amazon DynamoDB.
O Amazon DynamoDB lhe permite especificar a taxa de transferência de solicitações que você deseja que sua tabela alcance. Nos bastidores, o serviço controla o provisionamento de recursos para alcançar o valor da taxa de transferência de solicitações. Em vez de lhe perguntar sobre instâncias, hardware, memória e outros fatores que podem afetar seu valor de taxa de transferência, nós simplesmente solicitamos que você forneça o nível de taxa de transferência que deseja alcançar. Esse é o modelo de serviço de taxa de transferência provisionada.
O Amazon DynamoDB lhe permite especificar as necessidades de taxa de transferência em termos de unidades de capacidade de leitura e de capacidade de gravação para a sua tabela. Durante a criação de uma tabela, você especifica as necessidades de capacidade de gravação e leitura, e o Amazon DynamoDB particiona e reserva automaticamente a quantidade apropriada de recursos para atender às suas solicitações de taxa de transferência. Para decidir sobre os valores de taxa de transferência de gravação e leitura requeridos, considere o número de chamadas de API no plano de dados de leituras e gravações que você espera executar por segundo. Se em algum momento prever um crescimento de tráfego que possa vir a exceder a taxa de transferência provisionada, você pode simplesmente atualizar os valores da taxa de transferência provisionada por meio do AWS Management Console ou de APIs do Amazon DynamoDB. Também é possível reduzir o valor da taxa de transferência provisionada para uma tabela caso haja diminuição na demanda. O Amazon DynamoDB permanecerá disponível enquanto aumenta ou diminui o nível de escalabilidade da taxa de transferência.
Ao armazenar os dados, o Amazon DynamoDB divide uma tabela em várias partições e distribui os dados com base no elemento de chave de hash da chave primária. Enquanto aloca recursos de capacidade, o Amazon DynamoDB considera um padrão de acesso relativamente aleatório através de todas as chaves primárias. Você deve configurar o modelo de dados para que suas solicitações resultem em uma distribuição praticamente uniforme de tráfego através das chaves primárias. Se uma tabela tem um número muito pequeno de elementos de chave de hash acessados de modo expressivo, mesmo um elemento de chave de hash específico usado de modo expressivo, o tráfego é concentrado em um pequeno número de particionamentos – potencialmente somente um particionamento. Se a carga de trabalho estiver expressivamente desigual, o que significa estar focada desproporcionalmente em um ou poucos particionamentos, as operações não alcançarão o nível total de taxa de transferência provisionada. Para obter o melhor resultado da taxa de transferência do Amazon DynamoDB, construa tabelas em que o elemento de chave de hash possua um grande número de valores diferentes, sendo os valores requisitados de modo bastante uniforme, tão aleatoriamente quanto possível. Um exemplo de uma boa chave primária é o CustomerID e se o aplicativo tiver muitos clientes e solicitações feitas para vários registros de clientes, ela tende a ser mais ou menos uniforme. Um exemplo de chave primária expressivamente assimétrica é “Nome da categoria do produto” onde certas categorias do produto são mais populares que outras.
Uma unidade de capacidade de gravação permite que você execute uma gravação por segundo para itens com mais de 1 Kb de tamanho. Da mesma forma, uma unidade de capacidade de leitura permite que você execute uma leitura fortemente consistente por segundo (ou duas eventualmente consistentes) de itens com mais de 1 Kb de tamanho. Itens maiores exigirão uma capacidade maior. É possível calcular o número de unidades de uma leitura ou gravação desejada pela estimativa do número de leituras ou gravações que precisa fazer por segundo, e multiplicar pelo tamanho dos itens (arredondado para o KB mais próximo).
Unidades de capacidade requeridas para gravações = Número de itens gravados por segundo x tamanho do item (arredondado para o KB mais próximo)
Unidades de capacidade requeridas para leituras* = Número de itens lidos por segundo x tamanho do item (arredondado para o KB mais próximo)
* Caso você use leituras eventualmente consistentes terá duas vezes a taxa de transferências em termos de itens por segundo.
Se os itens tiverem menos que 1 KB de tamanho, então cada unidade de capacidade de leitura fornecerá 1 leitura/segundo da capacidade; e cada unidade de capacidade de gravação fornecerá 1 gravação/segundo de capacidade. Por exemplo, se os itens tiverem 512 bytes e sua necessidade de leitura for de 100 itens por segundo da tabela, será preciso fornecer 100 unidades de capacidade de leitura.
Se os itens tiverem mais que 1 KB de tamanho, você deverá calcular o número de unidades de capacidade de leitura e de capacidade de gravação necessárias. Por exemplo, se os itens tiverem 1,5 KB e sua necessidade de leitura for de 100 itens/segundo, será preciso fornecer 100 (leitura por segundo) x 2 (1,5 KB arredondados para o número inteiro mais próximo) = 200 unidades de capacidade de leitura.
Observe que o número necessário de unidades de capacidade de leitura é determinado pelo número de itens que são lidos por segundo, não pelo número de chamadas de API. Por exemplo, se sua necessidade de leitura for de 500 itens por segundo da tabela, e os itens tiverem 1 KB ou menos, serão necessárias 500 unidades de capacidade de leitura. Não importa se são feitas 500 chamadas de GetItem individuais ou 50 chamadas de BatchGetItem; cada uma retornará 10 itens.
O DynamoDB considera um padrão de acesso relativamente aleatório através de todas as chaves primárias. Você deve configurar o modelo de dados para que suas solicitações resultem em uma distribuição razoavelmente uniforme de tráfego entre as chaves primárias. Caso você tenha um padrão de acesso assimétrico ou irregular, pode ser que não consiga alcançar o nível de taxa de transferência provisionada.
Ao armazenar os dados, o Amazon DynamoDB divide uma tabela em vários particionamentos e distribui os dados com base no elemento de chave de hash da chave primária. A taxa de transferência provisionada associada com a tabela é também dividida entre as partições; cada taxa de transferência de partição é gerenciada independentemente com base na cota designada para tanto. Não há compartilhamento da taxa de transferência entre as partições. Consequentemente, a tabela no Amazon DynamoDB é mais capaz de corresponder aos níveis de taxa de transferência provisionada se a carga de trabalho for distribuída bastante uniformemente por entre os valores de chave de hash. Ao distribuir valores de chave de hash por entre as solicitações, distribui-se as solicitações entre os particionamentos, o que ajuda a alcançar o nível de taxa de transferência provisionada por completo.
Caso você tenha um padrão de carga de trabalho irregular através das chaves primárias, e não consiga alcançar o nível de taxa de transferência provisionada, poderá satisfazer mais tarde suas necessidades de taxa de transferência ao aumentar o nível da taxa de transferência provisionada, o que lhe proporcionará mais taxa de transferência para cada particionamento. No entanto, recomendamos que considere modificar seu padrão de solicitação ou modelo de dados para que possa alcançar um padrão de acesso aleatório relativo através das chaves primárias.
O DynamoDB é projetado para uma escalabilidade sem limites. Entretanto, caso você queira exceder valores de 10.000 unidades de capacidade de gravação ou de 10.000 de unidades de capacidade de leitura para uma tabela individual, você deve primeiro entrar em contato com a Amazon preenchendo este formulário. Se você deseja fornecer mais que 20.000 unidades de capacidade de gravação ou 20.000 unidades de capacidade de leitura a partir de uma conta de assinatura específica, você deve primeiro entrar em contato conosco usando o formulário acima.
A menor taxa de transferência provisionada que você pode solicitar é de 1 unidade de capacidade de gravação e 1 unidade de capacidade de leitura.
Isso está incluído no nível gratuito, que permite 5 unidades de capacidade de gravação e 10 unidades de capacidade de leitura. O nível gratuito aplica-se ao nível da conta, não ao nível da tabela. Em outras palavras, se você acrescentar a capacidade provisionada de todas as suas tabelas e se a capacidade total não for superior a 5 unidades de capacidade de gravação e 10 unidades de capacidade de leitura, então sua capacidade provisionada não se aplicará ao nível gratuito.
Sim. O Amazon DynamoDB permite que você altere seu nível de taxa de transferência provisionada em até 100% com uma única chamada de API UpdateTable. Se você deseja aumentar sua taxa de transferência em mais de 100%, é possível simplesmente chamar UpdateTable novamente.
Por exemplo, se sua tabela tiver 1.000 unidades de capacidade de gravação provisionada, não será possível atualizar sua tabela para 3.000 com uma única chamada de API, pois isso está acima da alteração máxima permitida para uma única operação UpdateTable. Para aumentar sua taxa de transferência de 1.000 para 3.000 unidades de capacidade de gravação, é só fazer uma chamada UpdateTable para primeiro dobrar sua taxa de transferência para 2.000 e, em seguida, chamar UpdateTable uma segunda vez para atingir o valor de 3.000 gravações/segundo.
Toda tabela do Amazon DynamoDB possui um pré-provisionamento de recursos necessário para alcançar o valor da taxa de transferência solicitado. Você é cobrado pela hora de utilização enquanto sua tabela continuar com esses recursos. Para uma lista completa de preços com exemplos, consulte a página de descrição de preços do DynamoDB.
Há duas maneiras de atualizar a taxa de transferência provisionada de uma tabela do Amazon DynamoDB. É possível fazer a alteração no console de gestão ou usar a chamada de API UpdateTable. Você pode alterar sua taxa de transferência em até 100% mediante uma chamada API, como descrito em: "Há algum limite de quanto posso alterar minha taxa de transferência provisionada com uma única chamada de API?"
O Amazon DynamoDB permanecerá disponível enquanto o nível de sua taxa de transferência aumenta ou diminui.
Você pode aumentar sua taxa de transferência provisionada sempre que desejar. É possível diminuí-la duas vezes por dia. Um dia é definido de acordo com o fuso horário GMT. Por exemplo, se você reduzir a taxa de transferência provisionada para sua tabela duas vezes em 12 de dezembro, não terá permissão para reduzir novamente a taxa de transferência provisionada para a tabela antes das 12h01 GMT de 13 de dezembro.
Lembre-se de que você não pode alterar a taxa de transferência provisionada se sua tabela do Amazon DynamoDB ainda estiver processando a resposta à sua última solicitação para alterar a taxa de transferência provisionada. Use o console de gestão ou a API DescribeTables para verificar o status da sua tabela. Se o status for "CREATING", "DELETING" ou "UPDATING", você não poderá ajustar a taxa de transferência da tabela. Espere até que sua tabela apresente o status "ACTIVE" e tente novamente.
Sim. Para uma determinada distribuição de recursos, o valor de leitura que uma tabela do Dynamo pode alcançar é diferente para leituras fortemente consistentes e eventualmente consistentes. Se você solicita "1.000 unidades de capacidade de leitura", o DynamoDB distribuirá recursos suficientes para alcançar 1.000 leituras fortemente consistentes por segundo de itens de até 1 KB. Caso deseje alcançar 1.000 leituras eventualmente consistentes de itens de até 1 KB, precisará de metade dessa capacidade, ou seja, 500 unidades de capacidade de leitura. Para mais orientações sobre a escolha de um valor apropriado de taxa de transferência, consulte nosso guia de taxa de transferência provisionada.
Sim. Para uma determinada distribuição de recursos, o valor de leitura que uma tabela do DynamoDB pode alcançar depende do tamanho de um item. Quando uma taxa de transferência provisionada que você gostaria de alcançar é especificada, o DynamoDB fornece os recursos pressupondo que os itens serão menores que 1 KB. Cada aumento maior que 1 KB irá aumentar linearmente os recursos necessários para alcançar o mesmo valor de taxa de transferência. Por exemplo, se você forneceu uma tabela do DynamoDB com 100 unidades de capacidade de gravação, que significa que ela pode suportar 100 gravações de 1 KB por segundo, ou 50 gravações de 2 KB por segundo, ou 25 gravações de 4 KB por segundo, e assim por diante. Para mais orientações sobre a escolha de um valor apropriado de taxa de transferência, consulte nosso guia de taxa de transferência provisionada.
Se seu aplicativo executar mais leituras/segundo ou gravações/segundo do que sua capacidade de taxa de transferência provisionada da tabela permite, solicitações acima de sua capacidade de provisionamento serão suspensas e você receberá o código de erro 400. Por exemplo, se você solicitou 1.000 unidades de capacidade de gravação e tentar fazer 1.500 gravações/segundo de itens de 1 KB, o DynamoDB somente permitirá a análise de 1.000 gravações/segundo e você receberá o código de erro 400 em suas solicitações extras. Você deve usar o CloudWatch para controlar suas taxas de solicitações para garantir que sempre terá uma taxa de transferência provisionada suficiente para alcançar a taxa de solicitações de que precisa.
O DynamoDB publica sua capacidade de taxa de transferência consumida como um indicador do CloudWatch. É possível definir um aviso para esse indicador, assim você será notificado(a) caso se aproxime da capacidade provisionada.
Geralmente, a redução de taxa de transferência levará entre alguns segundos e alguns minutos, enquanto o aumento de taxa de transferência leva normalmente entre alguns minutos e algumas horas.
É altamente recomendado que você não tente agendar um aumento na taxa de transferência para ocorrer praticamente ao mesmo tempo em que a taxa de transferência extra será necessária. Recomendamos o provisionamento da capacidade de taxa de transferência com antecedência suficiente para garantir que ela esteja disponível quando necessário.
O modelo de dados para o Amazon DynamoDB é conforme o seguinte:
O tamanho total de um item, incluindo nomes e valores de atributos, não pode exceder 64 KB.
Não há limite para o número de atributos que um item possa ter. No entanto, o tamanho total de um item, incluindo nomes e valores de atributos, não pode exceder 64 KB.
O Amazon DynamoDB suporta três tipos de dados de escala: número, sequência de caracteres e binário. Além disso, o Amazon DynamoDB suporta tipos de multivalores: conjunto de números, conjunto de sequência de caracteres e conjunto binário.
Não. Você pode armazenar qualquer quantidade de armazenamento que seja colocado em uma tabela do Amazon DynamoDB. À medida que o tamanho de seu conjunto de dados aumenta, o Amazon DynamoDB distribuirá automaticamente seus dados entre recursos de máquinas suficientes para atender às suas solicitações de armazenamento.
Não, você pode aumentar a taxa de transferência que foi provisionada para a tabela usando a API UpdateTable ou no AWS Management Console. O DynamoDB consegue operar em escala massiva e não há um limite hipotético para o máximo de taxa de transferência que você pode alcançar. O DynamoDB divide automaticamente sua tabela entre vários particionamentos, onde cada particionamento é uma unidade de computação paralela independente. O DynamoDB pode alcançar valores de taxa de transferência cada vez mais altos ao adicionar mais particionamentos.
Caso queira exceder os valores de taxa de transferência em 10.000 gravações/segundo ou 10.000 leituras/segundo, você deve primeiro entrar em contato com a Amazon preenchendo este formulário.
Sim. O Amazon DynamoDB é projetado para aumentar ou diminuir sua taxa de transferência provisionada enquanto permanece disponível.
Não. O Amazon DynamoDB elimina a necessidade de particionamento das tabelas para escalabilidade de taxa de transferência.
O serviço é executado a partir de centros de dados de alta disponibilidade comprovados. O serviço replica os dados através de três recursos em uma região da AWS para fornecer tolerância a falhas no caso da falha de um servidor ou interrupção da zona de disponibilidade.
Para alcançar uma durabilidade e tempo de atividade, o Amazon DynamoDB replica simultaneamente os dados através de três recursos em uma região da AWS.
Os índices secundários locais permitem que algumas consultas comuns executem com muito mais rapidez e economia, evitando a recuperação de um grande número de itens e a filtragem dos resultados. Isso significa que seus aplicativos podem confiar em consultas mais flexíveis baseadas em uma maior variedade de atributos.
Antes da disponibilização dos índices secundários locais, se você quisesse encontrar itens específicos em um bucket de chaves de hash (itens que compartilham a mesma chave de hash), o DynamoDB tinha de buscar todos os objetos que compartilhavam uma única chave de hash e filtrar os resultados de acordo com a consulta. Por exemplo, considere um aplicativo de comércio eletrônico que armazena dados de pedidos de cliente em uma tabela do DynamoDB com um schema de faixa de hash de código do cliente e carimbo de data/hora. Sem o LSI, para encontrar uma resposta para a pergunta "Exibir todos os pedidos feitos pelo cliente X com data de remessa nos últimos 30 dias, classificados pela data de remessa", era necessário usar a API de consultas para recuperar todos os objetos com a chave de hash "X", classificar os resultados por data de remessa e então filtrar os registros mais antigos.
Os índices secundários locais simplificam essa experiência. Agora, é possível criar um índice para o atributo "data de remessa" e executar essa consulta com eficiência, recuperando apenas os itens necessários. Isso reduz consideravelmente a latência e o custo das consultas, pois apenas os itens que atendem aos seus critérios específicos serão recuperados. Além disso, o modelo de programação do seu aplicativo é simplificado, já que não é mais necessário escrever lógica no cliente para filtrar os resultados. Denominamos esse novo índice secundário um índice secundário "local" porque é usando juntamente com a chave de hash, permitindo dessa forma pesquisar localmente dentro de um bucket de chave de hash. Assim, enquanto que anteriormente somente era possível pesquisar usando a chave de hash e a faixa de hash, agora também é possível pesquisar usando um índice secundário em vez da chave de faixa, aumentando o número de atributos que podem ser usados para consultas executadas com eficiência.
As cópias redundantes dos atributos de dados são copiadas para os índices secundários locais definidos por você. Esses atributos incluem a chave de hash da tabela e da faixa, além da chave de faixa alternativa que você definiu. Também é possível armazenar dados redundantes de outros atributos de dados no índice secundário local, permitindo o acesso a esses dados sem necessidade de acessar a própria tabela.
Os índices secundários locais não são adequados para todos os aplicativos. Eles introduzem algumas restrições quanto ao volume de dados que pode ser armazenado em um único valor de chave de hash. Para obter mais informações, consulte as perguntas frequentes abaixo sobre coleções de itens.
O conjunto de atributos copiado para um índice secundário local é denominado uma projeção. A projeção determina os atributos que você poderá recuperar com maior eficiência. Quando você consulta um índice secundário local, o Amazon DynamoDB pode acessar qualquer um dos atributos projetados com as mesmas características de desempenho de atributos residentes em uma tabela própria. Se você precisa recuperar qualquer atributo não projetado, o Amazon DynamoDB automaticamente buscará esses atributos na tabela.
Ao definir um índice secundário local, é necessário especificar os atributos que serão projetados no índice. No mínimo, cada entrada de índice consiste em: (1) o valor de chave de hash a tabela, (2) um atributo para servir como a chave de faixa do índice e (3) o valor da chave de faixa da tabela.
Além dessas informações mínimas, você também pode escolher uma lista especificada pelo usuário ou outros atributos não chave para serem projetados no índice. Você pode até optar por projetar todos os atributos no índice. Neste caso, o índice replica os mesmos dados da própria tabela, mas com os dados organizados pela chave de faixa alternativa que você especificou.
O LSI deve ser criado no momento da criação da tabela. No momento, não é possível adicionar um LSI após a criação da tabela. Para criar um LSI, especifique os dois parâmetros abaixo:
Os índices secundários locais são atualizados automaticamente quando o índice primário é atualizado. De forma semelhante às leituras de um índice primário, o LSI oferece suporte às opções de leitura fortemente e eventualmente consistente.
Não necessariamente. Os índices secundários locais referenciam apenas os itens que contêm a chave de faixa indexada especificada para cada LSI. O schema flexível do DynamoDB permite que nem todos os itens necessariamente contenham todos os atributos.
Isso significa que o índice secundário local pode ser preenchido de forma esparsa, quando comparado ao índice primário. Como os índices secundários locais são esparsos, oferecem suporte eficiente a consultas de atributos incomuns.
Por exemplo, no exemplo de pedidos descrito acima, um cliente pode ter alguns atributos adicionais em um item, incluídos apenas se o pedido for cancelado (como CanceledDateTime e CanceledReason). Para consultas relacionadas a itens cancelados, um índice secundário local para qualquer um desses atributos seria eficiente, pois os itens referenciados pelo índice seriam apenas os que têm esse atributo presente.
Os índices secundários locais somente podem ser consultados usando a API de consultas.
Para consultar um índice secundário local, referencie explicitamente esse índice além do nome da tabela que deseja consultar. Você deve especificar o nome e o valor do atributo de hash do índice. Opcionalmente, é possível especificar uma condição para o atributo de faixa de chaves do índice.
A sua consulta pode recuperar atributos não projetados armazenados no índice primário executando uma operação de busca de tabela, incorrendo no custo da leitura de unidades adicionais de capacidade de leitura.
As consultas que usam índices secundários locais oferecem suporte a leituras fortemente consistentes e eventualmente consistentes.
Os índices secundários locais devem ser definidos no momento da criação da tabela. O índice primário da tabela deve usar uma chave composta de faixa de hash.
No momento, não é possível adicionar índices secundários locais a tabelas existentes. Estamos trabalhando para adicionar esse recurso, que será lançado futuramente. Quando você cria uma tabela com índice secundário local, pode decidir criar um índice secundário local para uso futuro definido um elemento de chave de faixa não usado no momento. Como o índice secundário local é esparso, esse índice não custa nada até que você decida utilizá-lo.
Cada tabela pode ter até cinco índices secundários locais.
Cada tabela pode ter até 20 atributos não chave projetados em todos os índices secundários locais dentro da tabela. Em cada índice, também é possível especificar que todos os atributos não chave do índice primário são projetados.
Não é possível modificar um índice após a criação. Estamos trabalhando para adicionar esse recurso no futuro.
No momento, índices secundários locais não podem ser removidos após a criação de uma tabela. Naturalmente, eles são excluídos se você decidir excluir toda a tabela. Estamos trabalhando para adicionar esse recurso, que será lançado futuramente.
Você não precisa provisionar capacidade explicitamente para um índice secundário local. O índice consome capacidade provisionada como parte da tabela à qual está associado.
As leituras e gravações de LSIs consome capacidade de acordo com a fórmula padrão de 1 unidade por 1 KB de dados lidos ou gravados a cada segundo, com as seguintes diferenças:
Os índices secundários locais consomem armazenamento para o nome e valor do atributo das chaves primárias e de índice de cada LSI, para todos os atributos não chave projetados, e mais 100 bytes por item refletido no LSI.
Todos os tipos de dados escalares (Number, String, Binary) podem ser usados para o elemento de chave da faixa da chave do índice secundário local. Não é possível usar tipos definidos.
Todos os tipos de dados (incluindo os tipos definidos) podem ser projetados em um índice secundário local.
No Amazon DynamoDB, uma coleção de itens é qualquer grupo de itens com a mesma chave de hash em uma tabela e em todos os seus índices secundários locais. Sistemas de bancos de dados relacionais tradicionais particionados (ou particionados horizontalmente) acessam esses particionamentos horizontais ou partições referenciando todos os itens ou linhas de banco de dados armazenados com uma determinada chave de hash.
As coleções de itens são criadas e mantidas automaticamente para cada tabela que inclui índices secundários locais. O DynamoDB armazena cada coleção de itens em uma única partição de disco.
Cada coleção de itens no Amazon DynamoDB está sujeita ao limite de tamanho máximo de 10 gigabytes. Para qualquer valor de chave de hash distinto, a soma dos tamanhos dos itens na tabela mais a soma dos tamanhos do item em todos os índices secundários locais da tabela não deve exceder 10 GB.
O limite de 10 GB para as coleções de itens não se aplica a tabelas sem índices secundários locais, mas apenas a tabelas que têm um ou mais índices secundários locais.
Embora o tamanho das coleções de itens individuais seja limitado, o tamanho do armazenamento de toda a tabela com os índices secundários locais não é limitado. O tamanho total de uma tabela indexada no Amazon DynamoDB é efetivamente ilimitado, desde que o tamanho de armazenamento total (tabela e índices) de qualquer chave de hash não exceda o limite de 10 GB.
As APIs de gravação do DynamoDB (PutItem, UpdateItem, DeleteItem e BatchWriteItem) incluem uma opção que permite que a resposta da API inclua uma estimativa do tamanho da coleção de itens relevante. Ela inclui uma estimativa inferior e superior para os dados de uma determinada coleção de itens, medida em gigabytes.
Recomendamos que você adapte o seu aplicativo para monitorar os tamanhos das coleções de itens. Os aplicativos devem examinar as respostas das APIs relativas ao tamanho da coleção de itens e gerar uma mensagem de erro sempre que uma coleção de itens exceder um limite definido pelo usuário (por exemplo, 8 GB). Esse sistema de aviso antecipado alertará você se uma coleção de itens estiver crescendo muito, dando tempo suficiente para resolver o problema.
Se uma determinada coleção de itens excede o limite de 10 GB, você não conseguirá gravar novos itens ou aumentar o tamanho de itens existentes para essa determinada chave de hash. As operações de leitura e gravação que reduzem o tamanho da coleção de itens continuarão sendo permitidas. As outras coleções de itens da tabela não serão afetadas.
Para resolver esse problema, você pode remover itens ou reduzir tamanhos de item na coleção que excedeu os 10 GB. Como alternativa, você pode inserir novos itens usando um novo valor de chave de hash para contornar esse problema. Se a sua tabela incluir dados históricos acessados com pouca frequência, considere o arquivamento de dados históricos no Amazon S3, no Amazon Glacier ou em outro armazenamento de dados.
Você pode controlar o desempenho da tabela para uso livre do Amazon CloudWatch, no AWS Management Console. Você pode acessar informações tais como: latências de cada tipo de operação, quantidade total de dados armazenados na tabela, taxa de transferência de solicitação de cada API, e quaisquer solicitações suspensas em um determinado período de tempo. Você pode usar esses dados para dimensionar seus recursos de tabela de banco de dados, ultrapassando o aumento do tráfego esperado.
Sim, o DynamoDB irá suportar permissões de nível de API por meio do serviço de integração da AWS Identity and Access Management (IAM).
Para mais informações sobre IAM, consulte:
O DynamoDB suporta transações de nível de item implícito. Quando você usa UpdateItem, PutItem, ou DeleteItem, a operação é garantida para êxito ou falha de atomicidade. A atomicidade dessas operações é garantida no nível do item. A atomicidade é também garantida para operações condicionais e para operações de incremento/decremento..
Cada tabela do DynamoDB possui taxa de transferência de leitura e taxa de transferência de gravação provisionadas associadas a ela. A cobrança será efetuada por hora pela capacidade de taxa de transferência caso exceda o nível gratuito.
Observe que você será cobrado por hora, pela capacidade de taxa de transferência que você provisionar para sua tabela, enviando ou não solicitações para sua tabela. Caso queira fazer alterações na sua capacidade de taxa de transferência provisionada, você pode usar o AWS Management Console ou a API UpdateTable.
Além disso, o DynamoDB também cobra o valor de armazenamento de dados indexados, assim como as taxas cobradas por transferência de dados de Internet padrão
Para saber mais sobre os preços do DynamoDB, visite nossa página de descrição de preços.
Veja um exemplo de como calcular os custos de transferência usando os preços da região Leste dos EUA (Norte da Virgínia). Para ver os preços para outras regiões, visite nossa página de descrição de preços
Se você criar uma tabela e solicitar 10 unidades de capacidade de gravação e 200 unidades de capacidade de leitura de taxa de transferência provisionada, será cobrado da seguinte forma:
USD 0,01 + (4 x USD 0,01) = USD 0,05 por hora
Se as necessidades de sua taxa de transferência mudarem e você aumentar sua solicitação de taxa de transferência reservada para 10.000 unidades de capacidade de gravação e 50.000 unidades de capacidade de leitura, sua cobrança será alterada para:
(1.000 x USD 0,01) + (1.000 x USD 0,01) = USD 20/hora
Para saber mais sobre os preços do DynamoDB, visite nossa página de descrição de preços do DynamoDB
Exceto caso seja informado em contrário, nossos preços excluem impostos e taxas aplicáveis, incluindo VAI e imposto de vendas aplicável. Por exemplo, os nossos preços para a região da Ásia-Pacífico (Tóquio) já incluem os impostos de consumo do Japão.
A capacidade reservada é um recurso de cobrança que permite obter descontos sobre a capacidade de taxa de transferência provisionada como compensação por:
Faça login no AWS Management Console, acesse a página do console do DynamoDB e clique em "Purchase Reserved Capacity". Será exibido um formulário que você pode preencher para comprar a Capacidade Reservada. Não deixe de selecionar a região da AWS na qual a capacidade reservada será utilizada. Aguarde até duas semanas para o processamento da solicitação de compra. Você será notificado por e-mail quando a solicitação de compra for processada.
Não, você não pode cancelar a capacidade reservada e o pagamento único não é reembolsável. Você continuará a pagar por cada hora durante a vigência da capacidade reservada, independentemente da utilização.
A menor oferta de capacidade reservada é de 5.000 unidades de capacidade de gravação e 5.000 unidades de capacidade de leitura.
Ainda não. Ofereceremos APIs e adicionaremos mais opções de capacidade reservada ao longo do tempo.
No momento, cada conta da AWS pode fazer uma compra de capacidade reservada. Ampliaremos a nossa oferta de capacidade reservada no futuro para permitir mais compras de capacidade reservada por conta.
Não. A capacidade reservada está associada a uma única região.
Sim. Quando você compra a capacidade reservada, concorda com um nível mínimo de utilização e paga uma taxa com desconto por esse nível de utilização. Se você provisionar capacidade além desse nível mínimo, serão cobradas as taxas padrão para essa capacidade adicional.
A capacidade reservada é aplicada automaticamente à sua conta. Por exemplo, se você comprar uma capacidade reservada de 5.000 unidades de capacidade de gravação e provisionar 6.000, sua compra de capacidade reservada cobrirá automaticamente o custo de 5.000 unidades de capacidade de gravação e você pagará as taxas padrão pelas 1.000 unidades de capacidade de gravação restantes.
Uma compra de capacidade reservada é um contrato para pagar por uma quantidade mínima de capacidade de taxa de transferência provisionada durante a vigência do contrato em troca do preço com desconto. Se você usar menos que a capacidade reservada, essa quantidade mínima de capacidade de taxa de transferência provisionada continuará a ser cobrada mensalmente.
Sim. A capacidade reservada é aplicada à capacidade provisionada total dentro da região para a qual você comprou a capacidade reservada. Por exemplo, se você comprou 5.000 unidades de capacidade de gravação, pode aplicar essa capacidade a uma tabela a uma tabela com 5.000 unidades de capacidade de gravação, 100 tabelas com 50 unidades de capacidade de gravação ou 1.000 tabelas com 5 unidades de capacidade de gravação e assim por diante.