Au lieu d'essayer de modéliser selon nos années d'expérience avec du SGBDR, j'ai trouvé beaucoup plus simple de modèle de document-référentiel des solutions à l'aide de MongoDB, Redis, et les autres magasins de données NoSQL par l'optimisation de la lecture des cas d'utilisation, tout en étant attentif de la atomique de l'écriture des opérations qui doivent être pris en charge par l'écriture des cas d'utilisation.
Par exemple, l'utilisation d'un "Utilisateurs dans des Rôles de" domaine suivre:
1. Rôle - Créer, Lire, mettre à Jour, Supprimer, Liste des Utilisateurs, Ajouter un Utilisateur, Supprimer des Utilisateurs, Désactivez Tous les Utilisateurs, l'Indice de l'Utilisateur ou similaires à support", Est l'Utilisateur Dans leur Rôle" (opérations comme un conteneur + ses propres métadonnées).
2. L'utilisateur Create, Read, Update, Delete (opérations CRUD comme un libre-debout entité)
Cela peut être modélisée par la suite des modèles de document:
Utilisateur: { _id: id unique, nom: string, des rôles: string[] }
Index: unique: [ nom ]
Rôle: { _id: id unique, nom: string, utilisateurs: string[] }
Index: unique: [ nom ]
À l'appui de la haute fréquence, tels que les Rôles liés à des caractéristiques de l'entité Utilisateur, Utilisateur.Les rôles sont intentionnellement dénormalisée, stockées sur l'Utilisateur ainsi que son Rôle.Les utilisateurs ayant un double stockage.
Si ce n'est pas évident dans le texte, mais c'est le type de pensée qui est encouragé lors de l'utilisation de référentiels de documents.
J'espère que cette aide à combler l'écart à l'égard de la lecture du côté de l'exploitation.
Pour l'écriture de côté, ce qui est encouragé consiste à modéliser selon atomique écrit. Par exemple, si le document de structures nécessitent l'acquisition d'un verrou de mise à jour d'un document, puis un autre, et peut-être plus de documents, puis relâcher le verrou, probablement le modèle a échoué. Tout simplement parce que nous pouvons construire distribués serrures ne veut pas dire que nous sommes censés les utiliser.
Pour le cas de l'Utilisateur dans des Rôles de modèle, les opérations qui s'étendent notre atomique écrire éviter les verrous d'ajout ou de suppression d'un Utilisateur à partir d'un Rôle. Dans les deux cas, la réussite de l'opération des résultats à la fois un Utilisateur unique et un seul Rôle document en cours de mise à jour. Si quelque chose tombe en panne, il est facile d'effectuer le nettoyage. C'est la raison pour laquelle l'Unité de Travail motif tout à fait un lot où les référentiels de documents sont utilisés.
L'opération qui vraiment s'étend notre atomique écrire évitement de serrures est la compensation d'un Rôle, ce qui aurait pour résultat de nombreuses mises à jour Utilisateur pour supprimer le Rôle.nom de l'Utilisateur.les rôles de tableau. Cette opération de claire est généralement déconseillée, mais si nécessaire, on peut être mis en œuvre par la commande d'opérations:
- Obtenir la liste des noms d'utilisateur à partir de Rôle.les utilisateurs.
- Parcourir les noms d'utilisateur à partir de l'étape 1, supprimer le nom du rôle de l'Utilisateur.les rôles.
- Clair le Rôle.les utilisateurs.
Dans le cas d'une question qui est plus susceptible de se produire à l'intérieur de l'étape 2, une restauration est facile que le même ensemble de noms d'utilisateur à partir de l'étape 1 peut être utilisé pour récupérer ou de continuer.