Eksport objektimällu

JSON-objekt täidetud eesmärgi kohta teie ämbris. Tee igasse andmelattu peale BigQuery.

1. Puuduv ühendus

Seni viis MousePlayerist andmelattu täpselt üks tee ning see viis Google’isse. Snowflake’i, Redshifti või ClickHouse’i kasutajale teed polnud, kuigi kõik kolm loevad probleemideta objektimälu.

Seetõttu kirjutab sild objektimällu, selle asemel et toetada iga andmeladu eraldi. Snowflake, Redshift ja ClickHouse loevad S3-st ning BigQuery Google Cloud Storage’ist. Üks eksport jõuab kõigini.

SihtkohtAdresseerimine
Amazon S3Signature Version 4, ämber hostis
Cloudflare R2Signature Version 4 teie konto lõpp-punkti
Google Cloud StorageS3-ühilduv API HMAC-võtmega
MinIO, Wasabi, Backblaze B2 ja muudSignature Version 4 teie lõpp-punkti
Azure Blob Storagekonteineri SAS-link, meie ei allkirjasta

2. Miks Azure erineb ja on parem

Azure Blob ei kasuta Signature Version 4 allkirjastamist, vaid SharedKeyd. Oleksime võinud ehitada teise allkirjastusskeemi. Selle asemel võtab sild vastu konteineri SAS-lingi – URL-i, mille loote oma mälukontol ja mis juba sisaldab allkirja.

See tähendab meie poolel vähem koodi ning teie poolel väiksemat usaldusvajadust. Me ei näe üldse konto võtit: annate üle enda määratud õiguse ühele konteinerile, enda valitud aegumistähtajaga. Selle saab igal ajal tühistada, ilma midagi muud muutmata.

S3-s sama: lubage kirjutada ainult sellesse prefiksisse. Ainult mouseplayer/goals/ alla lisav võti ei loe lekkimiselgi teisi ämbreid.

3. Objekt eesmärgile, võti kuupäev

Objektimälu ei toeta lõppu lisamist. Päevafail tuleks iga kord tervikuna ümber kirjutada ning kaks korraga saabuvat eesmärki kirjutaksid teineteise üle. Seetõttu saab igast täidetud eesmärgist eraldi objekt.

Palju pisikesi objekte, võtmekuju teeb hallatavaks:

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

Andmeladu loeb ühe päeva ühe partitsioonina ning tagantjärele täitmine toimub päringu asemel prefiksi skannimisega. Kui soovite jaotada projekti, mitte kuupäeva järgi, lisage kanali ID prefiksisse.

Iga objekt üks JSON-rida

Tahtlikult ilma taandeta, et tervet prefiksit saaks lugeda NDJSON-ina, objekte ükshaaval avamata. Ajatempel, projekt, seanss, kliendi ID, eesmärk, väärtus, valuuta ning salvestise taasesituse link.

Tühi väärtus null, mitte nullarv

Rahaväärtuseta eesmärk kirjutab null. Andmelaos liidetaks null kogusummasse, mida pole kunagi olnud. Nii säilib ekspordis erinevus „summat pole kokku lepitud“ ja „summa on null“ vahel.

4. Vastuse 403 korral lugege esmalt

Tagasilükatud S3 päring ütleb peaaegu mitte midagi. Meie logi veateade ütleb rohkem kui S3 ning sellel on põhjus: piirkond kuulub allkirja. Vale piirkond ja vale võti annavad mõlemad vastuse 403, mistõttu on kõige ilmsem kahtlusalune – võti – süüdi ainult pooltel kordadel.

Kontrollige järjest:

  • Piirkond täpselt ämbri järgi. R2 ja Google Cloud Storage kasutavad auto kontrollimata; teised kontrollivad.
  • Prefiksiõigus. Võti ulatusega mouseplayer/ ei saa kirjutada mouseplayer-goals/: lõpuslash oluline ressursi ARN-is.
  • Lõpp-punkt R2 ja S3-ühilduvale. Host ilma https:// osata. Eemaldame selle niikuinii, kuid lisatud teekond tähendaks teist ämbrit.

Pääsuvõtme ID salvestatakse teadlikult avatekstina. See liigub protokolli kohaselt iga allkirjastatud päringuga kaasa, seega annaks selle krüptimine tööd ilma kaitseta. Saladus krüptitakse, seda ei näidata enam kunagi ega lisata ülesannet kandvasse sisemisse järjekorda.

Kaubamärgid kuuluvad omanikele. MousePlayeril pole pakkujatega ärisuhet.