[PYTHON] Utiliser Cloud Datastore depuis Compute Engine

Chose que tu veux faire

J'ai recherché et discuté de diverses choses lorsque je souhaite accéder au magasin de données à partir de Compute Engine, je vais donc en garder une trace.

Les choix

Pour le moment, il existe à peu près deux options:

  1. Accès avec App Engine entre les deux
  1. Accédez directement à API Cloud Datastore

Il existe une API Cloud Datastore, mais pourquoi ne pas mettre App Engine entre les deux? Cela semble être pensé. Cependant, en raison de circonstances telles que l 'API Cloud Datastore n'étant pas assez bonne et l'accès rapide d'App Engine au magasin de données, App Engine était entre les deux. Il valait mieux le pincer ou quelque chose comme ça.

Mais c'est aussi une vieille histoire. Je ne sais pas ce qui se passe maintenant! J'ai donc essayé diverses choses.

Essayons!

J'ai essayé de comparer par un simple processus de récupération d'une entité en spécifiant la clé. Comme nous ne l'avons pas mesuré avec précision, pensez que chaque valeur peut différer d'environ 20 à 30 ms.

Lorsque je l'ai essayé à partir de mon Macbook Pro comme point de départ, les résultats étaient les suivants.

Cloud Datastore API Via App Engine Via App Engine(Avec memcache)
Local Environ 1000 ms Environ 200 ms Environ 170 ms

À ce stade, j'étais complètement désespéré que l'API Cloud Datastore ne soit plus bonne, mais mon responsable de la société à côté de moi a dit: "N'abandonnez pas!", Alors je suis allé aux États-Unis [^ 1] pour Compute. J'ai construit une instance de Engine et j'ai fait de mon mieux. Le résultat est là.

[^ 1]: Datastore vit aux États-Unis et dans l'UE, alors créons une instance à proximité

Cloud Datastore API Via App Engine Via App Engine(Avec memcache)
GCE (US) 50~Environ 200 ms 45~Environ 50 ms 15~Environ 20 ms

C'est un peu bâclé car le temps est court et cela devient difficile à mesurer, mais je pense que la vitesse de l'API Cloud Datastore est devenue en quelque sorte acceptable.

Cependant, la vitesse de l'API Cloud Datastore n'est pas stable, et lorsqu'elle est rapide, elle est aussi rapide que via App Engine, mais lorsqu'elle est lente, cela peut prendre environ 200 ms, donc je ne comprends pas la raison. C'était. De plus, lorsque vous utilisez Memcache via App Engine, il est rapide car cela permet d'économiser presque tout le temps (environ 30 ms) pour accéder à Datastore depuis App Engine.

Avantages et inconvénients de chacun

Avec App Engine entre les deux

mérite

Si vous avez beaucoup de requêtes pouvant être mises en cache, Memcache peut faire beaucoup de travail. Il a fallu environ 30 ms pour obtenir les données depuis App Engine, mais il n'a fallu que 2 ms pour les extraire du cache. Il est également avantageux qu'il n'y ait pas de frais d'opération de lecture.

Démérite

Si vous souhaitez traiter beaucoup de données en parallèle dans le traitement par lots, cela vous coûtera un peu car vous développerez une instance d'App Engine.

Accédez directement à l'API Cloud Datastore

mérite

C'est facile à mettre en œuvre et, bien sûr, il n'y a pas de frais pour une instance App Engine. L'accès à partir de Compute Engine peut être aussi rapide que de passer par App Engine.

Démérite

Il n'y a pas de Memcache. gcloud-py Documentation n'a rien à voir comme le début de l'univers [^ 2].

[^ 2]: Si vous regardez de près, la plupart des éléments sont des liens vers le code source.

Conclusion personnelle

Si vous pensez simplement à la vitesse, il est un peu plus rapide de passer par App Engine pour le moment, mais dans certaines situations, il semble que l'accès à l'API Cloud Datastore directement depuis Compute Engine soit également une option. ..

Si Memcache ne fonctionne pas, comme la saisie de données dans le traitement par lots, il semble plus facile à mettre en œuvre et moins coûteux d'accéder directement à Cloud Datastore.

prime

L'installation de gcloud-python est essentiellement

pip install gcloud

C'est bien, mais il semble qu'il y en ait un plus récent dans la branche master de GitHub.

En regardant le code dans la branche principale, s'il existe un gRPC comme celui-ci, utilisez-le Une nouvelle description comme celle-ci a été ajoutée [^ 3].

[^ 3]: Depuis le 28/08/2016, cette fonctionnalité n'était pas implémentée dans la v0.18.1, qui est fournie avec pip.

スクリーンショット 2016-08-28 17.45.22.png スクリーンショット 2016-08-28 17.53.15.png

alors

pip install git+https://github.com/GoogleCloudPlatform/gcloud-python

J'ai également essayé gcloud-python, qui a été installé directement à partir de la branche principale de GitHub, et j'ai trouvé que c'était jusqu'à 20 ms plus rapide, et que c'était une assez bonne correspondance avec via App Engine.

J'ai senti que la vitesse n'était pas très stable comme d'habitude, mais je sens que je fais de gros efforts pour améliorer les performances, donc j'ai hâte d'y être.

Recommended Posts

Utiliser Cloud Datastore depuis Compute Engine
Accéder à Cloud Storage à partir d'une instance Compute Engine
Exécutez Cloud Dataflow (Python) depuis AppEngine
Utiliser l'API Google Cloud Vision de Python
Firebase: utilisez Cloud Firestore et Cloud Storage depuis Python
Utilisez Thingsspeak de Python
Utiliser fluentd de python
Utiliser MySQL depuis Python
Utilisez BigQuery depuis Python.
Utilisez mecab-ipadic-neologd de Python
Utiliser MySQL depuis Anaconda (python)
Utiliser le modèle django de l'interpréteur
Utilisez l'API e-Stat de Python
Jouez avec le cadre gratuit GCP ② ~ Airflow (sur Compute Engine), Cloud Functions ~