Izvoz v objektno shrambo

En objekt JSON na dosežen cilj v vašem vsebniku. To je pot v vsako podatkovno skladišče, ki ni BigQuery.

1. Vrzel, ki jo zapolni

Do zdaj je iz MousePlayer v podatkovno skladišče vodila natanko ena pot, h Googlu. Za Snowflake, Redshift ali ClickHouse je ni bilo, čeprav vsi trije brez težav berejo iz objektne shrambe.

Most zato zapisuje v objektno shrambo namesto v vsako skladišče posebej. Snowflake, Redshift in ClickHouse berejo iz S3, BigQuery pa iz Google Cloud Storage. En izvoz doseže vse.

KamNačin naslavljanja
Amazon S3Signature Version 4, vsebnik v gostitelju
Cloudflare R2Signature Version 4 na končni točki vašega računa
Google Cloud Storageprek API-ja, združljivega s S3, s ključem HMAC
MinIO, Wasabi, Backblaze B2 in drugiSignature Version 4 na vaši končni točki
Azure Blob Storagepovezava SAS vsebnika – brez podpisovanja na naši strani

2. Zakaj je Azure drugačen in zakaj je to bolje

Azure Blob ne uporablja Signature Version 4, ampak podpisuje s SharedKey. Lahko bi zgradili drugo podpisno shemo. Most namesto tega sprejme povezavo SAS vsebnika – URL, ki ga ustvarite v svojem računu shrambe in že vsebuje podpis.

To pomeni manj kode na naši strani in manj potrebnega zaupanja na vaši. Ključa računa nikoli ne vidimo: posredujete dovoljenje, ki ste ga sami omejili na en vsebnik in datum poteka ter ga lahko kadar koli prekličete brez drugih posegov.

Enako omejitev je smiselno uporabiti pri S3: dostopnemu ključu dovolite zapisovanje samo pod to predpono in nič drugega. Ključ, ki lahko dodaja samo v mouseplayer/goals/, tudi ob razkritju ne more brati vaših drugih vsebnikov.

3. En objekt na cilj, ključ pa je datum

Objektna shramba ne omogoča dopisovanja. Dnevno datoteko bi bilo treba vsakič povsem prepisati, sočasna cilja pa bi prepisala drug drugega. Zato vsak dosežen cilj postane lasten objekt.

Cena je veliko majhnih objektov; uporabnost omogoča razporeditev ključev:

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

Skladišče prebere en dan kot eno particijo, dopolnjevanje pa je pregled predpone namesto poizvedbe. Za particioniranje po projektu namesto po datumu dodajte ID kanala v predpono.

Vsak objekt je ena vrstica JSON

Namenoma brez zamikov, da se celotna predpona bere kot NDJSON brez odpiranja vsakega objekta posebej. Časovna oznaka, projekt, seja, ID stranke, cilj, vrednost, valuta in povezava za predvajanje posnetka.

Prazna vrednost je null, ne ničla

Cilj brez denarne vrednosti zapiše null. V skladišču bi ničla prispevala k vsoti, ki nikoli ni obstajala – razlika med „znesek ni dogovorjen“ in „znesek nič“ preživi izvoz.

4. Če odgovori z 403, najprej preberite to

Zavrnjena zahteva S3 pove skoraj nič in obstaja razlog, zakaj sporočilo v našem dnevniku pove več kot S3: regija je del podpisa. Napačna regija in napačen ključ povzročita isto napako 403, zato je očiten sum – ključ – pravilen samo polovico časa.

Preverite tri stvari v tem vrstnem redu:

  • Regijo, natanko tako, kot jo navaja vsebnik. R2 in Google Cloud Storage uporabljata auto in je ne preverjata; vsi drugi jo.
  • Dovoljenje za predpono. Ključ, omejen na mouseplayer/, ne more zapisovati v mouseplayer-goals/ – poševnica na koncu je pomembna v ARN-ju vira.
  • Končno točko, pri R2 in shrambah, združljivih s S3. Prilepite gostitelja brez https://; ta del v vsakem primeru odstranimo, dodana pot pa pomeni drug vsebnik.

ID dostopnega ključa je namenoma shranjen nešifrirano. Po zasnovi potuje v vsaki podpisani zahtevi, zato šifriranje pomeni trud brez zaščite. Skrivnost se šifrira, ni več prikazana in nikoli ne pride v interno čakalno vrsto z nalogo.

Vse navedene blagovne znamke pripadajo svojim lastnikom. MousePlayer s temi ponudniki nima poslovnega odnosa.