PHP SaaS multi-tenant - Separe DB's para cada cliente, ou agrupe-os?

Você terá que agüentar comigo aqui, possivelmente por entender um pouco da terminologia, já que eu nem estava ciente de que isso se encaixava em toda a categoria de "multi-inquilino" como um serviço, mas aqui está.

Eu desenvolvi um sistema de associação (em PHP) para um cliente. Agora, estamos olhando para oferecê-lo como uma solução completamente hospedada para nossos outros clientes, fornecendo um subdomínio (ou até mesmo seu próprio domínio).

As opções que pareço ter na mesa, no que diz respeito ao armazenamento de dados, são:

Opção 1 - Armazene tudo em um grande banco de dados e tenha um campo 'client_id' nas tabelas que precisam (haveria cerca de 30 tabelas às quais ele se aplicaria) e tenha uma tabela 'clients' armazenando suas principais configurações, detalhes, etc. e o domínio para mapear para eles. Isso, então, apenas define uma variável globalmente acessível contendo seu ID de cliente individual - obviamente teria que modificar cada consulta para verificar a coluna client_id.

opção 2 - Tenha uma tabela mestre com as tabelas 'referência compartilhada' e a tabela 'clientes'. Em seguida, ter 'blocos' de outros bancos de dados, cada um contendo, digamos, 10 clientes. O cliente obteria suas próprias tabelas de banco de dados, prefixadas com seu ID de cliente. Isso adiciona um pouco de segurança para proteger contra a exibição de outros dados do cliente, se algo der errado.

Opção 3 - Exatamente o mesmo que a opção 2, exceto que você tem 1 banco de dados para cada cliente, isolando-os completamente de outros clientes e, teoricamente, fornecendo um pouco mais de proteção que, se as tabelas de 1 cliente fossem hackeadas ou danificadas, não afetaria ninguém outro. A maior desvantagem é que ao implantar um novo cliente, um banco de dados inteiro, usuário e senha precisam ser configurados, etc. Isso também poderia causar uma boa quantidade de sobrecarga, ou seria praticamente o mesmo que se você tivesse todos em um base de dados?

Alguns pontos também - alguns desses clientes terão mais de 5000 "clientes", juntamente com todos os detalhes para esses clientes - é por isso que a opção 1 pode ser um problema - se eu tiver 100 clientes, isso pode ser igual mais de meio milhão de linhas em uma tabela.

Estou correto em pensar que a Opção 3 seria a melhor maneira de ir em uma situação em que a segurança dos dados do cliente (e informações de pagamento) é fundamental. De recomendações que eu tive, algumas pessoas disseram para ir com a opção 1 porque 'é mais fácil' no entanto eu realmente não vejo dessa maneira. Eu vejo isso como um potencial gargalo no final da linha, como certamente eu posso mover os clientes muito mais facilmente se eles tiverem seu próprio banco de dados.

(FYI O sistema é PHP baseado no MySQL)