2

J'ai une application pilotée par une source d'événements horizontale qui s'exécute à l'aide d'un sujet Azure Service Bus Topic et d'une file d'attente Service Bus. Certains événements de construction de l'état de mon modèle de domaine sont reçus par le sujet par tous mes serveurs, tandis que ceux de la file d'attente (ceux reçus plus souvent et non mutants) sont répartis entre les serveurs afin de distribuer charge.DocumentDB insert simultané unique?

Maintenant, chaque fois que l'un de mes serveurs reçoit un événement dans la file d'attente ou d'un sujet, il le stocke dans un DocumentDB qu'il utilise comme magasin d'événements.

Maintenant, voici le problème. Comment puis-je être sûr que le même document n'est pas inséré deux fois? Disons que 3 serveurs reçoivent le même événement. Ils essaient tous de le stocker. Comment puis-je le faire échouer pour 2 des serveurs dans le cas où ils décident de faire tout cela en même temps? Existe-t-il une forme de contrainte unique que je peux définir dans DocumentDB ou une sorte de portée de transaction pour empêcher l'insertion du document deux fois?

+1

Est-il possible de concevoir l'identifiant de sorte qu'il en soit de même si vous aviez le même document? Si c'est le cas, écrivez simplement toujours à cet id. –

Répondre

4

La propriété id pour chaque document a une contrainte d'unicité. Vous pouvez utiliser cette contrainte pour vous assurer que les documents en double ne sont pas écrits dans une collection.

+0

Puis-je d'une manière ou d'une autre fournir des versions pour mes documents, afin que les nouvelles versions soient mises à jour au lieu de simplement * non insérées * lorsqu'un document existant est trouvé? –