Estou planejando construir um microsserviço de gerenciamento de arquivos para uma plataforma SaaS multilocatário que usa Amazon S3 como back-end de armazenamento de arquivos. Pretendo usar DynamoDB como banco de dados porque é rápido e escalável. A plataforma pode hospedar muitos locatários, com cada locatário tendo muitos usuários e cada usuário tendo muitos arquivos em seu espaço de armazenamento.
Preciso manter um registro dos metadados de cada arquivo e da estrutura de diretórios do usuário (hierarquia) no banco de dados. No entanto, não tenho certeza se o DynamoDB é a melhor escolha. Um usuário pode querer listar todos os seus diretórios e arquivos, pesquisar por nome ou classificá-los em ordem alfabética ou por data de criação. Isto poderia levar ao problema da "partição quente" (pelo menos para Índices Secundários Globais). A situação pode se tornar ainda mais desafiadora ao rastrear todos os arquivos carregados por todos os usuários de um locatário.
Portanto, estou considerando uma abordagem híbrida: usar PostgreSQL para dados relacionais e DynamoDB para armazenar informações de arquivos e hierarquias de diretórios.
O que você acha dessa ideia? Alguém pode me apontar na direção certa?
Desde já, obrigado.
Não mais do que qualquer outro sistema de banco de dados convencional, como SQL Server, PostgreSQL, MySQL, etc, para citar alguns.
Provavelmente não. DynamoDB é um banco de dados de armazenamento de chave-valor NoSQL usado para procurar dados específicos por uma chave....
...E estes são principalmente casos de uso e objetos de dados que parecem relacionais.
Não faz sentido tentar manter dois sistemas de banco de dados aqui. Basta armazenar todos os dados em um único RDBMS como PostgreSQL e encerrar o dia. Ele terá o mesmo desempenho quando arquitetado corretamente, sendo dados relacionais. Especialmente porque os dados hierárquicos são de natureza semelhante a uma árvore, que são naturalmente modelados pelo tipo de índices que o RDBMS usa.
Falo com experiência trabalhando com " big data " em servidores de banco de dados multi-tenant do tipo RDBMS, em hardware modesto (na verdade hospedados na AWS), cujas consultas geralmente rodavam em menos de um segundo.