Fundo
O projeto de mesa única para DynamoDB simplifica a arquitetura necessária para armazenar dados no DynamoDB. Em vez de ter múltiplas tabelas para cada tipo de registro você pode combinar os diferentes tipos de dados em uma única tabela. Isso funciona porque o DynamoDB é capaz de armazenar tabelas muito amplas com esquemas variados. O DynamoDB também oferece suporte a objetos aninhados. Isso permite que os usuários combinem PK como chave de partição e SK como chave de classificação, com a combinação dos dois se tornando uma chave primária composta. Colunas comuns podem ser usadas em tipos de registro, como uma coluna de resultados ou uma coluna de dados que armazena JSON aninhado. Ou os diferentes tipos de registro podem ter colunas totalmente diferentes. O DynamoDB oferece suporte a ambos os modelos ou até mesmo a uma combinação de colunas compartilhadas e colunas diferentes. Muitas vezes, os usuários que seguem o modelo de tabela única usarão a PK como chave primária dentro de um SK que funciona como um namespace. Um exemplo disso:
Observe que o PK é o mesmo para ambos os registros, mas o SK é diferente. Você poderia imaginar um modelo de duas tabelas como o seguinte:
e
Embora nenhum desses modelos de dados seja realmente um bom exemplo de modelagem de dados adequada, o exemplo ainda representa a ideia. O modelo de tabela única usa PK como chave primária no namespace de um SK.
Como usar o modelo de tabela única no Rockset
Rockset é um banco de dados analítico em tempo actual frequentemente usado em conjunto com o DynamoDB. Ele sincroniza com dados no DynamoDB para oferecer uma maneira fácil de realizar consultas para as quais o DynamoDB é menos adequado. Saiba mais no weblog de Alex DeBrie em Consultas de filtragem e agregação do DynamoDB usando SQL no Rockset.
Rockset possui 2 formas de criar integrações com DynamoDB. O primeiro é use RCUs para verificar a tabela do DynamoDBe, uma vez concluída a verificação inicial, o Rockset segue os fluxos do DynamoDB. O outro método utiliza exportação do DynamoDB para S3 para primeiro exportar a tabela do DynamoDB para o S3, realizar uma ingestão em massa do S3 e, após a exportação, o Rockset começará a seguir os streams do DynamoDB. O primeiro método é usado quando as tabelas são muito pequenas, <5 GB, e o segundo tem muito mais desempenho e funciona para tabelas maiores do DynamoDB. Qualquer um dos métodos é apropriado para o método de tabela única.
Lembrete: os rollups não podem ser usados no DDB.
Depois que a integração estiver configurada, você terá algumas opções a considerar ao configurar as coleções do Rockset.
Método 1: coleta e visualizações
A primeira e mais simples é ingerir toda a tabela em uma única coleção e implementar visualizações no Rockset. Portanto, no exemplo acima, você teria uma transformação SQL semelhante a:
-- new_collection
choose i.* from _input i
E você construiria duas visualizações no topo da coleção.
-- person view
Choose c.* from new_collection c the place c.SK = 'Consumer';
e
--class view
choose c.* from new_collection c the place c.SK='Class';
Esta é a abordagem mais simples e requer o mínimo de conhecimento sobre tabelas, esquema de tabelas, tamanhos, padrões de acesso, and so on. Normalmente, para tabelas menores, começamos aqui. Lembrete: as visualizações são um açúcar sintático e não materializam dados, portanto, devem ser processadas como se fossem parte da consulta para cada execução da consulta.
Método 2: coleção e visualizações agrupadas
Este método é muito semelhante ao primeiro método, exceto que implementaremos o clustering ao fazer a coleção. Sem isso, quando uma consulta que utiliza o índice de coluna do Rockset for executada, toda a coleção deverá ser varrida porque não há separação actual de dados no índice de coluna. O clustering não terá impacto no índice invertido.
A transformação SQL será semelhante a:
-- clustered_collection
choose i.* from _input i cluster by i.SK
A ressalva aqui é que o clustering consome mais recursos para ingestão, portanto, a utilização da CPU será maior para coleções clusterizadas do que para coleções não clusterizadas. A vantagem é que as consultas podem ser muito mais rápidas.
As visualizações serão as mesmas de antes:
-- person view
Choose c.* from new_collection c the place c.SK = 'Consumer';
e
--class view
choose c.* from new_collection c the place c.SK='Class';
Método 3: coleções separadas
Outro método a ser considerado ao criar coleções no Rockset a partir de um modelo de tabela única do DynamoDB é criar várias coleções. Este método requer mais configuração inicial do que os dois métodos anteriores, mas oferece benefícios consideráveis de desempenho. Aqui usaremos o the place
cláusula de nossa transformação SQL para separar os SKs do DynamoDB em coleções separadas. Isso nos permite executar consultas sem implementar clustering ou implementar clustering dentro de um SK particular person.
-- Consumer assortment
Choose i.* from _input i the place i.SK='Consumer';
e
-- Class assortment
Choose i.* from _input i the place i.SK='Class';
Este método não requer visualizações porque os dados são materializados em coleções individuais. Isso é realmente útil ao dividir tabelas muito grandes onde as consultas usarão combinações de índice invertido e índice de coluna do Rockset. A limitação aqui é que teremos que fazer uma exportação e um stream separados do DynamoDB para cada coleção que você deseja criar.
Método 4: combinação de coleções separadas e clustering
O último método a discutir é a combinação dos métodos anteriores. Aqui você dividiria SKs grandes em coleções separadas e usaria clustering e uma tabela combinada com visualizações para SKs menores.
Pegue este conjunto de dados:
Você pode construir duas coleções aqui:
-- user_collection
choose i.* from _input i the place i.SK='Consumer';
e
-- combined_collection
choose i.* from _input i the place i.SK != 'Consumer' Cluster By SK;
E então 2 visualizações acima de Combined_Collection:
-- class_view
choose * from combined_collection the place SK='Class';
e
-- transportation_view
choose * from combined_collection the place SK='Transportation';
Isso oferece os benefícios de separar as coleções grandes das coleções pequenas, mantendo o tamanho da coleção menor, permitindo que outros SKs menores sejam adicionados à tabela do DynamoDB sem a necessidade de recriar e reingerir as coleções. Ele também permite maior flexibilidade para desempenho de consulta. Esta opção vem com a maior sobrecarga operacional para configurar, monitorar e manter.
Conclusão
O design de tabela única é uma técnica common de modelagem de dados no DynamoDB. Tendo apoiado numerosos usuários do DynamoDB por meio do desenvolvimento e da produção de seus aplicativos de análise em tempo actual, detalhamos vários métodos para organizar seu modelo de tabela única do DynamoDB no Rockset, para que você possa selecionar o design que funciona melhor para seu caso de uso específico.