Automating Periodic Data Transfer from an Operational Database to a Data Warehouse
Bài tóm tắt Allegro 2024 2. Tăng trưởng Độ khó: Dễ
Allegro · 2024 · 2. Tăng trưởng · Độ khó: Dễ — bài gốc
Bài mô tả giải pháp ở mức khái niệm ("cần chỉnh theo nhu cầu"), không kèm số liệu production.
Bối cảnh
- Chạy truy vấn phân tích nặng trên DB vận hành gây chậm, thậm chí sự cố; chuyển dữ liệu sang data warehouse còn cho phép giữ dữ liệu ngắn hơn ở DB production.
- Ràng buộc: nguồn PostgreSQL, đích BigQuery; dòng bất biến (chỉ thêm, không sửa xoá); GCP không kết nối thẳng được tới Postgres (kể cả VPN/Interconnect); trễ tối đa 2 giờ; không được mất dòng nào.
Thay đổi chính
- Loại các công cụ GCP (Dataflow, BigQuery Data Transfer Service, Datastream CDC) vì đều cần kết nối tới Postgres.
- Loại outbox + Debezium + Kafka: streaming theo thời gian thực thì tốt, nhưng theo Allegro lỗi kết nối hay lỗi consumer có thể gây mất hoặc trùng; cơ chế bù có nhưng làm hệ phức tạp. Batch cho phép copy nguyên tử theo khoảng thời gian và kiểm sau mỗi lần.
- "Kopiowaczka" (cái máy copy): bảng task (bảng nguồn, khoảng ngày, trạng thái
NEW/IN_PROGRESS/SUCCESS/ERROR); scheduler xử lý taskNEW:- truy vấn Postgres theo khoảng ngày, ghi CSV;
- upload lên GCS;
- load vào bảng tạm BigQuery;
- chép sang bảng đích bằng
LEFT JOIN ... WHERE f.key IS NULL, vì BigQuery không ép khoá duy nhất; nhờ vậy chạy lại hay chồng khoảng đều an toàn; - so số dòng hai bên cho khoảng đó (hoặc tổng một cột).
- Lỗi ở bước nào cũng retry tối đa 3 lần rồi
ERRORvà bắn alert. Lệch số dòng hiếm, thường do ai đó lên lịch task códate_totrong tương lai.
Vì sao
- Yêu cầu đầy đủ tuyệt đối và trễ cho phép tới hàng giờ thì batch idempotent có kiểm đối chiếu đơn giản hơn streaming có cơ chế bù.
Bài học cho SWE
- Với dữ liệu chỉ thêm, copy theo khoảng thời gian + load idempotent + đối chiếu số dòng là pipeline nhỏ nhất mà vẫn chứng minh được không mất dữ liệu (Pipeline dữ liệu và analytics).
- Chọn stream hay batch theo yêu cầu độ tươi và độ đầy đủ, không theo mốt; outbox/CDC đổi độ trễ lấy thêm trạng thái phải lo (Event-driven, message queue và Kafka).
- Bảng task có trạng thái biến pipeline thành thứ chạy lại thủ công được cho một khoảng bất kỳ (backfill).
Liên quan
Được nhắc tới trong
Công ty (1)
Bài tóm tắt (5)