Нысандық қоймаға экспорт

Әр орындалған мақсатқа өзіңізге тиесілі bucket ішінде бір JSON нысаны. Бұл — BigQuery емес кез келген деректер қоймасына апаратын жол.

1. Қандай олқылықты толтырады

Бұған дейін MousePlayer жүйесінен деректер қоймасына баратын дәл бір жол болды, ол Google жүйесіне апаратын. Snowflake, Redshift не ClickHouse қолдансаңыз, жол жоқ еді. Үшеуі де нысандық қоймадан оңай оқыса да, солай болды.

Сондықтан байланыс әр деректер қоймасына бөлек емес, нысандық қоймаға жазады. Snowflake S3 жүйесінен, Redshift S3 жүйесінен, ClickHouse S3 жүйесінен, BigQuery Google Cloud Storage жүйесінен алады. Бір экспорт бәріне жетеді.

ҚайдаҚалай мекенжайланады
Amazon S3Signature Version 4, bucket хост ішінде
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/ тарап кетсе де, басқа 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 осы қызмет жеткізушілерімен іскерлік қатынаста емес.