Как я могу загрузить большую коллекцию в Firestore с Python без ошибки 503? - PullRequest
0 голосов
/ 06 мая 2019

Попытка подсчитать количество документов в коллекции Firestore с помощью Python.Когда я использую db.collection('xxxx").stream(), я получаю следующую ошибку:

 503 The datastore operation timed out, or the data was temporarily unavailable.

примерно на полпути.Работало нормально.Вот код:

    docs = db.collection(u'theDatabase').stream()
    count = 0
    for doc in docs:
        count += 1
    print (count)

Каждый раз, когда я получаю ошибку 503 при примерно 73 000 записей.Кто-нибудь знает, как преодолеть 20-секундный таймаут?

1 Ответ

0 голосов
/ 07 мая 2019

Попробуйте использовать рекурсивную функцию для пакетного извлечения документов и удержания их в тайм-ауте. Вот пример, основанный на фрагменте delete_collections :

from google.cloud import firestore

# Project ID is determined by the GCLOUD_PROJECT environment variable
db = firestore.Client()


def count_collection(coll_ref, count, cursor=None):

    if cursor is not None:
        docs = [snapshot.reference for snapshot
                in coll_ref.limit(1000).order_by("__name__").start_after(cursor).stream()]
    else:
        docs = [snapshot.reference for snapshot
                in coll_ref.limit(1000).order_by("__name__").stream()]

    count = count + len(docs)

    if len(docs) == 1000:
        return count_collection(coll_ref, count, docs[999].get())
    else:
        print(count)


count_collection(db.collection('users'), 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...