Export do objektového úložiska

Jeden objekt JSON za každý dosiahnutý cieľ v buckete, ktorý vlastníte. Toto je cesta do každého dátového skladu okrem BigQuery.

1. Medzera, ktorú vypĺňa

Doteraz existovala z MousePlayer do dátového skladu presne jedna cesta a viedla ku Google. Ak používate Snowflake, Redshift alebo ClickHouse, neexistovala žiadna – hoci všetky tri bez problémov čítajú z objektového úložiska.

Most preto zapisuje do objektového úložiska, nie postupne do každého skladu. Snowflake načítava zo S3, Redshift zo S3, ClickHouse zo S3 a BigQuery z Google Cloud Storage. Jeden export dosiahne ku všetkým.

KamAko sa adresuje
Amazon S3Signature Version 4, bucket v hostiteľovi
Cloudflare R2Signature Version 4 voči koncovému bodu vášho účtu
Google Cloud Storagecez API kompatibilné s S3 s kľúčom HMAC
MinIO, Wasabi, Backblaze B2 a ďalšieSignature Version 4 voči vášmu koncovému bodu
Azure Blob Storageodkaz SAS kontajnera – bez akéhokoľvek podpisovania na našej strane

2. Prečo je Azure výnimkou a prečo je to lepšie

Azure Blob nepoužíva Signature Version 4; podpisuje pomocou SharedKey. Mohli sme vytvoriť druhú schému podpisovania. Most namiesto toho prijíma odkaz SAS kontajnera – URL, ktorú vygenerujete vo vlastnom účte úložiska a ktorá už obsahuje podpis.

To znamená menej kódu na našej strane a menej potrebnej dôvery na vašej. Kľúč účtu nikdy nevidíme: odovzdávate oprávnenie, ktorého rozsah ste sami obmedzili na jeden kontajner, s vlastným dátumom vypršania a možnosťou kedykoľvek ho odvolať bez zásahu do čohokoľvek iného.

Rovnaká zdržanlivosť sa oplatí aj pri S3: udeľte prístupovému kľúču právo zapisovať iba do tejto jednej predpony a nikam inam. Kľúč, ktorý môže iba pridávať do mouseplayer/goals/, nedokáže čítať vaše ostatné buckety ani pri úniku.

3. Jeden objekt za cieľ a kľúčom je dátum

Objektové úložisko nemá pridávanie na koniec. Denný súbor by sa pri každom zápise musel celý prepísať a dva súčasne dosiahnuté ciele by sa navzájom prepísali. Každý dosiahnutý cieľ sa preto stáva samostatným objektom.

Cenou je veľa malých objektov; použiteľnosť zabezpečuje štruktúra kľúčov:

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

Dátový sklad číta jeden deň ako jednu partíciu a spätné doplnenie je prehľadanie predpony namiesto požiadavky. Ak chcete deliť podľa projektu namiesto dátumu, vložte ID kanála do predpony.

Každý objekt je jeden riadok JSON

Zámerne bez odsadenia, aby sa celá predpona dala čítať ako NDJSON bez otvárania objektov po jednom. Časová pečiatka, projekt, relácia, ID zákazníka, cieľ, hodnota, mena a odkaz na prehratie záznamu.

Prázdna hodnota je null, nie nula

Cieľ bez peňažnej hodnoty zapisuje null. V dátovom sklade by sa nula sčítala do súčtu, ktorý nikdy neexistoval – rozdiel medzi „žiadna dohodnutá suma“ a „nulová suma“ sa pri exporte zachová.

4. Ak odpovie 403, najprv si prečítajte toto

Odmietnutá požiadavka S3 hovorí takmer nič a existuje dôvod, prečo naše chybové hlásenie v denníku hovorí viac než S3: región vstupuje do podpisu. Nesprávny región a nesprávny kľúč vytvárajú rovnakú chybu 403, preto je zjavné podozrenie – kľúč – správne iba v polovici prípadov.

Tri veci na kontrolu, v tomto poradí:

  • Región, presne tak, ako ho uvádza bucket. R2 a Google Cloud Storage prijímajú auto a nekontrolujú ho; všetci ostatní áno.
  • Oprávnenie predpony. Kľúč obmedzený na mouseplayer/ nemôže zapisovať do mouseplayer-goals/ – koncová lomka je v ARN prostriedku dôležitá.
  • Koncový bod pre R2 a úložiská kompatibilné s S3. Vložte hostiteľa bez https://; odstránime ho v každom prípade, no pripojená cesta znamená iný bucket.

ID prístupového kľúča sa zámerne ukladá nešifrované. Z princípu sa prenáša v každej podpísanej požiadavke, preto by jeho šifrovanie bolo úsilím bez ochrany. Tajný kľúč je šifrovaný, už sa nezobrazuje a nikdy nevstupuje do interného frontu prenášajúceho úlohu.

Všetky uvedené ochranné známky patria príslušným vlastníkom. MousePlayer nemá s týmito poskytovateľmi obchodný vzťah.