Como gerenciar fluxo do Banco de Dados de uma aplicação na Nuvem

Boa tarde,
Estou projetando um sistema que será modularizado e hospedado na nuvem junto com o banco de dados, mas estou com uma dúvida como proceder com o modo de trabalhar com o banco de dados.

Todos os módulos serão acessados através da mesma interface web.
A ideia é que o usuário só tenha controle sobre a interface sem se preocupar com instalações e manutenções.

Então pensei nessas abordagens:

  1. Apenas um banco de dados onde armazena todos os meus usuários inscritos e seus dados.
  2. Criar um banco de dados matriz onde armazena os registros principais de cada usuário e outros bancos de dados para cada módulo.
  3. Criar um banco de dados matriz como no item anterior contendo as credenciais para conectar a um banco de dados onde contém registros de todos os módulos apenas do usuário autenticado

Supondo que eu tenha 100 usuários:

  • Na primeira abordagem se cada usuário possuir 1000 registros eu teria um banco de dados com 100 mil registros no total e crescendo a medida que o sistema vai adquirindo mais usuários.
  • Na abordagem dois teria granularidade dos dados e poderia gerar duplicidade, mas poderia controlar isso utilizando ferramentas auxiliares.
  • Na abordagem três apesar de o banco de dados só possuir os registros de um usuário específico eu teria problema com manutenção pois se precisar criar uma tabela teria que criar em 100 bancos de dados, então essa ta fora de cogitação.

Estou entre a abordagem um e dois e gostaria de ler a opinião de quem entende do assunto.
Obrigado.

Estou me preparando para iniciar um projeto web e estou diante do mesmo dilema que você.
Isso me mostra duas coisas

  • Ou nós dois estamos errados

  • Esse é o caminho das pedras

As vantagens que eu vejo nessa abordagem é que cada cliente terá sua própria base, isso lhe permitirá customizações, mais segurança e lhe permitirá alterações de infraestrutura independente do usuário.
A questão de modelagem é um problema que terá que ser tratado durante a vida do sistema. É tentar criar a melhor modelagem possível.

Espero que não estejamos errados ^^

Mas é verdade, a modelagem tem que ser muito bem pensada pra não dar gargalo no futuro.
E estou tentando visualizar esses problemas.
Já trabalhei em lugares que se perdia muito tempo com isso devido à falta de planejamento.

Casos que ia um suporte externo atualizar o sistema e o banco de dados e chegava lá esquecia alguma coisa e o banco de dados gerava vários erros.

Ai criamos um repositório de atualização que o sistema buscava pela web mas ainda sim tinha banco de dados em potenciais riscos de corrupção que ainda se fazia necessidade de ir alguém lá pra fazer manual.

Isso é uma das coisas que estou querendo mitigar e que me fez pensar em criar um sistema na nuvem para fugir desses erros de manutenção “bobos”. Deixando essa parte mais sob meu controle do que sob controle do usuário.

Até porque lidar com cliente que não enxerga como investimento e sim como gasto é complicado.

Nessa abordagem de um banco de dados por cliente vai gerar um pouco de sobrecarga nas atividades de infraestrutura tal como

  • Manutenção da base
  • Backups de base
  • atualização/migração de servidor