Bigtable para usuários do DynamoDB
Este documento é destinado a desenvolvedores do DynamoDB e administradores de banco de dados que querem migrar ou projetar aplicativos para usar o Bigtable como um armazenamento de dados. Antes de ler este documento, leia a Visão geral do Bigtable.
O Bigtable e o DynamoDB são armazenamentos de chave-valor distribuídos que podem suportar milhões de consultas por segundo (QPS, na sigla em inglês), fornecer armazenamento que é escalonado para petabytes de dados e tolerar falhas de nó.
Embora os conjuntos de recursos desses serviços de banco de dados sejam semelhantes, as arquiteturas subjacentes e os detalhes de interação são diferentes de maneiras importantes. Entenda isso antes de iniciar uma migração. Este documento destaca as semelhanças e diferenças entre os dois sistemas de banco de dados.
Plano de controle
No DynamoDB e no Bigtable, o plano de controle permite configurar a capacidade e configurar e gerenciar recursos. O DynamoDB é um produto sem servidor, e o nível mais alto de interação com ele é o da tabela. No modo de capacidade provisionada, você provisiona unidades de solicitação de leitura e gravação, seleciona regiões e replicação e gerencia backups. O Bigtable não é um produto sem servidor. É necessário criar uma instância com um ou mais clusters, cuja capacidade é determinada pelo número de nós que eles têm. Para saber mais sobre esses recursos, consulte Instâncias, clusters e nós.
A tabela a seguir compara os recursos do plano de controle do DynamoDB e do Bigtable.
DynamoDB | Bigtable |
---|---|
Tabela : uma coleção de itens com uma chave primária definida. As tabelas têm configurações para backups, replicação e capacidade. | Instância:um grupo de clusters do Bigtable em diferentes zonas ou regiões do Google Cloud entre os quais a replicação e o roteamento de conexão ocorrem. As políticas de replicação são definidas no nível da instância. Cluster:um grupo de nós na mesma zona geográfica do Google Cloud, idealmente colocalizado com o servidor do aplicativo por motivos de latência e replicação. A capacidade é gerenciada ajustando o número de nós em cada cluster. Tabela: uma organização lógica de valores indexados pela chave de linha. Os backups são controlados no nível da tabela. |
Unidade de capacidade de leitura (RCU) e unidade de capacidade de gravação (WCU, na sigla em inglês):
unidades que permitem leituras ou gravações por segundo com tamanho de carga útil fixo. Você vai receber a cobrança de unidades de leitura ou gravação para cada
operação com tamanhos de payload maiores.As operações UpdateItem consomem a capacidade de gravação usada para o
tamanho maior de um item atualizado, antes ou depois da atualização,
mesmo que a atualização envolva um subconjunto dos atributos do item. |
Nó:um recurso de computação virtual responsável por ler e gravar dados. O número de nós que um cluster tem
se traduz em limites de capacidade de processamento para leituras, gravações e verificações. É possível
ajustar o número de nós, dependendo da combinação das suas
metas de latência, contagem de solicitações e tamanho do payload. Os nós de SSD oferecem a mesma taxa de transferência para leituras e gravações, ao contrário da diferença significativa entre RCU e WCU. Para mais informações, consulte Desempenho em cargas de trabalho típicas. |
Particionamento : um bloco de linhas contíguas, com suporte de
unidades de estado sólido (SSDs) colocalizadas com nós. Cada partição está sujeita a um limite rígido de 1.000 WCUs, 3.000 RCUs e 10 GB de dados. |
Tablet : um bloco de linhas contíguas com suporte do
meio de armazenamento escolhido (SSD ou HDD). As tabelas são fragmentadas em blocos para equilibrar a carga de trabalho. Os blocos não são armazenados em nós no Bigtable, mas sim no sistema de arquivos distribuídos do Google, que permite a redistribuição rápida de dados ao dimensionar e oferece maior durabilidade ao manter várias cópias. |
Tabelas globais: uma maneira de aumentar a disponibilidade e a durabilidade dos dados, propagando automaticamente as mudanças em várias regiões. | Replicação : uma maneira de aumentar a disponibilidade e a durabilidade dos dados, propagando automaticamente as mudanças de dados em várias regiões ou zonas na mesma região. |
Não relevante (N/A) | Perfil de aplicativo : configurações que informam ao Bigtable como encaminhar uma chamada da API do cliente para o cluster apropriado na instância. Também é possível usar um perfil de app como uma tag para segmentar métricas de atribuição. |
Replicação geográfica
A replicação é usada para atender aos requisitos do cliente para:
- Alta disponibilidade para continuidade dos negócios no caso de falha zonal ou regional.
- Coloque os dados do serviço próximos dos usuários finais para servir com baixa latência em qualquer lugar do mundo.
- Isolamento de carga de trabalho quando você precisa implementar uma carga de trabalho em lote em um cluster e depende da replicação para veicular clusters.
O Bigtable é compatível com clusters replicados em todas as zonas disponíveis em até oito regiões do Google Cloud em que o Bigtable está disponível. A maioria das regiões tem três zonas. Para mais informações, consulte Regiões e zonas.
O Bigtable replica automaticamente os dados entre clusters em uma topologia multi-primário, o que significa que você pode ler e gravar em qualquer cluster. A replicação do Bigtable tem consistência posterior. Para mais detalhes, consulte a Visão geral da replicação.
O DynamoDB oferece tabelas globais para oferecer suporte à replicação de tabelas em várias regiões. As tabelas globais são multiprincipais e replicadas automaticamente entre regiões. A replicação é consistente no final.
A tabela a seguir lista os conceitos de replicação e descreve a disponibilidade deles no DynamoDB e no Bigtable.
Propriedade | DynamoDB | Bigtable |
---|---|---|
Replicação multiprimária | Sim. É possível ler e gravar em qualquer tabela global. |
Sim. É possível ler e gravar em qualquer cluster do Bigtable. |
Modelo de consistência | Consistência eventual. Consistência na leitura das gravações no nível regional para tabelas globais. |
Consistência eventual. Consistência na leitura das gravações no nível do cluster para todas as tabelas, desde que você envie leituras e gravações para o mesmo cluster. |
Latência de replicação | Sem contrato de nível de serviço (SLA). Segundos |
Sem SLA. Segundos |
Granularidade da configuração | Nível da tabela. | Nível da instância. Uma instância pode conter várias tabelas. |
Implementação | Crie uma tabela global com uma réplica em cada região selecionada. Nível regional. Replicação automática entre réplicas convertendo uma tabela em uma global. As tabelas precisam ter os streams do DynamoDB ativados, com o stream contendo as imagens novas e antigas do item. Exclua uma região para remover a tabela global dela. |
Crie uma instância com mais de um cluster. A replicação é automática entre os clusters dessa instância. Nível zonal. Adicione e remova clusters de uma instância do Bigtable. |
Opções de replicação | Por tabela. | Por instância. |
Roteamento e disponibilidade de tráfego | Tráfego roteado para a réplica geográfica mais próxima. Em caso de falha, você aplica uma lógica de negócios personalizada para determinar quando redirecionar solicitações para outras regiões. |
Use perfis de aplicativo para configurar
políticas de roteamento de tráfego de cluster. Use o roteamento de vários clusters para encaminhar o tráfego automaticamente para o cluster íntegro mais próximo. Em caso de falha, o Bigtable oferece suporte ao failover automático entre clusters para HA. |
Escalonamento | A capacidade de gravação em unidades de solicitação de gravação replicadas (R-WRU, na sigla em inglês) é
sincronizada entre as réplicas. A capacidade de leitura em unidades de capacidade de leitura replicadas (R-RCU, na sigla em inglês) é por réplica. |
É possível escalonar clusters de forma independente adicionando ou removendo nós de cada cluster replicado conforme necessário. |
Custo | As R-WRU custam 50% mais do que as WRUs comuns. | Você vai receber cobranças pelo armazenamento e pelos nós de cada cluster. Não há custos de replicação de rede para a replicação regional entre zonas. Os custos são incorridos quando a replicação é feita entre regiões ou continentes. |
SLA | 99,999% | 99,999% |
Plano de dados
A tabela a seguir compara os conceitos de modelo de dados do DynamoDB e do Bigtable. Cada linha na tabela descreve recursos análogos. Por exemplo, um item no DynamoDB é semelhante a uma linha no Bigtable.
DynamoDB | Bigtable |
---|---|
Item : um grupo de atributos que pode ser identificado de forma exclusiva entre todos os outros itens pela chave primária. O tamanho máximo permitido é de 400 KB. | Linha: uma única entidade identificada pela chave de linha. O tamanho máximo permitido é de 256 MB. |
N/A | Grupo de colunas:um namespace especificado pelo usuário que agrupa colunas. |
Atributo : um agrupamento de um nome e um valor. Um valor de atributo pode ser um tipo escalar, conjunto ou documento. Não há um limite explícito para o tamanho do atributo. No entanto, como cada item é limitado a 400 KB, para um item que tem apenas um atributo, o atributo pode ter até 400 KB menos o tamanho ocupado pelo nome do atributo. | Qualificador de coluna : o identificador exclusivo em um
grupo de colunas para uma coluna. O identificador completo de uma coluna é
expresso como família-de-colunas:qualificador-de-coluna. Os qualificadores de coluna são
classificados lexicograficamente dentro do grupo de colunas. O tamanho máximo permitido para um qualificador de coluna é de 16 KB. Célula:uma célula armazena os dados de uma determinada linha, coluna e carimbo de data/hora. Uma célula contém um valor que pode ter até 100 MB. |
Chave primária : um identificador exclusivo de um item em uma
tabela. Pode ser uma chave de partição ou uma chave composta. Chave de partição: uma chave primária simples, composta por um atributo. Isso determina a partição física em que o item está localizado. O tamanho máximo permitido é de 2 KB. Chave de classificação: uma chave que determina a ordem das linhas dentro de uma partição. O tamanho máximo permitido é de 1 KB. Chave composta: uma chave primária composta por duas propriedades, a chave de partição e uma chave de classificação ou atributo de intervalo. |
Chave de linha : um identificador exclusivo de um item em uma tabela.
Normalmente representado por uma concatenação de valores e delimitadores.
O tamanho máximo permitido é de 4 KB. Os qualificadores de coluna podem ser usados para fornecer um comportamento equivalente ao da chave de classificação do DynamoDB. Chaves compostas podem ser criadas usando chaves de linha concatenadas e qualificadores de coluna. Para mais detalhes, consulte o exemplo de tradução de esquema na seção "Design do esquema" deste documento. |
Time to live : os carimbos de data/hora por item determinam quando um item não é mais necessário. Após a data e a hora do carimbo de data/hora especificado, o item é excluído da tabela sem consumir nenhuma taxa de transferência de gravação. | Coleta de lixo : os carimbos de data/hora por célula determinam quando um item não é mais necessário. A coleta de lixo exclui itens vencidos durante um processo em segundo plano chamado compactação. As políticas de coleta de lixo são definidas no nível do grupo de colunas e podem excluir itens não apenas com base na idade, mas também de acordo com o número de versões que o usuário quer manter. Não é necessário acomodar a capacidade para compactação ao dimensionar os clusters. |
Operações
As operações do plano de dados permitem realizar ações de criação, leitura, atualização e exclusão (CRUD, na sigla em inglês) em dados de uma tabela. A tabela a seguir compara operações semelhantes do plano de dados para DynamoDB e Bigtable.
DynamoDB | Bigtable |
---|---|
CreateTable |
CreateTable |
PutItem BatchWriteItem |
MutateRow MutateRows O Bigtable trata as operações de gravação como inserções. |
UpdateItem
|
O Bigtable trata as operações de gravação como inserções. |
GetItem BatchGetItem , Query , Scan |
`ReadRow `` ReadRows ` (range, prefix, reverse scan)O Bigtable oferece suporte a uma verificação eficiente por prefixo de chave de linha, padrão de expressão regular ou intervalo de chave de linha para frente ou para trás. |
Tipos de dados
O Bigtable e o DynamoDB não têm esquema. As colunas podem ser definidas no momento da gravação sem nenhuma aplicação em toda a tabela para a existência de colunas ou tipos de dados. Da mesma forma, um determinado tipo de dados de coluna ou atributo pode ser diferente de uma linha ou item para outra. No entanto, as APIs DynamoDB e Bigtable lidam com tipos de dados de maneiras diferentes.
Cada solicitação de gravação do DynamoDB inclui uma definição de tipo para cada atributo, que é retornada com a resposta para solicitações de leitura.
O Bigtable trata tudo como bytes e espera que o código do cliente conheça o tipo e a codificação para que o cliente possa analisar as respostas corretamente. Uma exceção são as operações de incremento, que interpretam os valores como números inteiros com sinal big-endian de 64 bits.
A tabela a seguir compara as diferenças nos tipos de dados entre o DynamoDB e o Bigtable.
DynamoDB | Bigtable |
---|---|
Tipos escalares : retornados como tokens de descritor de tipo de dados na resposta do servidor. | Bytes : são convertidos em tipos pretendidos no aplicativo
cliente. Incremento interpreta o valor como um número inteiro assinado big-endian de 64 bits. |
Conjunto : uma coleção não classificada de elementos exclusivos. | Grupo de colunas : é possível usar qualificadores de coluna como nomes de membros de conjuntos e, para cada um, fornecer um único byte 0 como o valor da célula. Os membros do conjunto são classificados lexicograficamente no grupo de colunas. |
Mapa : uma coleção não classificada de pares de chave-valor com chaves exclusivas. | Grupo de colunas Use o qualificador de coluna como chave do mapa e o valor da célula para o valor. As chaves do mapa são classificadas lexicograficamente. |
Lista : uma coleção classificada de itens. | Qualificador de coluna Use o carimbo de data/hora de inserção para alcançar o comportamento equivalente a list_append, o inverso do carimbo de data/hora de inserção para prepend. |
Design de esquema
Uma consideração importante no design do esquema é como os dados são armazenados. Entre as principais diferenças entre o Bigtable e o DynamoDB, estão as seguintes:
- Atualizações de valores únicos
- Ordenação de dados
- Controle de versões de dados
- Armazenamento de valores grandes
Atualizações de valores únicos
As operações UpdateItem
no DynamoDB consomem a capacidade de gravação do maior dos
tamanhos de item "antes" e "depois", mesmo que a atualização envolva um subconjunto dos
atributos do item. Isso significa que, no DynamoDB, é possível colocar colunas atualizadas com frequência
em linhas separadas, mesmo que elas pertençam logicamente à mesma linha com
outras colunas.
O Bigtable pode atualizar uma célula com a mesma eficiência, seja ela a única coluna em uma determinada linha ou uma entre milhares. Para mais detalhes, consulte Gravações simples.
Ordenação de dados
O DynamoDB gera hashes e distribui chaves de partição aleatoriamente, enquanto o Bigtable armazena linhas em ordem alfabética por chave de linha e deixa a geração de hashes a cargo do usuário.
A distribuição de chaves aleatórias não é ideal para todos os padrões de acesso. Isso reduz o risco de intervalos de linhas quentes, mas tornam os padrões de acesso que envolvem verificações que cruzam os limites da partição caros e ineficientes. Essas verificações ilimitadas são comuns, principalmente para casos de uso que têm uma dimensão de tempo.
O processamento desse tipo de padrão de acesso (verificações que cruzam os limites de partição) requer um índice secundário no DynamoDB, mas o Bigtable faz isso sem precisar de um índice secundário. Da mesma forma, no DynamoDB, as operações de consulta e verificação são limitadas a 1 MB de dados verificados, exigindo paginação além desse limite. O Bigtable não tem esse limite.
Apesar das chaves de partição distribuídas aleatoriamente, o DynamoDB ainda pode ter partilhas quentes se uma chave de partição escolhida não distribuir uniformemente o tráfego que está afetando negativamente a taxa de transferência. Para resolver esse problema, o DynamoDB recomenda o fragmentação de gravação, dividindo aleatoriamente as gravações em vários valores de chave de partição lógica.
Para aplicar esse padrão de design, é necessário criar um número aleatório de um conjunto fixo (por exemplo, de 1 a 10) e usar esse número como a chave de partição lógica. Como você está randomizando a chave de partição, as gravações na tabela são distribuídas de forma uniforme entre todos os valores da chave de partição.
O Bigtable se refere a esse procedimento como sal de chave, e pode ser uma maneira eficaz de evitar blocos com muito acesso.
Controle de versões de dados
Cada célula do Bigtable tem um carimbo de data/hora, e o mais recente é sempre o valor padrão para qualquer coluna. Um caso de uso comum para carimbos de data/hora é o controle de versões, que grava uma nova célula em uma coluna que é diferenciada das versões anteriores dos dados dessa linha e coluna pelo carimbo de data/hora.
O DynamoDB não tem esse conceito e exige
designs de esquemas complexos
para oferecer suporte ao controle de versões. Essa abordagem envolve a criação de duas cópias de cada item:
uma cópia com um prefixo de número de versão de zero, como v0_
, no início
da chave de classificação, e outra cópia com um prefixo de número de versão de um, como
v1_
. Sempre que o item for atualizado, use o próximo prefixo de versão mais alto na
chave de classificação da versão atualizada e copie o conteúdo atualizado para o item
com o prefixo de versão zero. Isso garante que a versão mais recente de qualquer item possa
ser localizada usando o prefixo zero. Essa estratégia não apenas exige
manutenção da lógica do lado do aplicativo, mas também torna as gravações de dados muito caras e
lentas, porque cada gravação exige uma leitura do valor anterior mais duas
gravações.
Transações com várias linhas versus capacidade de linha grande
O Bigtable não é compatível com transações de várias linhas. No entanto, como ele permite armazenar linhas muito maiores do que os itens no DynamoDB, é possível conseguir a transacionalidade desejada projetando seus esquemas para agrupar itens relevantes em uma chave de linha compartilhada. Para um exemplo que ilustra essa abordagem, consulte Padrão de design de tabela única.
Como armazenar valores grandes
Como um item do DynamoDB, que é análogo a uma linha do Bigtable, é limitado a 400 KB, o armazenamento de valores grandes exige a divisão do valor entre os itens ou o armazenamento em outras mídias, como o S3. Ambas essas abordagens aumentam a complexidade do seu aplicativo. Em contraste, uma célula do Bigtable pode armazenar até 100 MB, e uma linha do Bigtable pode suportar até 256 MB.
Exemplos de tradução de esquema
Os exemplos desta seção traduzem esquemas do DynamoDB para o Bigtable, considerando as principais diferenças de design de esquema.
Migrar esquemas básicos
Os catálogos de produtos são um bom exemplo para demonstrar o padrão básico de chave-valor. Confira abaixo como esse esquema pode ficar no DynamoDB.
Chave primária | Atributos | |||
---|---|---|---|---|
Chave de partição | Chave de classificação | Descrição | Preço | Miniatura |
chapéus | fedoras#brandA | Feito de lã premium… | 30 | https://storage… |
chapéus | fedoras#brandB | Tela durável e resistente à água, desenvolvida para.. | 28 | https://storage… |
chapéus | newsboy#brandB | Adicione um toque de charme vintage ao seu visual do dia a dia. | 25 | https://storage… |
sapatos | tênis#marcaA | Saia com estilo e conforto com… | 40 | https://storage… |
sapatos | tênis#marcaB | Recursos clássicos com materiais contemporâneos… | 50 | https://storage… |
Para essa tabela, o mapeamento do DynamoDB para o Bigtable é simples: você converte a chave primária composta do DynamoDB em uma chave de linha composta do Bigtable. Você cria um grupo de colunas (SKU) que contém o mesmo conjunto de colunas.
SKU | |||
---|---|---|---|
Chave de linha | Descrição | Preço | Miniatura |
chapéus#fedoras#marcaA | Feito de lã premium… | 30 | https://storage… |
chapéus#fedoras#marcaB | Tela durável e resistente à água, construída para.. | 28 | https://storage… |
chapéus#newsboy#marcaB | Adicione um toque de charme vintage ao seu visual do dia a dia. | 25 | https://storage… |
shoes#sneakers#brandA | Saia com estilo e conforto com… | 40 | https://storage… |
sapatos#tênis#marcaB | Recursos clássicos com materiais contemporâneos… | 50 | https://storage… |
Padrão de design de tabela única
Um padrão de design de tabela única reúne o que seriam várias tabelas em um banco de dados relacional em uma única tabela no DynamoDB. Você pode usar a abordagem do exemplo anterior e duplicar esse esquema no Bigtable. No entanto, é melhor resolver os problemas do esquema no processo.
Nesse esquema, a chave de partição contém o ID exclusivo de um vídeo, o que
ajuda a colocar todos os atributos relacionados a esse vídeo para acesso mais rápido. Devido
às limitações de tamanho de item do DynamoDB, não é possível colocar um número ilimitado de comentários de texto
livre em uma única linha. Portanto, uma chave de classificação com o padrão
VideoComment#reverse-timestamp
é usada para tornar cada comentário uma linha separada
na partição, classificada em ordem cronológica inversa.
Suponha que esse vídeo tenha 500 comentários e que o proprietário queira removê-lo. Isso significa que todos os comentários e atributos do vídeo também precisam ser excluídos. Para fazer isso no DynamoDB, é necessário verificar todas as chaves nessa partição e, em seguida, emitir várias solicitações de exclusão, iterando por cada uma delas. O DynamoDB oferece suporte a transações com várias linhas, mas essa solicitação de exclusão é muito grande para ser feita em uma única transação.
Chave primária | Atributos | |||
---|---|---|---|---|
Chave de partição | Chave de classificação | UploadDate | Formatos | |
0123 | Vídeo | 2023-09-10T15:21:48 | {"480": "https://storage…", "720": "https://storage…", "1080p": "https://storage…"} | |
VideoComment#98765481 | Conteúdo | |||
Gostei muito disso. Os efeitos especiais são incríveis. | ||||
VideoComment#86751345 | Conteúdo | |||
Parece que há um problema de áudio no minuto 1:05. | ||||
VideoStatsLikes | Count | |||
3 | ||||
VideoStatsViews | Count | |||
156 | ||||
0124 | Vídeo | 2023-09-10T17:03:21 | {"480": "https://storage…", "720": "https://storage…"} | |
VideoComment#97531849 | Conteúdo | |||
Compartilhei isso com todos os meus amigos. | ||||
VideoComment#87616471 | Conteúdo | |||
O estilo me lembra um diretor de cinema, mas não consigo colocar o dedo nele. | ||||
VideoStats | ViewCount | |||
45 |
Modifique esse esquema durante a migração para simplificar o código e tornar as solicitações de dados mais rápidas e econômicas. As linhas de Bigtable têm uma capacidade muito maior do que os itens do DynamoDB e podem processar um grande número de comentários. Para processar um caso em que um vídeo recebe milhões de comentários, defina uma política de coleta de lixo para manter apenas um número fixo dos comentários mais recentes.
Como os contadores podem ser atualizados sem a sobrecarga de atualizar toda a linha, você também não precisa dividi-los. Não é necessário usar uma coluna UploadDate ou calcular um carimbo de data/hora reverso e torná-lo sua chave de classificação, porque os carimbos de data/hora do Bigtable fornecem os comentários ordenados cronológica e reversamente de forma automática. Isso simplifica significativamente o esquema. Se um vídeo for removido, você poderá remover a linha do vídeo em uma transação, incluindo todos os comentários, em uma única solicitação.
Por fim, como as colunas no Bigtable são ordenadas lexicograficamente, como uma otimização, é possível renomear as colunas de uma maneira que permita uma varredura rápida de intervalos, das propriedades de vídeo para os N comentários mais recentes, em uma única solicitação de leitura, que é o que você quer fazer quando o vídeo é carregado. Depois, você pode rolar a página para ver o restante dos comentários conforme o espectador rola a página.
Atributos | ||||
---|---|---|---|---|
Chave de linha | Formatos | Marcações com "Gostei" | visualizações | UserComments |
0123 | {"480": "https://storage…", "720": "https://storage…", "1080p": "https://storage…"} @2023-09-10T15:21:48 | 3 | 156 | Gostei muito disso. Os efeitos especiais são incríveis. @
2023-09-10T19:01:15 Parece haver um problema de áudio no minuto 1:05. @ 2023-09-10T16:30:42 |
0124 | {"480": "https://storage…", "720":"https://storage…"} @2023-09-10T17:03:21 | 45 | O estilo me lembra um diretor de cinema, mas não consigo identificar o que é. @2023-10-12T07:08:51 |
Padrão de design de lista de adjacência
Considere uma versão um pouco diferente desse design, que o DynamoDB geralmente se refere como o padrão de design de lista de adjacência.
Chave primária | Atributos | |||
---|---|---|---|---|
Chave de partição | Chave de classificação | DateCreated | Detalhes | |
Invoice-0123 | Invoice-0123 | 2023-09-10T15:21:48 | {"discount": 0.10, "sales_tax_usd":"8", "due_date":"2023-10-03.."} |
|
Payment-0680 | 2023-09-10T15:21:40 | {"amount_usd": 120, "bill_to":"John…", "address":"123 Abc St…"} |
||
Payment-0789 | 2023-09-10T15:21:31 | {"amount_usd": 120, "bill_to":"Jane…", "address":"13 Xyz St…"} |
||
Invoice-0124 | Invoice-0124 | 2023-09-09T10:11:28 | {"discount": 0,20, "sales_tax_usd":"11", "due_date":"2023-10-03.."} |
|
Payment-0327 | 2023-09-09T10:11:10 | {"amount_usd": 180, "bill_to":"Bob…", "address":"321 Cba St…"} |
||
Payment-0275 | 2023-09-09T10:11:03 | {"amount_usd": 70, "bill_to":"Kate…", "address":"21 Zyx St…"} |
Nesta tabela, as chaves de classificação não são baseadas no tempo, mas sim nos IDs de pagamento. Portanto, você pode usar um padrão de coluna larga diferente e separar esses IDs em colunas no Bigtable, com benefícios semelhantes ao exemplo anterior.
Fatura | Pagamento | |||
---|---|---|---|---|
chave de linha | Detalhes | 0680 | 0789 | |
0123 | {"discount": 0.10, "sales_tax_usd":"8", "due_date":"2023-10-03.."} @ 2023-09-10T15:21:48 |
{"amount_usd": 120, "bill_to":"John…", "address":"123 Abc St…"} @ 2023-09-10T15:21:40 |
{"amount_usd": 120, "bill_to":"Jane…", "address":"13 Xyz St…"} @ 2023-09-10T15:21:31 |
|
chave de linha | Detalhes | 0275 | 0327 | |
0124 | {"discount": 0,20, "sales_tax_usd":"11", "due_date":"2023-10-03.."} @ 2023-09-09T10:11:28 |
{"amount_usd": 70, "bill_to":"Kate…", "address":"21 Zyx St…"} @ 2023-09-09T10:11:03 |
{"amount_usd": 180, "bill_to":"Bob…", "address":"321 Cba St…"} @ 2023-09-09T10:11:10 |
Como você pode ver nos exemplos anteriores, com o design correto do esquema, o modelo de coluna larga do Bigtable pode ser bastante poderoso e oferecer muitos casos de uso que exigiriam transações de várias linhas caras, indexação secundária ou comportamento em cascata na exclusão em outros bancos de dados.
A seguir
- Leia sobre o design do esquema do Bigtable.
- Saiba mais sobre o emulador do Bigtable.
- Confira arquiteturas de referência, diagramas e práticas recomendadas sobre o Google Cloud. Confira o Centro de arquitetura do Cloud.