Member Transaction History: Data Store Selection Journey

Bài tóm tắt Walmart 2019 2. Tăng trưởng Độ khó: Dễ

Walmart · 2019 · 2. Tăng trưởng · Độ khó: Dễ — bài gốc

Bài ngắn, mô tả lựa chọn lúc thiết kế; không có số liệu tải hay kết quả vận hành.

Bối cảnh

  • Member Transaction History (MTH) là lớp đọc đa kênh cho đơn hàng của club (Sam's Club) và online: nguồn sự thật duy nhất để tra cứu và sửa đơn, với một mô hình đơn hàng chuẩn.
  • Truy vấn cần hỗ trợ: theo orderID; theo số điện thoại/email; theo membershipID + khoảng ngày/mã hàng; theo điện thoại/email + trạng thái + ngày; đếm đơn theo người dùng/khoảng ngày.

Thay đổi chính: chia truy vấn thành bốn nhóm, mỗi nhóm một kho (Azure)

Nhóm truy vấn Đã xét Chọn Lý do theo Walmart
Key-value (đơn theo orderId) Redis, Cosmos DB, Azure SQL, Cassandra Cosmos DB Azure SQL không scale trong test; Redis hợp cache hơn
Truy vấn động (facet, group-by, lọc) Cosmos, Azure Search, Azure SQL Azure Search Cosmos chưa có group-by/facet; nhưng Search latency cao, đang làm việc với Microsoft
Phân tích, tổng hợp phức tạp (streaming) Databricks, Stream Analytics Databricks Spark, nhiều ngôn ngữ
Lọc theo metadata, phân trang Cosmos, Azure Search, Azure SQL Cosmos DB Latency thấp; tính năng phân trang lúc đó chưa ra, nhưng ưu tiên latency
  • Kết luận của bài: không có một kho nào đáp ứng mọi trường hợp. Tiêu chí liệt kê: định dạng, kích thước, quan hệ dữ liệu, mô hình nhất quán, độ linh hoạt schema, đồng thời, vòng đời nóng/lạnh, vùng có sẵn, audit, throughput, chi phí, bảo mật.

Vì sao

  • Một lớp đọc phục vụ nhiều kiểu truy vấn khác nhau; ép tất cả vào một kho thì nhóm truy vấn nào đó sẽ chậm hoặc không làm được.

Bài học cho SWE

  • Phân loại truy vấn theo hình dạng (tra khoá, lọc, facet, tổng hợp) trước khi chọn kho (Chọn database theo workload).
  • Nhiều kho cho một lớp đọc thì phải có đường đồng bộ dữ liệu giữa chúng; bài không nói phần này, và đó là phần khó.
  • Lựa chọn có ghi rõ chỗ chưa ổn (latency của Azure Search, phân trang của Cosmos) là quyết định trung thực hơn một bảng so sánh "toàn thắng".

Liên quan