2 votes

Firebase Streaming en utilisant Python, la connexion expire lorsque qu'il y a une grande quantité de données sous l'enfant.

Je suis en train de lire des données depuis Firebase, sous un chemin qui contient une énorme quantité de données, en utilisant cette bibliothèque firebase-python-streaming. Cependant, à chaque fois que je lance le streaming, il reste bloqué sur l'appel et rien n'est retourné, ce qui entraîne éventuellement un délai d'attente. Cependant, si j'essaie sur un chemin plus court, cela fonctionne, le premier appel renvoie toutes les données à l'intérieur de l'enfant, suivi des modifications éventuelles apportées à la base de données.

def p(x):
print x

# Objet Firebase
fb = Firebase('https://myfirebase.firebaseio.com/')
custom_callback = fb.child("views").listener(p)

# Démarrer et arrêter le flux en utilisant les commandes suivantes
custom_callback.start()
raw_input("ENTRER pour arrêter...")
custom_callback.stop()enter code here

En exécutant le flux, l'invite de commande reste bloquée ici en cas de données volumineuses

ENTRER pour arrêter...

Elle reste bloquée là et finit par expirer. J'ai également utilisé d'autres bibliothèques telles que pyrebase et pyfirebase avec le même résultat. Je pense que cela a à voir avec la grande quantité de données que j'essaie de diffuser lors de la première itération. Y a-t-il un hack ou une solution pour corriger cela ?

0voto

Frank van Puffelen Points 16029

Si vous rencontrez des problèmes en raison de la quantité importante de données que vous essayez de récupérer, la solution sera de récupérer moins de données.

Une manière de le faire serait d'écouter un point plus bas dans votre arborescence de base de données. Par exemple :

custom_callback = fb.child("views/201609").listener(p)

Cela nécessite que vous modifiez la structure de vos données. Vous constaterez que c'est un thème récurrent lors de l'utilisation des bases de données NoSQL : vous devez modéliser vos données pour la manière dont votre application souhaite les consommer.

Alternativement, vous pouvez demander seulement les éléments les plus récents de votre base de données. Je ne suis pas exactement sûr de comment votre bibliothèque Python gère cela, mais sur l'API REST cela ressemblerait à quelque chose comme :

https://myfirebase.firebaseio.com/views.json?orderBy=$key&limitToLast=100

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X