Quelles sont les meilleures pratiques pour la conception d’une base de données pour un site de réseautage social?

Il s’agit d’un sujet assez large et profond.

Je vais commencer par dire que certaines caractéristiques des bases de données sont nécessaires pour tous les sites, si social réseautage ou autrement. Parmi ceux-ci (d’après mon expérience) comprennent :

  • Sauvegarde et récupération
  • Surveillance/audit/alertes
  • Opérabilité générale (plus large que les 2 balles ci-dessus)
  • Excellent support pour le triage et tournant autour de bugs (cela peut venir d’une communauté, les développeurs internes si vous avez eux, ou une entreprise)

En supposant que vous avez tous de ce qui précède, que vous faut-il pour un site de réseautage social?

Tout d’abord, supposons que votre site prend son envol--ignorant que la plupart d'entre eux ne sont pas. Performances, évolutivité et tolérance aux pannes sont les caractéristiques les plus importantes.

Quelques définitions :

  • évolutivité : combien d’utilisateurs simultanés que vous pouvez gérer. Parfois, cela est exprimé en demandes par seconde. Pour les bases de la session-lourds, vous pouvez bien frappé une limite de session ou de connexion avant que vous frappiez la limite RPS.
  • performance : temps de réponse, habituellement exprimées en percentiles pas moyennes et une définition de la charge de travail (par exemple, 95 % des lectures simples sont servis à moins de 1 seconde et 99 % des écritures simples sont servis à moins de 2 secondes).
  • tolérance de panne : Quels types d’échecs peut résister à ce système (p. ex. ceil (n/2 - 1) crash d’échecs).

Performances
Vous pouvez gérer généralement de performance sur les lectures et les écritures en zone tampon écrit et mise en cache des lectures.

Mise en cache réduit les deux trafic lire à votre DB et réponse fois vus par vos utilisateurs finaux. La mise en cache introduit sa propre complexité en termes d’obsolescence, cohérence, efficacité opérationnelle, etc.... Toutefois, il contribue plus que ça fait mal, même si des solutions de mise en cache non averties sont utilisées.

Écrit peut être mis en mémoire tampon afin d’éviter d’accabler votre DB aux heures de pointe et de protéger les utilisateurs des pics de latence long-écriture. Tout comme la mise en cache, elle introduit des dépendances sur d’autres systèmes complexes--par exemple vos mémoires tampons d’écriture doivent être tolérant pour éviter de perdre des écritures.

Évolutivité
Une bonne DB soutient lire-mise à l’échelle (p. ex. 10 x lecture esclaves pour un maître d’écriture) pour lire les charges lourdes, écriture-scaling (ensembles de données par exemple sharded ou partitionnés horizontalement), l’utilisation de structures de données sans verrou et algorithmes, etc...

Considérations

S/FT/P
Gardez ces 3 caractéristiques (p. ex., FT, S et P) au dessus de votre liste lors de la cueillette de votre DB. Ne vont pas pour la sémantique requête fantaisie ou stockage caractéristiques (p. ex. orientées document DB)--ces seront Appuyez sur S et P limite plus tôt sur n’importe quel matériel donné. Vous pouvez ajouter plus de boîtes de contourner S et vous ajoutez des boîtes plus grands pour obtenir autour de P, mais pour n’importe quel matériel donné passent, vous aurez moins d’eux.

Requête-capacité (p. ex. richesse de langage d’interrogation)
On a beaucoup parlé ces dernières années les magasins clé-valeur, principalement sous la rubrique de NoSQL-tolérance de panne (p. ex. distribués DBs) sont généralement clé-valeur magasins. La raison est simplement que plus les requêtes de type SQL que nous utilisons aujourd'hui seraient finissent par devenir des nuages de points obtenus des requêtes sur une base de données distribuée et par conséquent atteindre pauvre S/FT/P.

Par conséquent, la plupart de l’innovation en DBs distribuées au cours des 20 dernières années ont découlant de l’utilisation de magasins K-V. Cela limite la flexibilité autour de l’interrogation et la modélisation des données.

C’est quelque chose que vous devez vivre. Il y a astuces comme index de bitmap (utilisés par exemple dans les magasins de l’OLAP) qui offrent une certaine souplesse, mais ils viennent avec leurs propres défauts--le plus grand d'entre eux est la grande peine de blocage que vous payez au moment de la mise à jour. Il sacrifie P au moment de l’écriture, mais augmente la capacité de requête et P au moment de la lecture.

Il suffit de savoir que vous êtes sacrifier des choses comme des jointures, qui sont très importants dans les réseaux sociaux, mais vous gagnez S/FT/P.

Twitter et Facebook résolvent ces problèmes de différentes manières. Twitter disperse écrit. Facebook met en cache les résultats des jointures.

LinkedIn va vers la mise en cache des jointures, le cas échéant.

J’espère que cela aide.


Tags: Développement Web, Startups, SQL, Systèmes de bases de données, Réseaux sociaux en ligne, Infrastructure de Facebook, Meilleures pratiques de génie logiciel Infrastructure technique de Quora, Ingénierie de Facebook, MySQL