Não tenho certeza se consultores externos seriam o melhor suporte para sua empresa se você deseja lidar com conjuntos de dados muito grandes e precisa começar do zero. Por favor, não me interpretem mal, mas se alguém estragar um projeto com tantos clientes, isso terá um impacto de PR na sua empresa.
Em relação às tuplas de 10 milhões em uma tabela, se você tiver uma boa indexação, tudo ficará bem. Precisamos armazenar várias tuplas de 100M em uma tabela aqui (itens vendidos) que funcionem bem em um grande oráculo 11g
Aqui está uma publicação de 2010 com um mapa do facebooks db design: Facebook database design
Você pode ler a documentação do mysql sobre tipos de partição como este: Documentação do MySQL: Particionando
O MySQL suporta estes tipos:
Particionamento RANGE . Esse tipo de particionamento atribui linhas a partições com base nos valores das colunas que estão dentro de um determinado intervalo. Consulte a Seção 18.2.1, “Particionamento de intervalos”.
LISTA particionamento. Semelhante ao particionamento por RANGE, exceto que a partição é selecionada com base em colunas correspondentes a um de um conjunto de valores discretos. Consulte a Seção 18.2.2, “Particionando na lista”.
Particionamento HASH . Com esse tipo de particionamento, uma partição é selecionada com base no valor retornado por uma expressão definida pelo usuário que opera nos valores da coluna nas linhas a serem inseridas na tabela. A função pode consistir em qualquer expressão válida no MySQL que produz um valor inteiro não negativo. Uma extensão para esse tipo, LINEAR HASH, também está disponível. Consulte a Seção 18.2.3, “Particionamento HASH”.
Particionamento de chaves . Esse tipo de particionamento é semelhante ao particionamento pelo HASH, exceto que apenas uma ou mais colunas a serem avaliadas são fornecidas, e o servidor MySQL fornece sua própria função de hash. Essas colunas podem conter valores diferentes de números inteiros, pois a função de hash fornecida pelo MySQL garante um resultado inteiro, independentemente do tipo de dados da coluna. Uma extensão para esse tipo, LINEAR KEY, também está disponível. Consulte a Seção 18.2.4, “Particionamento de chaves”.
I can't believe they would have one global user table with 950 million entries.
Eu posso, não é tão grande assim. Eu trabalhei com tabelas maiores. É bem comum. A outra opção que eu consideraria se você tiver muitos outros dados é um banco de dados NoSQL .