2009-12-22 1 views
1

J'écris actuellement une méthode qui, afin de réduire les coûts de transaction, insère des entités dans Azure Table Services en lots de 100.Gestion des conflits avec les opérations de groupe d'entités dans Azure

Les entités insérées sont immuables. C'est à dire. si PartitionKey et RowKey sont identiques entre deux entités-objet, cela signifie que toutes les autres propriétés sont identiques. Par conséquent, je n'aurai jamais besoin de faire des mises à jour à cette table, car après l'insertion, l'entité restera la même. Le problème auquel je suis confronté est que dans ce lot, je ne peux pas être sûr à 100% qu'aucune entité n'a été insérée auparavant. Par conséquent, si j'insère simplement les entités normalement (via AddObject et SaveChanges), la transaction peut échouer avec l'erreur que l'entité ne peut pas être ajoutée, car elle existe déjà. Puisque la transaction est atomique, cela signifie qu'aucun des entités n'est ajouté.

Je ne peux pas vérifier l'existence de chaque entité dans la transaction, car cela serait trop coûteux (une requête par entité coûte trop cher et une seule requête utilisant OU entraîne une analyse de table dans toute la table). J'ai donc besoin d'un moyen d'ajouter un objet s'il n'existe pas et de l'ignorer ou de le mettre à jour, s'il existe (ignorer ou mettre à jour serait le même pour moi puisque les entités sont immuables).

Comment puis-je obtenir cela dans Azure Table Services?

Répondre

2

Selon this article, il n'existe actuellement aucun moyen de "remonter" une entité si elle existe déjà. La recommandation actuelle consiste à traiter la demande en utilisant plusieurs rôles de travail et plusieurs threads en vérifiant l'existence de chaque entité.

+0

Depuis la mi-septembre 2011, comme indiqué dans la conférence Microsoft Build, l'opération Upsert est implémentée dans Azure. –

Questions connexes