0

Dans l'API Google Cloud Datastore, les entités sont immuables. J'apprécie la valeur de l'immuabilité, mais cela signifie que chaque fois que je mets une propriété, je dois à nouveau construire - c'est-à-dire, copier - toute l'Entité, ce qui est très inefficace. Il fait le simple fait de définir N valeurs de propriété dans O (N^2). L'alternative consiste à enregistrer les valeurs de propriétés dans ma propre structure de données d'entité, puis à copier ce droit dans l'entité de l'API avant l'enregistrement, et de nouveau à partir de l'entité de l'API juste après l'interrogation ou l'obtention. Ou alors, je pourrais utiliser le Builder pour stocker l'état mutable et ne construire une entité que juste avant de l'enregistrer; quand je get ou interroger une entité, je prendrais le constructeur de cette entité.Comment faire muter des entités dans l'API Google Cloud Datastore?

Suis-je en train de mal comprendre quelque chose? Y a-t-il un moyen de le faire efficacement?

(J'utilise Java.)

Répondre

1

Le API offre les méthodes ci-dessous pour copier une entité/FullEntity -

Entity.newBuilder (Entité copyfrom) FullEntity.newBuilder (FullEntity copyfrom)

Utilisez ce qui précède pour apporter des modifications à une entité existante. Après avoir appelé l'une des méthodes ci-dessus, vous pouvez définir/mettre à jour une ou plusieurs propriétés, puis créer l'entité et la conserver.

Généralement, les applications Java, comme vous l'avez dit, ont des classes de modèle (par exemple, client, utilisateur). Vous travaillez sur ces objets pour modifier l'état et copier l'état de l'objet sur les objets API de persistance (Entity/FullEntity) et enregistrer. Le contraire est fait lors de la lecture des données.

Vous pouvez également consulter Catatumbo, un framework de persistance JPA facile à utiliser qui prend en charge toute la plomberie nécessaire pour lire/écrire les données.

Divulgation: Je suis l'auteur de Catatumbo.

+0

Mais cette approche signifie que chaque fois que je mets une propriété, je dois construire - c'est-à-dire copier - toute la classe du modèle, ce qui est très inefficace. Idéalement, toutes ces opérations set-property se déroulent en même temps, comme vous le suggérez, mais je transfère malheureusement du code qui utilise l'API Google AppEngine qui a des Entités mutables, et ainsi le code appelle la méthode set-property plusieurs fois. –

+1

Vous devrez déterminer les différences entre les API pendant cette migration. Il est probablement préférable de créer vos classes de modèle de données, de modifier l'état autant de fois que nécessaire et d'utiliser le cadre mentionné ci-dessus pour finalement persister dans le magasin de données. –

+0

Merci. C'est dommage que Google ait introduit cette limitation; Je vais devoir travailler autour de ça. –