J'utilise le chargeur en bloc App Engine (Python Runtime) pour charger en bloc des entités dans le magasin de données. Les données que je télécharge sont stockées dans un format propriétaire, donc j'ai implémenté par le propre connecteur (enregistré dans bulkload_config.py
) pour le convertir en dictionnaire python intermédiaire.Performances du chargeur en bloc App Engine
import google.appengine.ext.bulkload import connector_interface
class MyCustomConnector(connector_interface.ConnectorInterface):
....
#Overridden method
def generate_import_record(self, filename, bulkload_state=None):
....
yeild my_custom_dict
Pour convertir ce dictionnaire neutre python à une entité datastore, j'utilise une fonction de poste personnalisé d'importation que je l'ai défini dans mon YAML.
def feature_post_import(input_dict, entity_instance, bulkload_state):
....
return [all_entities_to_put]
Note: Je n'utilise pas entity_instance, bulkload_state
dans ma fonction feature_post_import
. Je ne fais que créer de nouvelles entités de magasin de données (basées sur mon input_dict
), et les retourner.
Maintenant, tout fonctionne très bien. Cependant, le processus de chargement en masse des données semble prendre trop de temps. Par exemple un Go (~ 1,000,000 entités) de données prend ~ 20 heures. Comment puis-je améliorer les performances du processus de chargement en masse? Est-ce que je manque quelque chose?
Certains des paramètres que j'utilise avec appcfg.py sont (10 threads avec une taille de lot de 10 entités par thread).
associé un poste de groupe Python App Engine Google: http://groups.google.com/group/google-appengine-python/browse_thread/thread/4c8def071a86c840
Mise à jour: Pour tester les performances du processus de chargement en vrac, je chargé entities
d'un 'test' Kind
. Même si ce entity
a un FloatProperty
très simple, il m'a fallu le même laps de temps pour charger en vrac ceux entities
.
Je vais encore essayer de faire varier les paramètres du chargeur en vrac, rps_limit
, bandwidth_limit
et http_limit
, pour voir si je peux obtenir plus de débit.
S'il y a quelque chose de déroutant à propos de la question, ou quelque chose que j'ai besoin d'ajouter, alors faites le moi savoir. – Rahul