Uhamishaji kwenye hifadhi ya vitu

Kitu kimoja cha JSON kwa kila lengo lililofikiwa, katika bucket unayomiliki. Hii ndiyo njia ya kufikia kila ghala ambalo si BigQuery.

1. Pengo linalozibwa

Hadi sasa kulikuwa na njia moja tu kutoka MousePlayer kwenda ghala la data, nayo ilielekea Google. Ukiendesha Snowflake, Redshift au ClickHouse, hakukuwa na njia, ingawa zote tatu husoma kutoka hifadhi ya vitu bila tatizo.

Kwa hiyo daraja huandika kwenye hifadhi ya vitu badala ya kila ghala kwa zamu. Snowflake hupokea kutoka S3, Redshift hupokea kutoka S3, ClickHouse hupokea kutoka S3, na BigQuery hupokea kutoka Google Cloud Storage. Uhamishaji mmoja huzifikia zote.

MahaliJinsi inavyofikiwa
Amazon S3Signature Version 4, bucket katika host
Cloudflare R2Signature Version 4 dhidi ya endpoint ya akaunti yako
Google Cloud Storagekupitia API yake inayolingana na S3, kwa ufunguo wa HMAC
MinIO, Wasabi, Backblaze B2 na nyingineSignature Version 4 dhidi ya endpoint yako
Azure Blob Storagekiungo cha SAS cha kontena; hakuna utiaji saini upande wetu kabisa

2. Kwa nini Azure ni tofauti, na kwa nini hilo ni bora

Azure Blob haitumii Signature Version 4; hutia saini kwa SharedKey. Tungeweza kujenga mfumo wa pili wa utiaji saini. Badala yake daraja hupokea kiungo cha SAS cha kontena — URL unayotengeneza katika akaunti yako mwenyewe ya hifadhi, ikiwa na saini tayari ndani yake.

Huo ni msimbo mchache upande wetu na imani ndogo inayohitajika upande wako. Hatuoni ufunguo wa akaunti kabisa: unachotoa ni ruhusa uliyoiwekea wigo mwenyewe, kwa kontena moja, yenye tarehe ya kuisha uliyochagua, inayoweza kubatilishwa wakati wowote bila kugusa kingine.

Uzuiaji huohuo unafaa kutumika upande wa S3: upe ufunguo wa ufikiaji ruhusa ya kuandika katika kiambishi hiki kimoja cha mwanzo na si kingine. Ufunguo unaoweza kuongeza tu kwenye mouseplayer/goals/ hauwezi kusoma bucket zako nyingine hata ukivuja.

3. Kitu kimoja kwa kila lengo, na ufunguo ni tarehe

Hifadhi ya vitu haina kuongeza mwishoni. Faili la kila siku lingehitaji kuandikwa upya lote kila wakati, na malengo mawili yakifika pamoja yangefutiana. Kwa hiyo kila lengo lililofikiwa huwa kitu chake chenyewe.

Gharama yake ni vitu vingi vidogo; mpangilio wa ufunguo ndio unaofanya hilo liwezekane:

prefix/YYYY/MM/DD/channel/session-goal.json

Ghala husoma siku moja kama kizigeu kimoja, na kujaza nyuma ni ukaguzi wa kiambishi cha mwanzo badala ya hoja. Ukitaka kugawa kwa mradi badala ya tarehe, weka ID ya chaneli katika kiambishi cha mwanzo.

Kila kitu ni mstari mmoja wa JSON

Kwa makusudi bila ujongezaji, ili kiambishi kizima cha mwanzo kisomeke kama NDJSON bila kufungua vitu kimoja kimoja. Muhuri wa muda, mradi, kipindi, ID ya mteja, lengo, thamani, sarafu na kiungo kinachocheza rekodi tena.

Thamani tupu ni null, si sifuri

Lengo lisilo na thamani ya fedha huandika null kama thamani. Katika ghala, sifuri ingejumlishwa katika jumla ambayo haikuwahi kuwepo; tofauti kati ya “hakuna kiasi kilichokubaliwa” na “kiasi cha sifuri” hubaki baada ya uhamishaji.

4. Ikijibu 403, soma hili kwanza

Ombi la S3 lililokataliwa halisemi karibu chochote, na kuna sababu ujumbe wa hitilafu katika kumbukumbu yetu husema zaidi kuliko S3: eneo huingizwa katika saini kama sehemu yake. Eneo lisilo sahihi na ufunguo usio sahihi huzalisha 403 ileile, hivyo dhana iliyo wazi, yaani ufunguo, huwa sahihi nusu ya wakati tu.

Vitu vitatu vya kukagua, kwa mpangilio huu:

  • Eneo, kama linavyoripotiwa na bucket. R2 na Google Cloud Storage hutumia auto na havilikagui; wengine wote hulikagua.
  • Ruhusa ya kiambishi cha mwanzo. Ufunguo wenye wigo wa mouseplayer/ hauwezi kuandika kwenye mouseplayer-goals/ — mkwaju wa mwisho ni muhimu katika ARN ya rasilimali.
  • Endpoint, kwa R2 na hifadhi zinazolingana na S3. Bandika host bila https://; tunaiondoa kwa njia yoyote, lakini njia iliyoambatishwa nayo ni bucket tofauti.

ID ya ufunguo wa ufikiaji huhifadhiwa wazi kwa makusudi. Husafiri katika kila ombi lililotiwa saini kwa muundo wake, hivyo kuisimba fiche kungekuwa juhudi bila ulinzi. Siri husimbwa fiche, haionyeshwi tena kamwe na haiingii kamwe katika foleni ya ndani inayobeba kazi.

Alama zote za biashara zilizotajwa hapa ni mali ya wamiliki wake. MousePlayer haina uhusiano wa kibiashara na watoa huduma hawa.