Чрезвычайно длительный запрос - PullRequest
0 голосов
/ 04 мая 2020

Проблема

Здравствуйте, у меня проблема с выполнением запроса выборки в облачной функции Google в форме:

const query = await this.db.collection("myCollection")
  .where("myId", "==", id)
  .limit(1)
  .get()

Вот более полный фрагмент кода ( в соответствии с просьбой):

async function handleWebhook(sid: string, unixSeconds: number){
  const tBeforeFetch = performance.now()
  const query = await this.db.collection("myCollection")
    .where("myId", "==", sid)
    .limit(1)
    .get()
  const tAfterFetch = performance.now()
  console.debug(`Time to fetch event from store: ${(tAfterFetch - tBeforeFetch)}ms`)

  if(query.empty || query.docs.length <= 0) {
    return;
  }
  const dbResultDoc = query.docs[0];

  const dbResult = dbResultDoc.data()
  // update status
  dbResult['status'] = 'ACTIVE'

  const dataRef = this.db.collection("myCollection").doc(dbResultDoc.id)
  const metaRef = dataRef.collection("myMetaCollection").doc("STATIC_KEY")
  try {
    await this.db.runTransaction(async trz => {
      const metaDoc = await trz.get(metaRef)
      const prevMetaUnixSeconds = metaDoc.exists ? metaDoc['unixSeconds'] : 0
      if (unixSeconds < prevMetaUnixSeconds) {
        console.warn(`Hook called us late`)
        return
      }

      // update ts
      metaDoc['unixSeconds'] = unixSeconds

      await trz
        .set(dataRef, dbResult)
        .set(metaRef, metaDoc)
    })
  } catch(e) {
    console.warn(`transcation has failed: `, e)
  }
}

Часто этот запрос занимает около 90 секунд, и у меня нет веских причин, почему.

Что я пробовал

Отключение индексирования больших чисел

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

Просмотр размера данных

Данные, которые я возвращаю, невелики по размеру. Всего несколько кб. Так что это не должно быть проблемой. Кроме того, я возвращаю только одну запись (идентификаторы уникальны).


На данный момент я весьма озадачен. Я рассматриваю вопрос об изменении хранилищ данных без каких-либо проблем. Есть указатели?

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