2010-07-15 2 views
1

Il y a un portail avec deux milliards d'utilisateurs enregistrés. Si vous stockez tous les 2 milliards d'utilisateurs dans une base de données conventionnelle, il faudra plus de temps pour récupérer les données sur un utilisateur particulier lorsque cet utilisateur tente de se connecter. Comment gérez-vous cette situation pour vous assurer que l'utilisateur obtient la réponse rapidement.comment stocker 2 milliards d'utilisateurs?

+6

donc 1 personne sur 3 dans le monde est enregistrée sur ce portail? Question trop vague. – Fosco

+5

Vider la base de données ... pas au sérieux, ne vous méprenez pas, mais si vous avez une communauté en ligne avec 2 milliards d'utilisateurs, vous devriez vraiment penser à un nettoyage de printemps ... ou vous venez de battre Facebook par 1,6 milliard d'utilisateurs ... – Bobby

+1

"Il y a un portail avec deux milliards d'utilisateurs enregistrés." C'est une affirmation assez audacieuse. – David

Répondre

0

Je ne sais pas si sa pratique, mais en théorie, vous pouvez utiliser une sorte de structure arborescente. Si je me souviens de mes classes CS depuis longtemps, les arbres sont O (ln), donc pour un milliard (soit 2^30), vous avez seulement besoin de 30 opérations pour une recherche. Cest la beauté de CS ....

La mise en œuvre d'une structure arborescente pour cela, je ne sais pas.

+0

Il existe une famille de structures arborescentes optimisées pour stocker de grandes quantités de données (c'est-à-dire trop grandes pour être placées dans la mémoire principale). Ils s'appellent B-Trees. Et maintenant devinez comment à peu près toutes les bases de données implémentent leurs index ... –

+0

#Michael Borgwardt - right. Je ne savais pas si c'était une question pratique "J'ai besoin de faire ça" ou une question théorique. On dirait des devoirs ou une question d'interview pour moi ... – hvgotcodes

7

Je ne vois aucune raison particulière pour laquelle une base de données classique sur du matériel moderne décent ne pouvait pas récupérer informations de connexion assez rapidement, même si vous avez 2 milliards d'enregistrements. Il est une simple recherche indexée après tout (vous ne me souvenais à l'index de l'ID utilisateur, non?)

Sur une machine vraiment grand, vous pourriez même compatibles avec la plupart de celui-ci dans la RAM.

Cependant, si vous êtes vraiment essayer de concevoir ce pour l'échelle je regarde quelque chose comme Cassandra. Il s'agit d'une base de données NoSQL distribuée hautement disponible, essentiellement le même type d'architecture que Google, Facebook, etc.

0

Si vous avez un portail de 2 milliards d'utilisateurs, connectez-vous est une petite quantité de toutes les requêtes qui seront effectuées.
Le problème ici n'est pas le temps qu'il faut pour 1 connexion, mais que se passe-t-il si un pour cent de tous les utilisateurs est actif en même temps.
Heureusement, deux milliards d'utilisateurs ne correspondent pas à un continent. Vous pouvez donc utiliser des serveurs de bases de données distribués, qui desservent chacun leur propre partie du monde. Et vous pouvez les synchroniser en arrière-plan (au cas où quelqu'un se rendrait sur un autre continent). Si vous avez les ressources (temps, argent, personnel) vous pouvez inventer votre propre base de données bigtable comme google did (avec 2 milliards d'utilisateurs vous avez probablement de l'argent et du personnel), mais je m'en tiens aux bases de données relationnelles normales ce.

Questions connexes