#firebase #google-app-engine #google-cloud-firestore #gcloud
#firebase #google-app-engine #google-облако-firestore #gcloud
Вопрос:
Я хотел бы загрузить коллекцию, которая составляет ~ 30 тыс. записей. Т.е. загрузить ее через.
const db = admin.firestore();
let documentsArray: Array<{}> = [];
db.collection(collection)
.get()
.then(snap => {
snap.forEach(doc => {
documentsArray.push(doc);
});
})
.catch(err => console.log(err));
Это всегда будет выдавать Deadline Exceeded
ошибку. Я искал какой-нибудь механизм, который позволит мне разбивать его на страницы, но я нахожу невероятным, что не могу запросить не такую большую сумму за один раз.
Я думал, что, возможно, из-за моей довольно медленной машины я достиг предела, но затем я развернул приложение simple Express, которое выполняло бы выборку в app engine, и все еще не повезло.
В качестве альтернативы я мог бы также экспортировать коллекцию с помощью gcloud beta firestore export
, но она не предоставляет данные JSON.
Комментарии:
1. Почему вы находите это невероятным? Это ожидается в GAE: cloud.google.com/appengine/articles/deadlineexceedederrors . В какой среде?
2. Исправлено, но ~ 30 тыс. повторных записей, каждая из которых составляет примерно несколько кб, не должны быть проблемой. С другой стороны, на гораздо более мощной машине с 64 ГБ оперативной памяти он все еще зависает.
3. У меня возникла эта проблема с моим приложением localhost node при чтении только одного документа.
Ответ №1:
Я не уверен насчет firestore, но в datastore мне никогда не удавалось получить столько данных за один раз, мне всегда приходилось извлекать страницы примерно из 1000 записей за раз и накапливать их в памяти перед обработкой. Вы сказали:
Я искал какой-нибудь механизм, который позволит мне разбивать страницы на корыта
Возможно, вы пропустили эту страницу
https://cloud.google.com/firestore/docs/query-data/query-cursors
Комментарии:
1. Я смог получить 30 тысяч записей, но на гораздо более мощной машине. Если вы получите ответ менее чем за 60 секунд, все в порядке.
Ответ №2:
В итоге проблема заключалась в том, что машина, которая обрабатывала 30 тысяч записей из Firestore, была недостаточно мощной, чтобы своевременно получать необходимые данные. Решаемая с помощью, GCE с n1-standard-4
GCE.