Question

Le co-fondateur de Reddit a présenté un exposé sur les questions qu'ils avaient tout en réduisant à des millions d'utilisateurs. Un résumé est disponible ici .

Ce qui m'a surpris est le point 3:

  

, ils gardent plutôt une chose table et une table de données. Tout à Reddit est une chose: les utilisateurs, les liens, les commentaires, subreddits, récompenses, etc. Les choses continuent comme attribut commun up / down votes, un type, et la date de création. Le tableau de données comporte trois colonnes: id chose, clé, valeur. Il y a une ligne pour chaque attribut. Il y a une ligne pour le titre, url, auteur, votes de spam, etc. Quand ils ajoutent de nouvelles fonctionnalités dont ils ne sont pas à vous soucier de la base de données plus. Ils ne disposaient pas d'ajouter de nouvelles tables pour de nouvelles choses ou de se soucier des mises à niveau.

Cela semble être une idée terrible pour moi, mais il semble avoir travaillé pour Reddit. Est-ce une bonne idée en général, bien? Ou est-ce une particularité de Reddit qui est arrivé à travailler pour eux?

Était-ce utile?

La solution

Ceci est un modèle de données connu sous le nom EAV pour Entité- valeur d'attribut . Il a ses utilisations. Un premier exemple est des données de test du patient qui est naturellement rare car il y a des centaines de milliers de tests qui pourraient être exécutés, mais en général seulement une poignée sont présents pour un patient. Une table avec des centaines de milliers de colonnes est stupide, mais une table avec EAV bon sens.

Autres conseils

La plupart des sites web très gros finissent en utilisant une sorte de incroyablement simple du côté de la base de données des choses. Ceci a l'avantage qu'il est rapide et évolutive. Il présente l'inconvénient que toutes les relations que vous obtiendriez la base de données pour appliquer automatiquement (via les déclencheurs et autres) vous besoin pour vous appliquer dans votre code client à la place. Le maintien de la cohérence est une douleur dans le cou, et il y a presque toujours au moins une chance que vos données seront incompatibles, au moins pendant de courtes périodes de temps.

Pour un site de réseautage social, il est un compromis intéressant. Les données qui est surtout droit la plupart du temps est suffisant (par exemple, qui a vraiment soins si le nombre de mises à voix que vous recevez pour un article est vraiment 20 millisecondes de date à laquelle il est envoyé), et en maintenant des coûts raisonnables tout en réduisant pour soutenir un gazillion utilisateurs importe beaucoup.

Je note qu'ils ne mentionnent rien au sujet de la facilité ou la difficulté à créer des rapports contre ces données. Lorsqu'il est utilisé dans un cas bien précis, EAV peut être bénéfique. En tant que partie centrale de la plupart des systèmes, il deviendra un cauchemar lorsque vous appuyez sur les rapports. Le problème avec EAV est que la plupart de la prestation est au début du projet et la plupart de la douleur est plus tard dans l'analyse et de rapports, particulièrement en raison du manque grave de l'intégrité des données. « Ne pas avoir à se soucier des clés étrangères » me sonne comme un cauchemar de lignes orphelines. Ajouter dans l'utilisation des clés de substitution pour tout et vous avez un bourbier enchevêtrées qui généralement se termine par une ré-écriture complète

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top