Je ne sais pas si des consultants externes seraient le meilleur support pour votre entreprise si vous allez gérer de très grands ensembles de données et que vous devez partir du sol. S'il vous plaît, ne vous méprenez pas, mais si quelqu'un bousille un projet avec autant de clients, cela aura un impact RP sur votre entreprise.
En ce qui concerne les tuples 10M dans une table, si vous avez une bonne indexation, ce sera bien. Nous devons stocker plusieurs tuples de 100 millions dans une table ici (articles vendus), ce qui fonctionne bien sur un grand oracle 11 g
Voici une publication de 2010 avec une carte de conception de facebooks db: Conception de base de données Facebook
Vous voudrez peut-être lire la documentation mysql sur les types de partitions comme ceci: Documentation MySQL: Partinioning
MySQL prend en charge ces types:
Partitionnement RANGE . Ce type de partitionnement attribue des lignes aux partitions en fonction des valeurs de colonne comprises dans une plage donnée. Voir Section 18.2.1, «Partitionnement de RANGE».
Partitionnement LIST . Similaire au partitionnement par RANGE, sauf que la partition est sélectionnée en fonction de colonnes correspondant à l'une d'un ensemble de valeurs discrètes. Voir Section 18.2.2, «Partitionnement LISTE».
Partitionnement HASH . Avec ce type de partitionnement, une partition est sélectionnée en fonction de la valeur renvoyée par une expression définie par l'utilisateur qui opère sur les valeurs de colonne dans les lignes à insérer dans la table. La fonction peut être constituée de toute expression valide dans MySQL qui donne une valeur entière non négative. Une extension de ce type, LINEAR HASH, est également disponible. Voir Section 18.2.3, «Partitionnement HASH».
Partitionnement KEY . Ce type de partitionnement est similaire au partitionnement par HASH, sauf qu'une seule ou plusieurs colonnes à évaluer sont fournies et que le serveur MySQL fournit sa propre fonction de hachage. Ces colonnes peuvent contenir des valeurs autres que des entiers, car la fonction de hachage fournie par MySQL garantit un résultat entier quel que soit le type de données de la colonne. Une extension de ce type, LINEAR KEY, est également disponible. Voir Section 18.2.4, «Partitionnement des touches».
I can't believe they would have one global user table with 950 million entries.
Je peux, ce n'est pas si grand. J'ai travaillé avec des tables plus grandes. C'est assez commun. L'autre option que je considérerais si vous avez beaucoup d'autres données est une base de données NoSQL .