Je pense que je comprends que le sharding consiste à remettre vos données tranchées (les fragments) dans un agrégat facile à gérer qui a du sens dans le contexte. Est-ce correct?
Mise à jour : je suppose que je me bats ici. À mon avis, le niveau d'application ne devrait pas avoir à déterminer où les données doivent être stockées. Au mieux, il devrait être un client en quelque sorte. Les deux réponses ont répondu à l'aspect important mais non au pourquoi. Quelles implications cela a-t-il en dehors des gains de performance évidents? Ces gains sont-ils suffisants pour compenser la violation MVC? Le sharding est-il principalement important dans les applications à très grande échelle ou s'applique-t-il aux applications à plus petite échelle?
database
terminology
ojblass
la source
la source
Réponses:
Le sharding est juste un autre nom pour le "partitionnement horizontal" d'une base de données. Vous voudrez peut-être rechercher ce terme pour le clarifier.
De Wikipédia :
Quelques informations supplémentaires sur le sharding:
Mise à jour: vous ne casserez pas MVC. Le travail de détermination du fragment correct où stocker les données serait effectué de manière transparente par votre couche d'accès aux données. Là, vous devrez déterminer le fragment correct en fonction des critères que vous avez utilisés pour partager votre base de données. (Comme vous devez partager manuellement la base de données en plusieurs fragments différents en fonction de certains aspects concrets de votre application.) Ensuite, vous devez faire attention lors du chargement et du stockage des données de / dans la base de données pour utiliser le fragment approprié.
Peut - être que cet exemple avec du code Java le rend un peu plus clair (il s'agit du projet Hibernate Shards ), comment cela fonctionnerait dans un scénario réel.
Pour résoudre le "
why sharding
": c'est principalement uniquement pour les applications à très grande échelle, avec beaucoup de données. Tout d'abord, il aide à réduire les temps de réponse pour les requêtes de base de données. Deuxièmement, vous pouvez utiliser des machines "bas de gamme" moins chères pour héberger vos données au lieu d'un seul grand serveur, ce qui pourrait ne plus suffire.la source
Si vous avez des requêtes vers un SGBD pour lequel la localité est assez restreinte (par exemple, un utilisateur ne déclenche que les sélections avec un 'où nom d'utilisateur = $ mon_nom d'utilisateur'), il est logique de mettre tous les noms d'utilisateur commençant par AM sur un serveur et tous de NZ de l'autre. Par cela, vous obtenez une mise à l'échelle presque linéaire pour certaines requêtes.
En bref : le sharding est essentiellement le processus de distribution de tables sur différents serveurs afin d'équilibrer la charge sur les deux de manière égale.
Bien sûr, c'est tellement plus compliqué en réalité. :)
la source
Le partitionnement est un partitionnement de base de données horizontal (par ligne ) par opposition au partitionnement vertical (par colonne ) qui est la normalisation . Il sépare les très grandes bases de données en parties plus petites, plus rapides et plus faciles à gérer appelées fragments de données. C'est un mécanisme pour réaliser des systèmes distribués.
Pourquoi avons-nous besoin de systèmes distribués?
Vous pouvez en savoir plus ici: Avantages de la base de données distribuée
Comment le sharding aide à atteindre un système distribué?
Vous pouvez partitionner un index de recherche en N partitions et charger chaque index sur un serveur distinct. Si vous interrogez un serveur, vous obtiendrez 1 / Nème des résultats. Ainsi, pour obtenir un ensemble de résultats complet, un système de recherche distribué typique utilise un agrégateur qui accumule les résultats de chaque serveur et les combine. Un agrégateur distribue également la requête sur chaque serveur. Ce programme d'agrégation est appelé MapReduce dans la terminologie du Big Data. En d'autres termes, Distributed Systems = Sharding + MapReduce (bien qu'il y ait aussi d'autres choses).
Une représentation visuelle ci-dessous.
la source
Le partage est une préoccupation si et seulement si vos besoins dépassent ce qui peut être servi par un seul serveur de base de données. C'est un outil de gonflement si vous avez des données partageables et que vous avez des exigences d'évolutivité et de performances incroyablement élevées. Je suppose que dans mes 12 années entières, j'ai été un professionnel du logiciel, j'ai rencontré une situation qui aurait pu bénéficier du sharding. C'est une technique avancée avec une applicabilité très limitée.
En outre, l'avenir va probablement être quelque chose d'amusant et d'excitant comme un "nuage" d'objet massif qui efface toutes les limitations de performances potentielles, non? :)
la source
Sharding a été inventé à l'origine par les ingénieurs de Google et vous pouvez le voir utilisé assez fortement lors de l'écriture d'applications sur Google App Engine. Puisqu'il y a des limitations strictes sur la quantité de ressources que vos requêtes peuvent utiliser et parce que les requêtes elles-mêmes ont des limitations strictes, le partitionnement est non seulement encouragé mais presque appliqué par l'architecture.
Un autre endroit où le partage peut être utilisé est de réduire les conflits sur les entités de données. Il est particulièrement important lors de la construction de systèmes évolutifs de faire attention aux données qui sont souvent écrites car elles constituent toujours le goulot d'étranglement. Une bonne solution consiste à séparer cette entité spécifique et à écrire sur plusieurs copies, puis à lire le total. Un exemple de ce "compteur fragmenté par rapport à GAE: http://code.google.com/appengine/articles/sharding_counters.html
la source
Le sharding fait plus qu'un simple partitionnement horizontal. Selon l' article de wikipedia ,
Aussi,
la source
C'est une bonne règle mais comme la plupart des choses pas toujours correctes.
Lorsque vous faites votre architecture, vous commencez par des responsabilités et des collaborations. Une fois que vous avez déterminé votre architecture fonctionnelle, vous devez équilibrer les forces non fonctionnelles.
Si l'une de ces forces non fonctionnelles est une évolutivité massive, vous devez adapter votre architecture pour répondre à cette force même si cela signifie que votre abstraction de stockage de données s'infiltre maintenant dans votre niveau d'application.
la source