web-dev-qa-db-fra.com

Modèle de mise à jour de la base de données Azure Cosmos

J'ai récemment commencé à utiliser Cosmos DB pour un projet et je rencontre quelques problèmes de conception. Venant d’un contexte SQL, je comprends que les données connexes doivent être imbriquées dans les documents d’une base de données NoSQL. Cela signifie cependant que les documents peuvent devenir assez volumineux. 

Étant donné que les mises à jour partielles ne sont pas prises en charge, quel est le meilleur modèle de conception à implémenter lorsque vous souhaitez mettre à jour une propriété unique sur un document? 

Devrais-je lire tout le côté serveur de documents, mettre à jour la valeur et réécrire le document immédiatement pour effectuer une mise à jour? Cela semble problématique si les documents sont volumineux, ce qui serait inévitablement le cas si toutes vos données sont imbriquées.

Si je prends beaucoup de documents plus petits et que j'infère des relations basées sur des identifiants, cela résoudrait immédiatement les problèmes de lecture/écriture, mais j'ai l'impression que je vais à l'encontre du concept NoSQL DB.

Merci

13
Ross

Verrouillage et verrouillage. C'est ce qui doit arriver si des mises à jour partielles deviennent possibles. C'est un problème d'ingénierie difficile de garder une latence d'écriture de <15 ms SLA avec le verrouillage.

Cela semble problématique si les documents sont volumineux, ce qui serait inévitablement le cas si toutes vos données sont imbriquées.

Définissez votre peur: unités de demande brûlées, mémoire de l'hôte de l'application, trafic réseau entrant/sortant? Vous pensez que c'est un problème mais vous ne déclarez pas de résultats concrets. Je ne dis pas que vous avez tort ou que vous doutez de l'efficacité de l'approche de mise à jour partielle, je dis simplement que l'argument est mince.

Habituellement, vous ne voulez JOIN rien dans NoSQL, je suis donc totalement à vos côtés pour le dernier paragraphe.

4
evilSnobu

Chaque fois que vous essayez de créer un document, essayez de prendre en compte ceci:

  • La partie du document nécessite-t-elle un accès séparé? Si oui, créez un document référencé et si non, créez un document incorporé.

    Et si vous voulez savoir quoi choisir, je pense que vous devriez jeter un coup d'œil à cette question, c'est pour MongoDb mais vous aidera/ Document incorporé/document référencé

2
vikscool

Intégrer ou référencer est le problème le plus courant auquel je suis confronté lors de la conception de la structure de document dans le monde NoSQL.

Dans une relation incorporée, des entités enfants ont été incorporées dans le document parent. Dans la relation de référence, les entités enfants dans des documents distincts et leur parent dans un autre document, ayant fondamentalement deux (ou plus) types de documents.

Il n'y a pas un seul modèle de relation qui convient à tous. L'approche que vous devez adopter dépend de la récupération et de la mise à jour à effectuer sur les données en cours de conception.

1. Avez-vous besoin de récupérer toutes les entités enfants avec les entités mères? Si oui, utilisez des relations intégrées.

2. Votre cas d'utilisation permet-il de récupérer des entités individuellement? Ce modèle de relation d'utilisation de cas.

La majorité des cas d'utilisation, j'ai travaillé, j'ai utilisé le modèle de relation. Par exemple: graphique social (profils avec arbre de relations), points de proximité (recherche de proximité basée sur GeoJSON), petites annonces, etc.

Le modèle de relation est également plus facile à mettre à jour et à gérer, car les entités sont stockées dans des documents individuels.

0
spideringweb