Как массово удалить определенные документы из Firestore в Python - PullRequest
1 голос
/ 24 сентября 2019

Если у меня есть список идентификаторов документов, и я хочу удалить их из хранилища, какой самый эффективный способ сделать это?В настоящее время я использую цикл над списком:

document_ids = ["xyz123", "abc0987", "tvu765", ...] # could be up to 30 IDs

for id in document_ids:
   database.collection("documents").document(id).delete()

Это делается с помощью AJAX-вызова от внешнего интерфейса к маршруту Flask, после того, как это будет сделано, он отправляет ответ, но когда идентификаторы Theres 20+ имеютзавершение процесса может занять несколько секунд.

Можно ли здесь сказать, удалить их из этой коллекции?

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Возможно, вы могли бы использовать multiprocessing для ускорения операций с io-связью.

Использовать многопроцессорную обработку для ускорения

См. YouTube Video

import multiprocessing
import time
from google.cloud import firestore

document_ids = ["xyz123", "abc0987", "tvu765", ...] # could be up to 30 IDs
def delete_doc(doc_id):
    database = firestore.Client() 
    database.collection("documents").document(doc_id).delete()

t_start = time.perf_counter()
processes = list()
for id in document_ids:
    p = multiprocessing.Process(target=delete_doc, args=[id,])
    p.start()
    processes.append(p)

for p in processes:
    p.join()

t_finish = time.perf_counter()

print("Total Elapsed Time: {} s".format(round(t_finish - t_start, 3)))
1 голос
/ 24 сентября 2019

То, что вы делаете сейчас, в значительной степени единственный путь.Не существует SQL-подобной команды «удалить из ... где ...».Вы должны удалить каждый документ, используя его идентификатор.

...