ส่งออกไปที่เก็บอ็อบเจ็กต์
หนึ่งอ็อบเจ็กต์ JSON ต่อเป้าหมายที่สำเร็จในบักเก็ตของคุณ เป็นเส้นทางสู่คลังข้อมูลทุกชนิดนอกเหนือจาก BigQuery
1. ช่องว่างที่เติมเต็ม
ก่อนหน้านี้ MousePlayer มีทางเข้าคลังข้อมูลทางเดียวคือ Google หากใช้ Snowflake, Redshift หรือ ClickHouse ไม่มีทางเลย แม้ทั้งสามอ่านที่เก็บอ็อบเจ็กต์ได้ปกติ
สะพานจึงเขียนที่เก็บอ็อบเจ็กต์แทนเชื่อมคลังแต่ละชนิด Snowflake, Redshift และ ClickHouse อ่านจาก S3 ส่วน BigQuery อ่าน Google Cloud Storage การส่งออกเดียวถึงทั้งหมด
| ปลายทาง | วิธีระบุที่อยู่ |
|---|---|
| Amazon S3 | Signature Version 4 ระบุบักเก็ตในโฮสต์ |
| Cloudflare R2 | Signature Version 4 ไปปลายทางบัญชี |
| Google Cloud Storage | ผ่าน API ที่เข้ากันได้กับ S3 ด้วยคีย์ 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 ที่ปฏิเสธแทบไม่บอกอะไร ข้อความในบันทึกเราบอกมากกว่าเพราะ: ภูมิภาคอยู่ในลายเซ็น ภูมิภาคผิดกับคีย์ผิดให้ 403 เหมือนกัน ผู้ต้องสงสัยที่ชัดคือคีย์จึงถูกเพียงครึ่งครั้ง
ตรวจสามอย่างตามลำดับ:
- ภูมิภาค ต้องตรงที่บักเก็ตรายงาน R2 และ Google Cloud Storage รับค่า
autoโดยไม่ตรวจ ระบบอื่นตรวจ - สิทธิ์คำนำหน้า คีย์ที่จำกัดใน
mouseplayer/เขียนไปmouseplayer-goals/ไม่ได้ เครื่องหมายทับท้ายมีความหมายใน ARN ทรัพยากร - ปลายทาง สำหรับ R2 และที่เก็บที่เข้ากันได้กับ S3 วางโฮสต์โดยไม่ใส่
https://เราตัดออกให้อยู่แล้ว แต่หากเติมเส้นทางจะกลายเป็นอีกบักเก็ต
ตั้งใจเก็บ ID คีย์เข้าถึงเป็นข้อความธรรมดา เพราะส่งไปทุกคำขอลงลายเซ็น การเข้ารหัสจึงเพิ่มงานแต่ไม่เพิ่มการปกป้อง ส่วนความลับเข้ารหัส ไม่แสดงอีก และไม่เข้าในคิวภายในที่เก็บงาน
เครื่องหมายการค้าทั้งหมดที่กล่าวถึงเป็นของเจ้าของแต่ละราย MousePlayer ไม่มีความสัมพันธ์ทางธุรกิจกับผู้ให้บริการเหล่านี้