Comment accéder à la banque de données de l'extérieur

J'accède au magasin de données dans un environnement GAE / py, mais parfois je veux y accéder à partir d'un environnement GCE ou local.

Je pense qu'il y a deux manières.

Il semble y avoir une autre approche. ..

Tel.

Utiliser l'API distante

Accessing App Engine with Remote API Une fonctionnalité standard est l'API à distance. Mettre python sdk dans gcloud sdk? Et je pense que le chemin est dans remote_api_shell.py. Plus loin sur l'app.yaml de GAE

app.yaml


application: PROJECT_ID
version: 1
runtime: python27
api_version: 1

##Ajouter ici
builtins:
- remote_api: on

Activez remote_api pour les fonctions intégrées comme dans.

Lorsque le déploiement est terminé dans cet état,

$ remote_api_shell.py PROJECT_ID

En faisant cela, vous serez en mesure de toucher directement la banque de données distante, etc. à partir de l'environnement python local. Si vous pouvez importer google.appengine.ext.ndb dans votre environnement local, vous pouvez également importer le modèle ndb et y accéder de la même manière que sur AppEngine, ce qui est pratique.

from google.appengine.ext import ndb

class MyModel(ndb.Model):
    number = ndb.IntegerProperty(default=42)
    text = ndb.StringProperty()

#Vous pouvez obtenir des données à distance comme vous le feriez sur GAE.
models = MyModel.query().fetch()

Cependant, notez que c'est assez lent. En regardant le journal GAE pour découvrir la cause, スクリーンショット 2016-08-09 17.57.32.png

Il y a une requête http à / _ah / remote_api. Probablement parce qu'il y a beaucoup de requêtes http pour chaque requête, la surcharge devient importante et le traitement est lourd.

Utilisez l'API Cloud Datastore.

L'API Google Cloud Datastore publiée cette année est susceptible de résoudre les problèmes de performances. La nouvelle version bêta de l'API Google Cloud Datastore améliore considérablement les performances

Il est facile de comprendre si vous le faites en lisant cet article. Getting started with the Google Cloud Datastore API

Dans les situations où la commande gcloud est activée

$ pip install gcloud

Ensuite, vous pouvez installer gcloud-python.

Si gcloud auth est activé, vous pouvez importer et utiliser des bibliothèques liées à la banque de données à partir de scripts et de consoles Python.

from gcloud import datastore

client = datastore.Client(PROJECT_ID)
#Ensuite, vous pouvez obtenir un itérateur avec une requête.
task = cli.query(kind='Task').fetch()

Consultez le tutoriel et la page github ci-dessous pour savoir comment l'utiliser. gcloud-python

Tout d'abord, les performances sont meilleures que celles de l'API distante. De plus, il semble que l'itérateur communique et récupère également chaque fois que le curseur arrive avec une récupération retardée, probablement parce que la session est toujours collée dans le magasin de données. Par conséquent, lorsque vous essayez d'obtenir beaucoup d'informations comme l'API distante, il est moins susceptible de rester bloqué.

point important

Veuillez noter que la version est toujours en version bêta, les spécifications peuvent donc changer. De plus, l'environnement doit être certifié par gcloud. De plus, comme il n'y a pas d'ORMapper comme ndb, c'est un peu difficile à éditer et cela peut affecter le code GAE.

Cependant, il est pratique d'accéder à partir de l'environnement GCE, vous devez donc absolument utiliser cette API à partir de maintenant. Dans la version officielle, ndb etc. peut être disponible.

Bibliothèque de wrapper d'API RPC Google Cloud Datastore

La bibliothèque d'encapsulation python pour l'API RPC Datastore est officiellement disponible. GoogleCloudPlatform/google-cloud-datastore :googledatastore

Pour le moment, il semble que la maintenance ait été détaillée suite à la mise à jour de l'API RPC.

Cependant, il semble que je ne peux pas le recommander beaucoup car il nécessite des informations d'identification authentifiées et l'interface est un peu ancienne.

Task Queue

Si vous utilisez correctement Push Queue, etc., vous pouvez réécrire les informations de Datastore avec un déclencheur externe. Cependant, je n'ai pas l'impression de pouvoir y accéder car j'ai préparé des tâches à l'avance et il y a une limite de temps pour les tâches.

Recommended Posts

Comment accéder à la banque de données de l'extérieur
Comment faire fonctionner Linux depuis l'extérieur Procédure
Comment accéder à wikipedia depuis python
Comment accéder à RDS depuis Lambda (python)
Comment faire fonctionner Linux depuis la console
Comment mesurer la vitesse de la ligne depuis le terminal
[Python] Comment supprimer les valeurs en double de la liste
Comment créer un article à partir de la ligne de commande
Comment "mettre en cache" l'accès à la mémoire FPGA à partir de Linux
Comment utiliser le générateur
Comment lancer instantanément Jupyter Notebook à partir du terminal
Comment accéder à la variable globale du module importé
Comment publier un ticket depuis l'API Shogun
Comment utiliser le décorateur
Comment augmenter l'axe
Comment démarrer la première projection
Comment calculer la quantité de calcul appris de ABC134-D
Comment se connecter automatiquement comme 1Password depuis CLI
Comment effectuer les réglages initiaux à partir de la création de projet Django
Comment exécuter automatiquement la fonction d'exportation de GCP Datastore
Comment accéder à NAPALM depuis le Web (solution réelle NetDevOpsSec)
Comment calculer le coefficient d'autocorrélation
Comment utiliser la fonction zip
Comment utiliser le module optparse
Comment utiliser SWIG de WAF
Comment lire l'ensemble de données SNLI
Comment obtenir la version Python
Comment écraser la sortie sur la console
Comment convertir .mgz en .nii.gz
Comment utiliser le module ConfigParser
Comment obtenir des abonnés et des abonnés de Python à l'aide de l'API Mastodon
[EC2] Comment installer et télécharger chromedriver à partir de la ligne de commande
Comment extraire la chaîne de caractères souhaitée à partir d'une ligne 4 commandes
Comment résoudre l'erreur survenue dans toimage (à partir de PIL.Image import fromarray as toimage)
Comment afficher la barre de progression (tqdm)
Comment utiliser le pipeline Spark ML
Comment convertir facilement le format de Markdown
Comment vérifier la version de Django
Comment résoudre le problème d'emballage du bac
Comment mettre à jour Google Sheets à partir de Python
Comment régler l'heure du serveur sur l'heure japonaise
Comment mettre à jour manuellement le cache AMP
Comment utiliser le multicœur du point de vue de plusieurs langues
[Linux] Comment utiliser la commande echo
3 façons d'accéder à l'espace de noms __main__
Comment obtenir une sortie colorée sur la console
Accédez à Google Agenda depuis l'application iOS
Comment créer un référentiel à partir d'un média
Comment utiliser le débogueur IPython (ipdb)
De l'introduction de l'API GoogleCloudPlatform Natural Language à son utilisation
Comment vérifier le GAE local à partir du navigateur iPhone dans le même LAN
Fiche d'apprentissage (4e jour) #Comment obtenir le chemin absolu à partir du chemin relatif
Paramètres qui permettent d'accéder à IPython Notebook depuis l'extérieur du local
Comment créer une application à partir du cloud à l'aide du framework Web Django
[Django] Comment passer des valeurs directement des balises de modèle aux variables JavaScript
Comment calculer la volatilité d'une marque
Comment utiliser la bibliothèque C en Python
Comment trouver la zone du diagramme de Boronoi
Comment utiliser MkDocs pour la première fois