typescript - Hur förbättrar man latensen i denna enkla fråga?


Jag har en samling på ungefär 112 000 städer i Firestore, och jag vill slå upp en stad baserat på countryCode med funktionen nedan.

Om jag tidtar denna funktion, utan några konfigurerade index i Firebase-konsolen, tar den ungefär 1100 ms. Om jag skapar ett index som sorterar på namn och countryCode, tar funktionen ungefär 950 ms.

Jag testar från Europa och servern är i USA.

Är detta förväntat beteende? Vad skulle vara det bästa sättet att förbättra latensen för denna fråga?

Jag skulle kunna sätta upp en annan databasinformation i Europa, men jag tvivlar på att det skulle göra en stor skillnad. En enkel id-uppslagning tar ungefär 200 ms på samma databas, så jag skulle förvänta mig att minst 800 ms av tiden inte har att göra med rundresans latens.

async function getIdForCity(name: string, countryCode: string) {
  console.time("Get city id");
  const snapshot = await db
    .collection("cities")
    .where("name", "==", name)
    .where("countryCode", "==", countryCode)
    .get();

  if (snapshot.size === 0) {
    throw new Error(
      `Unable to find city with name ${name} and countryCode ${countryCode}`
    );
  }

  if (snapshot.size > 1) {
    throw new Error(
      `There are multiple (${
        snapshot.size
      }) cities with name ${name} and countryCode ${countryCode}`
    );
  }
  const cityId = snapshot.docs[0].id;
  console.timeEnd("Get city id");
  console.log(`City id for ${name}, ${countryCode}: ${cityId}`);
  return cityId;
}