From b989400f4cb45990b2fa66b99cd24f11f5888e6a Mon Sep 17 00:00:00 2001 From: Denver Coneybeare Date: Mon, 8 Jan 2024 15:38:37 -0500 Subject: [PATCH 1/2] Firestore: query_engine.ts: choose DEFAULT_RELATIVE_INDEX_READ_COST_PER_DOCUMENT based on the browser, rather than hardcoding 8 --- packages/firestore/src/local/query_engine.ts | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/packages/firestore/src/local/query_engine.ts b/packages/firestore/src/local/query_engine.ts index 60fb056d1c3..b3706975b96 100644 --- a/packages/firestore/src/local/query_engine.ts +++ b/packages/firestore/src/local/query_engine.ts @@ -15,6 +15,8 @@ * limitations under the License. */ +import { getUA, isSafari } from '@firebase/util'; + import { LimitType, newQueryComparator, @@ -47,6 +49,7 @@ import { LocalDocumentsView } from './local_documents_view'; import { PersistencePromise } from './persistence_promise'; import { PersistenceTransaction } from './persistence_transaction'; import { QueryContext } from './query_context'; +import { SimpleDb } from './simple_db'; const DEFAULT_INDEX_AUTO_CREATION_MIN_COLLECTION_SIZE = 100; @@ -55,10 +58,19 @@ const DEFAULT_INDEX_AUTO_CREATION_MIN_COLLECTION_SIZE = 100; * (([index, docKey] + [docKey, docContent]) per document in the result set) * / ([docKey, docContent] per documents in full collection scan) coming from * experiment [enter PR experiment URL here]. - * TODO(b/299284287) Choose a value appropriate for the browser/OS combination, - * as determined by more data points from running the experiment. */ -const DEFAULT_RELATIVE_INDEX_READ_COST_PER_DOCUMENT = 8; +function getDefaultRelativeIndexReadCostPerDocument(): number { + // These values were derived from an experiment where several members of the + // Firestore SDK team ran a performance test in various environments. + // Googlers can see b/299284287 for details. + if (isSafari()) { + return 8; + } else if (SimpleDb.getAndroidVersion(getUA()) > 0) { + return 6; + } else { + return 4; + } +} /** * The Firestore query engine. @@ -113,7 +125,7 @@ export class QueryEngine { DEFAULT_INDEX_AUTO_CREATION_MIN_COLLECTION_SIZE; relativeIndexReadCostPerDocument = - DEFAULT_RELATIVE_INDEX_READ_COST_PER_DOCUMENT; + getDefaultRelativeIndexReadCostPerDocument(); /** Sets the document view to query against. */ initialize( From b5424e30d12f51456be8fa39bc05064b42e7ed43 Mon Sep 17 00:00:00 2001 From: Denver Coneybeare Date: Mon, 8 Jan 2024 15:44:01 -0500 Subject: [PATCH 2/2] yarn changeset --- .changeset/witty-comics-rule.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/witty-comics-rule.md diff --git a/.changeset/witty-comics-rule.md b/.changeset/witty-comics-rule.md new file mode 100644 index 00000000000..0b6b1bc3175 --- /dev/null +++ b/.changeset/witty-comics-rule.md @@ -0,0 +1,6 @@ +--- +'firebase': patch +'@firebase/firestore': patch +--- + +Tweak the automatic index creation parameters to use more optimal values for the platform/browser detected at runtime.