3

Si je sauvegarde et restaure avec le magasin de données Google backup utility, les ID numériques sont copiés dans le nouveau magasin de données. La restauration "manuellement" attribue des ID numériques, c'est-à-dire qu'elle n'utilise pas l'attribution automatique. Puis, si je crée de nouvelles entités en utilisant l'allocation automatique d'ID par défaut, il semble que je risque des collisions. Comme indiqué here:Comment puis-je m'assurer que les identifiants uniques d'un projet Datastore proviennent d'une sauvegarde?

[A] dvanced applications peuvent parfois souhaiter attribuer leurs propres identifiants numériques manuellement aux entités qu'ils créent. Sachez cependant que rien n'empêche Datastore d'affecter un de vos ID numériques manuels à une autre entité.

Comment puis-je éviter de telles collisions? Je préfère ne pas utiliser name s, pour maintenir la compatibilité avec mon code existant id.

Répondre

2

Si vous restaurez dans le même projet, il s'agit simplement de réaffecter les ID existants, sans affecter manuellement les nouveaux identifiants. Dans ce cas, vous ne rencontrerez aucun problème avec l'auto-allocation. En tant que remarque connexe, nous effectuons le suivi des ID attribués automatiquement par groupe d'entités. Vous ne pouvez donc pas copier les entités enfants d'un groupe vers un autre.

Cela fonctionne à travers les projets en raison des API internes que nous pouvons appeler.

+1

"Si vous restaurez dans le même projet," Merci. Mais je restaure dans un projet différent. Même si cela n'était pas une exigence en soi, il est essentiel de tester le cycle de sauvegarde-restauration. Mais à partir de "Cela fonctionne à travers les projets", je comprends que l'auto-attribution ultérieure d'ID, même sur ce projet différent, n'aura aucune collection. –

0

La réponse à cette question est la suivante: l'utilitaire de sauvegarde de Google réserve les ID avec allocateIdRange dans l'API Google App Engine. Toutefois, cette fonctionnalité est non disponible via l'API Google Cloud Datastore. Si vous n'attribuez pas id-range, vous risquez de mettre Datastore dans un état incohérent où vous obtenez une exception lorsque vous créez une nouvelle entité avec l'ID alloué automatiquement.