Export an den Objektspäicher

Ee JSON-Objet pro erfëlltem Zil, an engem Bucket, deen Iech gehéiert. Dat ass de Wee an all Datewarehouse, dat net BigQuery ass.

1. Déi Lück, déi dat schléisst

Bis elo gouf et genee ee Wee vu MousePlayer an en Datewarehouse, an dee goung op Google. Wann Dir Snowflake, Redshift oder ClickHouse benotzt, gouf et keen — obwuel se allen dräi ouni Problem aus Objektspäichere liesen.

Dofir schreift d'Bréck an den Objektspäicher amplaz noeneen an all Warehouse. Snowflake liest aus S3, Redshift liest aus S3, ClickHouse liest aus S3, a BigQuery liest aus Google Cloud Storage. Een Export erreecht se all.

WouWéi et adresséiert gëtt
Amazon S3Signature Version 4, Bucket am Host
Cloudflare R2Signature Version 4 géint Äre Kontendpunkt
Google Cloud Storageiwwer seng S3-kompatibel API, mat engem HMAC-Schlëssel
MinIO, Wasabi, Backblaze B2 an anererSignature Version 4 géint Ären Endpunkt
Azure Blob Storagee Container-SAS-Link — iwwerhaapt keng Ënnerschrëft op eiser Säit

2. Firwat Azure d'Ausnam ass a firwat dat besser ass

Azure Blob ënnerstëtzt Signature Version 4 net; et ënnerschreift mat SharedKey. Mir hätten en zweeten Ënnerschrëftschema baue kënnen. Amplaz hëlt d'Bréck e Container-SAS-Link — eng URL, déi Dir an Ärem eegene Späicherkont generéiert, mat der Ënnerschrëft schonn dran.

Dat bedeit manner Code op eiser Säit a manner néidegt Vertrauen op Ärer. Mir gesinn iwwerhaapt kee Kontschlëssel: Dir gitt eng Berechtegung weider, déi Dir selwer begrenzt hutt, op ee Container, mat engem Oflafdatum no Ärer Wiel, zu all Moment zréckzéibar ouni soss eppes ze beréieren.

Déiselwecht Zeréckhalung lount sech op der S3-Säit: Gitt dem Zougrëffsschlëssel nëmmen d'Schreifberechtegung fir dësen eenzege Präfix an näischt Anescht. E Schlëssel, deen nëmme bei mouseplayer/goals/ bäifüge kann, kann Är aner Buckets net liesen, och wann en ausleeft.

3. Een Objet pro Zil, an de Schlëssel ass en Datum

Objektspäicher kennen net d'Bäifügen un eng Datei. Eng deeglech Datei misst all Kéier ganz nei geschriwwe ginn, an zwee Ziler, déi gläichzäiteg ukommen, géife sech géigesäiteg iwwerschreiwen. Dofir gëtt all erfëllt Zil en eegene Objet.

De Präis si vill kleng Objeten; d'Opdeelung vum Schlëssel mécht dat benotzbar:

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

E Warehouse liest een Dag als eng Partitioun, an en Nodroe gëtt e Präfixscan amplaz eng Ufro. Wann Dir no Projet amplaz no Datum partitionéiere wëllt, setzt d'Kanal-ID an de Präfix.

All Objet ass eng Zeil JSON

Bewosst net ageréckt, soudatt e ganze Präfix als NDJSON liesbar ass, ouni d'Objeten eenzel opzemaachen. Zäitstempel, Projet, Sessioun, Clients-ID, Zil, Wäert, Währung an de Link, deen d'Opnam ofspillt.

En eidele Wäert ass null, net null als Zuel

En Zil ouni Geldwäert schreift null. An engem Warehouse géif eng Null mat an eng Zomm fléissen, déi ni existéiert huet — den Ënnerscheed tëschent „kee Betrag ofgemaach“ an „e Betrag vun null“ bleift beim Export erhalen.

4. Wann et mat 403 äntwert, liest dëst als Éischt

Eng refuséiert S3-Ufro seet bal näischt, an et gëtt e Grond, firwat d'Feelermeldung an eisem Protokoll méi seet ewéi S3: D'Regioun geet an d'Ënnerschrëft an. Eng falsch Regioun an e falsche Schlëssel produzéieren dee selwechte 403. Déi offensichtlech Vermuddung — de Schlëssel — ass also nëmmen an der Hallschent vun de Fäll richteg.

Dräi Saachen an dëser Reiefolleg iwwerpréiwen:

  • D'Regioun, genee esou, wéi de Bucket se mellt. R2 a Google Cloud Storage huelen auto a kontrolléiere se net; all déi aner maachen et.
  • D'Präfixberechtegung. E Schlëssel, deen op mouseplayer/ begrenzt ass, kann net op mouseplayer-goals/ schreiwen — de schréie Stréch um Enn ass an engem Ressource-ARN wichteg.
  • Den Endpunkt, fir R2 a S3-kompatibel Späicheren. Setzt den Host ouni https://an; mir huelen et souwisou ewech, mee e Wee, deen drun hänkt, ass en anere Bucket.

D'Zougrëffsschlëssel-ID gëtt bewosst am Kloertext gespäichert. Si gëtt bestëmmungsgeméiss mat all ënnerschriwwener Ufro verschéckt; se ze verschlësselen, wier Opwand ouni Schutz. D'Geheimnis gëtt verschlësselt, ni méi gewisen a kënnt ni an déi intern Warteschlaang, déi d'Aufgab transportéiert.

All hei genannt Marke gehéieren hire jeeweilege Besëtzer. MousePlayer huet keng Geschäftsbezéiung mat dësen Ubidder.