Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Firestore suddenly has a huge trigger delay

We are running an application on Firestore and got a simple trigger that when order's details are created or updated some of it's information should be rewritten in the parent order collection.

The function for this got following code

export const updateOrderDetails = functions
  .region(FUNCTION_REGION)
  .firestore.document("orders/{orderId}/details/pickupAndDropoff")
  .onWrite(async (change, context) => {
    return await admin
      .firestore()
      .collection("orders")
      .doc(context.params.orderId)
      .set({ pickupAndDropoff: change.after.data() }, { merge: true });
  });

It was work fine before, but now at random about every third of its executions is delayed. Sometimes by few minutes. In Cloud Function logs we see normal execution times <200ms, so it seems the trigger runs after a huge pause.

What's worse from time to time our change.after.data() is undefined, but we never delete anything - it's just updates and creates.

It was working fine, we did not changed nothing since last week, but now it started to have this unexpected delays. We've also checked the firebase status, but there are no malfunctions in firebase functions service. What can be the cause of this?

like image 286
Łukasz W. Avatar asked Aug 19 '21 15:08

Łukasz W.


People also ask

Why is firestore query slow?

Probably the most common explanation for a seemingly slow query is that your query is, in fact, running very fast. But after the query is complete, we still need to transfer all of that data to your device, and that's the part that's running slowly.

How can I speed up my firestore?

To speed up your build times, you can use invertase/firestore-ios-sdk-frameworks, which contains precompiled Firestore iOS SDKs extracted from the Firebase iOS SDK release downloads.

Is firestore real time?

Firebase offers two cloud-based, client-accessible database solutions that support realtime data syncing: Cloud Firestore is Firebase's newest database for mobile app development. It builds on the successes of the Realtime Database with a new, more intuitive data model.

Are firestore queries case sensitive?

Yes, queries are still case sensitive.


1 Answers

The problem can be due to the monotonically increasing orderId as the parameter passed here:

...
.collection("orders")
  .doc(context.params.orderId)
...

If you can check once if the orderId passed here is monotonically increasing with each request? It can lead to hotspots which impacts latency.

To explain, I think the write rate must be changing at different day's and time's - as the user traffic using the application or load testing requests changes - which is creating the unexpected kind of behaviour. At low write rate, the requests are working as expected most of the time. At high write rate, the requests are facing hotspot situation in the firestore as mentioned in the firestore documentation resulting in delays (latency issue).

Here is the relevant link to firestore best practices documentation.

like image 171
bluelights Avatar answered Oct 17 '22 21:10

bluelights