Mtego wa Firestore JOIN
Unakabiliwa na tatizo la kawaida la Firestore. Kazi yako ya Firebase inatoa kosa la ukubwa wa juu wa batch (maximum batch size error). Unahitaji kuunganisha (join) oda na wateja kwa ajili ya dashboard. Kwa kawaida unanakili data ili kutatua hili. Lakini sasa data yako imepitwa na wakati na haijatengenezwa kwa usawa (inconsistent).
Google ilitangaza Pipelines API ili kutatua hili. Inaruhusu operesheni za JOIN kwenye collections mbalimbali bila kunakili data. Baadhi ya watengenezaji wanaripoti muda wa haraka wa kuuliza (query times) katika majaribio madogo.
Nilitumia wiki moja nikijaribu API hii chini ya mzigo mkubwa. Hapa kuna kile ambacho documentation haikukuambia.
Gharama Kubwa Kila utekelezaji wa pipeline unasoma kutoka kwenye collections zote zinazohusika. JOIN kati ya collections mbili inakutoza gharama za kusoma (reads) kwenye zote mbili. Ukifanya JOIN kwenye collections mbili zenye documents 50,000, gharama zako zitapanda kwa kasi isiyo na mpangilio mzuri. Sio gharama rahisi ya mstari (linear cost).
Mipaka ya Utendaji Katika majaribio yangu, pipeline dhidi ya documents 10,000 ilichukua 380ms. Nilipojaribu documents 100,000, query ilikatika (timed out) baada ya sekunde 30. Haufanyi marekebisho ya tatizo. Unageuza tu kosa la batch kuwa kosa la muda kuisha (timeout error).
Matatizo ya Cold Start Pipelines hutengeneza mazingira ya utekelezaji (execution context) tofauti. Katika mazingira ya serverless kama Cloud Functions, hii inaongeza ucheleweshaji wa sekunde 2 hadi 4. Watumiaji wako watafikiri programu yako ni nzito.
Pipelines API ni zana ya kutengeneza mifano (prototyping) au collections ndogo zenye documents chini ya 5,000. Si mbadala wa relational database. Google inatoa hii ili kukusaidia kubaki kwenye mfumo wa Firebase badala ya kuhamia PostgreSQL au Spanner.
Ukitumia Pipelines, fuata sheria hizi:
• Kagua ukubwa wa collection yako. Ikiwa collection inazidi documents 20,000, tafuta gharama ya JOIN kwanza. • Weka mipaka ya utata. JOIN kwenye collections tatu au zaidi ni ishara mbaya. • Fuatilia gharama za kusoma kila wiki. Kusoma kwa Pipeline kunaonekana tofauti kwenye bili yako. • Baki na data yako ya denormalized. Tumia Pipelines kama nyongeza, si mbadala kamili. • Jaribu kwa trafiki halisi. Benchmarks kwenye collections tulivu haviakisi hali halisi ya production.
Usitumie dawa ya muda (band-aid) ili kuepuka uamuzi halisi wa usanifu (architectural decision).
Unashughulikiaje uhusiano (relationships) katika Firestore? Je, unatumia denormalization au client-side joins? Niambie kwenye maoni.
