J'ai effectivement implémenté ceci et c'est très faisable et donne de très bonnes performances d'écriture. Je suppose que vous avez les mêmes raisons de l'implémenter que moi (ciblage instantané des fragments sans échauffement/équilibrage, débit d'écriture, pas de dégradation des performances lors des mouvements/découpages de blocs, etc.).
Vos questions:
- Oui, il est fourni de l'implémenter correctement.
- Ce que je fais dans notre couche ORM interne est de marquer certains champs dans le document comme un champ haché. Notre ORM générera alors automatiquement une valeur de hachage pour cette valeur de champ juste avant d'écrire ou de lire le document. Les requêtes sortantes sont ensuite décorées avec cette valeur de hachage (dans notre cas, toujours appelée "hash"), que le sharding MongoDB utilise ensuite pour le ciblage de partition. Évidemment, dans ce scénario, le "hachage" est toujours la seule clé de partitionnement.
- Le plus important de loin est de générer de bons hashs. Un grand nombre de valeurs de champs (le plus souvent un champ _id basé sur ObjectId) sont incrémentales, aussi votre algorithme de hachage doit-il être tel que les hachages générés pour les valeurs incrémentielles résultent en des valeurs de hachage qui frappent différents fragments. D'autres problèmes incluent la sélection de la taille de bloc appropriée.
Quelques inconvénients à considérer:
- équilibrage par défaut MongoDB morceau devient moins utile puisque vous généralement configurer votre groupe initial avec beaucoup de morceaux (ce qui facilite l'ajout tessons à votre cluster, tout en maintenant la propagation de bonne morceau à travers tous les éclats). Cela signifie que l'équilibreur ne commencera à se fractionner que si vous avez suffisamment de données dans vos blocs prématurés pour nécessiter une division.
- Il est probable qu'il devienne officiellement une fonctionnalité MongoDB officiellement prise en charge dans un proche avenir, ce qui peut rendre cet effort un peu inutile. Comme moi, vous n'avez peut-être pas le luxe d'attendre.
Bonne chance.
MISE À JOUR 25/03/2013: À partir de la version 2.4, MongoDB prend en charge les index de hachage en mode natif.
Est-ce (similaire à) ce tag courant biche de sharding s maintenant dans 2.2? –
Non. Ce qui précède décrit comment utiliser le hachage statique d'une manière qui permet de pré-découper/déplacer des morceaux. Le marquage des fragments consiste à affecter certaines plages de données à certains fragments afin que vous puissiez, par exemple, vous assurer que les données fréquemment consultées par des personnes d'un certain pays résident dans les centres de données les plus proches de ce pays. Reportez-vous à http://www.mongodb.org/display/DOCS/Tag+Aware+Sharding pour plus de détails. –