MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Meilleures pratiques pour mettre à jour les données dupliquées de manière asynchrone dans mongodb

En gros, vous avez 3 options :

  1. Stockez simplement le userId puis récupérez l'utilisateur séparément. De cette façon, vous obtenez toujours les résultats optimaux en termes de données fraîches. Mais bien sûr, c'est plus lent. C'est essentiellement ce que fait une base de données relationnelle. Une base de données SQL examinera simplement la clé étrangère et récupérera les données par identifiant.

  2. Vivez avec des données obsolètes. Stockez une copie du nom d'utilisateur dans les commentaires. Il s'agit parfois d'un comportement souhaité, car vous pouvez ainsi représenter les données exactement telles qu'elles étaient lorsqu'elles ont été stockées. Cela signifie :si John crée un commentaire et que plus tard son nom d'utilisateur est mis à jour en Paul, vous pouvez toujours voir qu'il a été créé en tant que John. (Ceci est particulièrement utile pour les factures, par exemple, lorsque vous faites référence à une personne et que l'adresse change, que vous ne souhaitez pas mettre à jour l'adresse d'une ancienne facture)

  3. Mettez à jour tout ce qui contient un nom d'utilisateur, lorsque le nom d'utilisateur est mis à jour. Ce n'est pas mal non plus, car un nom d'utilisateur ne devrait normalement jamais changer. Ainsi, les lectures seront toujours rapides, car le nom est stocké à l'intérieur du commentaire. Et si le nom change, vous devez mettre à jour tout ce qui concerne l'utilisateur. C'est une tâche lente bien sûr, mais comme cela ne devrait pas se produire à chaque minute, c'est tolérable.

    3.1 Vous pouvez optimiser les choses :si le nom d'utilisateur change, il est stocké quelque part et appliqué à minuit. De cette façon, vous pouvez collecter plusieurs changements de nom et tout mettre à jour en même temps.

Comme vous pouvez le voir :NoSQL est une question de choix . Vous pouvez faire les choses qui correspondent le mieux à vos données. Bien sûr, c'est toujours un compromis :plus lent/plus rapide, plus/moins de code à écrire, plus facile/plus difficile à maintenir.

En résumé, c'est :

  1. Écritures rapides, données cohérentes, lectures lentes
  2. Écritures rapides, données incohérentes, lectures rapides
  3. Écritures rapides, lectures rapides, les données deviennent cohérentes après le processus de mise à jour, ce qui peut prendre un certain temps. Et le processus de mise à jour est bien sûr lent.