Արտահանում օբյեկտային պահոց
Մեկ JSON օբյեկտ յուրաքանչյուր կատարված նպատակի համար՝ ձեր սեփական bucket-ում։ Սա ճանապարհն է դեպի BigQuery-ից բացի բոլոր տվյալների պահեստները։
1. Ինչ բաց է լրացնում
Մինչ այժմ MousePlayer-ից տվյալների պահեստ հասնելու ճիշտ մեկ ճանապարհ կար, և այն տանում էր Google։ Եթե օգտագործում եք Snowflake, Redshift կամ ClickHouse, ճանապարհ չկար, թեև երեքն էլ առանց խնդրի կարդում են օբյեկտային պահոցից։
Ուստի կամուրջը գրում է օբյեկտային պահոց՝ յուրաքանչյուր պահեստի հերթով գրելու փոխարեն։ Snowflake-ը ներմուծում է S3-ից, Redshift-ը՝ S3-ից, ClickHouse-ը՝ S3-ից, իսկ BigQuery-ն՝ Google Cloud Storage-ից։ Մեկ արտահանումը հասնում է բոլորին։
| Որտեղ | Ինչպես է հասցեագրվում |
|---|---|
| Amazon S3 | Signature Version 4՝ bucket-ը հոսթի մեջ |
| Cloudflare R2 | Signature Version 4՝ ձեր հաշվի վերջնակետով |
| Google Cloud Storage | իր S3-ի հետ համատեղելի API-ով՝ HMAC բանալիով |
| MinIO, Wasabi, Backblaze B2 և այլք | Signature Version 4՝ ձեր վերջնակետով |
| Azure Blob Storage | կոնտեյների SAS հղում՝ մեր կողմում ընդհանրապես առանց ստորագրման |
2. Ինչու Azure-ը տարբեր է և ինչու դա ավելի լավ է
Azure Blob-ը Signature Version 4 չի օգտագործում. ստորագրում է SharedKey-ով։ Կարող էինք ստորագրման երկրորդ սխեմա կառուցել։ Փոխարենը կամուրջը վերցնում է կոնտեյների SAS հղումը ՝ ձեր պահոցի հաշվում ձեր գեներացրած URL-ը, որի մեջ ստորագրությունն արդեն կա։
Սա մեր կողմում պակաս կոդ է, ձեր կողմում՝ պակաս վստահության պահանջ։ Մենք հաշվի բանալի ընդհանրապես չենք տեսնում. փոխանցում եք ձեր սահմանափակած թույլտվությունը՝ մեկ կոնտեյների համար, ձեր ընտրած ավարտի ժամկետով, ցանկացած պահի հետկանչելի՝ առանց մնացածը շոշափելու։
Նույն զսպվածությունն արժե կիրառել S3-ի համար. հասանելիության բանալուն տվեք գրելու թույլտվություն միայն այս մեկ նախածանցում և ուրիշ ոչ մի տեղ։ Միայն mouseplayer/goals/ -ին ավելացնել կարողացող բանալին նույնիսկ արտահոսելիս չի կարող կարդալ մյուս bucket-ները։
3. Մեկ օբյեկտ՝ յուրաքանչյուր նպատակի համար, բանալին՝ ամսաթիվ
Օբյեկտային պահոցում ավելացման գործողություն չկա։ Օրական ֆայլն ամեն անգամ պետք է ամբողջությամբ վերագրվեր, և միաժամանակ հասնող երկու նպատակներ կվերագրեին միմյանց։ Ուստի յուրաքանչյուր կատարված նպատակն առանձին օբյեկտ է դառնում։
Գինը բազմաթիվ փոքր օբյեկտներն են. բանալիների կառուցվածքն է դա գործնական դարձնում՝
prefix/YYYY/MM/DD/channel/session-goal.json
Պահեստը մեկ օրը կարդում է որպես մեկ բաժին, իսկ հետադարձ լրացումը նախածանցի սկանավորում է, ոչ հարցում։ Եթե ուզում եք բաժանել ըստ նախագծի՝ ամսաթվի փոխարեն, նախածանցում դրեք ալիքի ID-ն։
Յուրաքանչյուր օբյեկտը JSON-ի մեկ տող է
Միտումնավոր առանց նահանջների, որպեսզի ամբողջ նախածանցը կարդացվի որպես NDJSON՝ առանց օբյեկտները հերթով բացելու։ Ժամանակադրոշմ, նախագիծ, աշխատաշրջան, հաճախորդի ID, նպատակ, արժեք, արժույթ և ձայնագրությունը բացող հղում։
Դատարկ արժեքը null է, ոչ զրո
Դրամական արժեք չունեցող նպատակը գրում է null։ Պահեստում զրոն կմիանար երբեք չեղած ընդհանուր գումարին. «գումար համաձայնեցված չէ» և «զրո գումար» տարբերությունը պահպանվում է արտահանման մեջ։
4. Եթե պատասխանը 403 է, նախ սա կարդացեք
Մերժված S3 հարցումը գրեթե ոչինչ չի ասում, և կա պատճառ, թե ինչու մեր մատյանի հաղորդագրությունն ավելին է ասում, քան S3-ը՝ տարածաշրջանը ներառվում է ստորագրության մեջ։ Սխալ տարածաշրջանն ու սխալ բանալին տալիս են նույն 403-ը, ուստի ակնհայտ կասկածը՝ բանալին, ճիշտ է դեպքերի միայն կեսում։
Ստուգեք երեք բան՝ այս հերթականությամբ՝
- Տարածաշրջանը՝ ճիշտ ինչպես bucket-ն է հայտնում։ R2-ն ու Google Cloud Storage-ը վերցնում են
autoև չեն ստուգում. մյուսները ստուգում են։ - Նախածանցի թույլտվությունը։
mouseplayer/-ով սահմանափակված բանալին չի կարող գրելmouseplayer-goals/-ում. վերջի շեղ գիծը կարևոր է ռեսուրսի ARN-ում։ - Վերջնակետը՝ R2-ի և S3-ի հետ համատեղելի պահոցների համար։ Հոսթը տեղադրեք առանց
https://. ամեն դեպքում դա հեռացնում ենք, բայց կցված ուղին արդեն ուրիշ bucket է։
Հասանելիության բանալու ID-ն միտումնավոր պահվում է բաց տեսքով։ Այն նախագծով փոխանցվում է յուրաքանչյուր ստորագրված հարցման հետ, ուստի գաղտնագրելը ջանք կլիներ՝ առանց պաշտպանության։ Գաղտնիքը գաղտնագրված է, այլևս չի ցուցադրվում և երբեք չի մտնում առաջադրանքը կրող ներքին հերթը։
Այստեղ նշված բոլոր ապրանքային նշանները պատկանում են իրենց տերերին։ MousePlayer-ը գործարար կապ չունի այս մատակարարների հետ։