Низкая производительность при получении документа, который не существует - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть функция firebase, которая берет маркер аутентификации firebase и создает документ для хранения пользовательских настроек, если в моей коллекции firestore такого документа нет для данного пользователя.

Функция работает без проблем, но я заметил, что для ее завершения требуется около десяти секунд.

Используя ведение стека и некоторые записи журнала, я смог сузить его до одной строки, которую я считаю виновной:

const userDoc = await admin.firestore().doc('users/' + uid).get();

Для контекста у меня есть фильтр, который декодируеттокен аутентификации и сохраняет его в переменной запроса.Сама конечная точка запроса выглядит примерно так:

app.post('/register', (async (req, res) => {
  console.log('New request to register user.');
  const uid = req['user'].uid;
  const userDoc = await admin.firestore().doc('users/' + uid).get();
  if (!userDoc.exists) {
    console.log('User does not exist. Creating.');
    // Do stuff here
  }
}));

Вывод журнала, который я получаю на стекдрайвере, выглядит следующим образом:

Stackdriver Log

Как видите, между первым и вторым оператором журнала задержка составляет примерно 8 секунд.Единственная заметная вещь, которую я вижу здесь, это запрос документа.У меня есть несколько других звонков в firestore после этого, они не показывают такого рода задержки.

У меня есть две теории об этом поведении:

  • Так как этоПервый запрос к firestore, который я делаю в этом запросе (фильтры включены), возможно, потребуется сначала инициализировать firestore.Лично я нахожу это маловероятным, видя, как эффективный пожарный магазин повсюду.

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

Я, конечно, мог бы бытьсовершенно неправильно или я что-то забыл.Буду благодарен за любые подсказки по этому поводу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...