Объект хадгалалтын экспорт

Биелсэн зорилго бүрд нэг JSON объект, таны эзэмшдэг хадгалалтын саванд. Энэ нь BigQuery-ээс бусад бүх агуулах руу хүрэх зам юм.

1. Ямар завсрыг нөхөх вэ

Өмнө нь MousePlayer-ээс өгөгдлийн агуулах руу хүрэх яг нэг зам байсан бөгөөд Google руу хүргэдэг байв. Snowflake, Redshift эсвэл ClickHouse ашигладаг бол гурав нь бүгд объект хадгалалтаас төвөггүй уншдаг ч зам байгаагүй.

Тиймээс холбогч гүүр агуулах тус бүр рүү бус, объект хадгалалт руу бичнэ. Snowflake S3-ээс, Redshift S3-ээс, ClickHouse S3-ээс, BigQuery Google Cloud Storage-оос өгөгдөл авна. Нэг экспорт бүгдэд хүрнэ.

ХаанаХэрхэн хандах вэ
Amazon S3Signature Version 4, хадгалалтын сав нь хост дотор
Cloudflare R2Таны бүртгэлийн төгсгөлийн цэгт Signature Version 4
Google Cloud StorageS3-тэй нийцтэй 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/ алдагдсан ч таны бусад хадгалалтын савыг уншиж чадахгүй.

3. Зорилго бүрд нэг объект, түлхүүр нь огноо

Объект хадгалалт нэмэх үйлдэлгүй. Өдрийн файлыг удаа бүр бүхэлд нь дахин бичих шаардлагатай бөгөөд зэрэг ирсэн хоёр зорилго бие биеэ дарж бичнэ. Тиймээс биелсэн зорилго бүр тусдаа объект болно.

Үүний үнэ нь олон жижиг объект. Түлхүүрийн бүтэц үүнийг ажиллах боломжтой болгоно:

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

Агуулах нэг өдрийг нэг хуваалт гэж уншина. Нөхөн таталт нь асуулга бус, угтварын хайлт болно. Огнооны оронд төслөөр хуваахыг хүсвэл сувгийн ID-г угтвартаа оруулна уу.

Объект бүр нэг мөр JSON

Объектуудыг нэг нэгээр нь нээхгүйгээр бүх угтварыг NDJSON болгон уншихын тулд зориуд догол мөргүй. Цагийн тэмдэг, төсөл, сеанс, харилцагчийн ID, зорилго, үнэ цэн, валют болон бичлэг дахин тоглуулах холбоос.

Хоосон утга нь тэг бус, null

Мөнгөн үнэ цэнгүй зорилго дараахыг бичнэ: null. Агуулахад тэг нь хэзээ ч байгаагүй нийт дүнд нэмэгдэнэ. «Дүн тохиролцоогүй» болон «тэг дүн»-гийн ялгаа экспортод хадгалагдана.

4. 403 гэж хариулбал эхлээд үүнийг уншина уу

Татгалзсан S3 хүсэлт бараг юу ч хэлдэггүй. Манай бүртгэлийн алдааны мэдэгдэл S3-ээс илүүг хэлдгийн шалтгаан нь: бүс нутаг гарын үсэгт ордог. Буруу бүс нутаг болон буруу түлхүүр ижил 403 үүсгэдэг тул хамгийн түрүүнд сэжиглэх түлхүүр нь зөвхөн тал тохиолдолд шалтгаан байдаг.

Дараах гурван зүйлийг энэ дарааллаар шалгана уу:

  • Бүс нутаг, хадгалалтын савын мэдээлсэнтэй яг ижил. R2 болон Google Cloud Storage дараахыг авч, auto шалгадаггүй. Бусад нь бүгд шалгадаг.
  • Угтварын эрх. Дараах хүрээтэй түлхүүр mouseplayer/ дараахад бичиж чадахгүй: mouseplayer-goals/ . Нөөцийн ARN дотор төгсгөлийн налуу зураас чухал.
  • Төгсгөлийн цэг, R2 болон S3-тэй нийцтэй хадгалалтад. Хостыг дараахгүйгээр хуулж тавина уу: https://. Бид аль ч тохиолдолд үүнийг хасна. Харин араас нь зам нэмбэл өөр хадгалалтын сав болно.

Хандалтын түлхүүрийн ID-г зориуд ил хэлбэрээр хадгалдаг. Загварын дагуу гарын үсэгтэй хүсэлт бүрд дамждаг тул шифрлэх нь хамгаалалтгүй нэмэлт ажил болно. Нууцыг шифрлэж, дахин харуулахгүй бөгөөд ажлыг тээвэрлэдэг дотоод дараалалд хэзээ ч оруулахгүй.

Энд нэрлэсэн бүх худалдааны тэмдэг тус тусын эзэмшигчид харьяалагдана. MousePlayer эдгээр үйлчилгээ үзүүлэгчтэй бизнесийн харилцаагүй.