SealCore
Câu chuyện triển khai

Dựng một nền tảng dữ liệu vĩ mô: 93 bảng số liệu cập nhật hằng tháng

Dữ Liệu Kinh Tế là sản phẩm của chính chúng tôi. Bài này kể phần khó: giữ cho số liệu đúng khi nguồn công bố thay đổi liên tục.

Đội ngũ SealCore4 phút đọc
Ảnh minh hoạ bài viết: Dựng một nền tảng dữ liệu vĩ mô: 93 bảng số liệu cập nhật hằng tháng

Dữ Liệu Kinh Tế là sản phẩm do SealCore tự xây và tự vận hành: kho số liệu kinh tế vĩ mô Việt Nam, hiện có hơn 93 bảng chia theo 15 nhóm chỉ tiêu, cập nhật hằng tháng và miễn phí. Bài này kể phần khó nhất — không phải phần giao diện.

Bài toán: nguồn dữ liệu không ổn định

Số liệu đến từ các cơ quan công bố chính thức, nhưng cách công bố thì không đồng nhất: có nơi ra file bảng tính, có nơi ra tài liệu văn bản, có nơi đổi cấu trúc bảng giữa các kỳ, và tên chỉ tiêu đôi khi thay đổi cách viết. Một quy trình xử lý viết cứng theo vị trí cột sẽ hỏng ngay ở kỳ công bố thứ hai.

Vì vậy nguyên tắc thiết kế đầu tiên là: giả định nguồn sẽ đổi, và tách phần đọc nguồn ra khỏi phần lưu trữ để khi nguồn đổi thì chỉ sửa một chỗ nhỏ.

Kiến trúc ba tầng

  1. 1Tầng thu thập — mỗi nguồn một bộ đọc riêng, chạy theo lịch, lưu lại bản gốc nguyên trạng. Bản gốc được giữ để khi phát hiện sai còn truy ngược được là sai từ đâu.
  2. 2Tầng chuẩn hoá — ánh xạ tên chỉ tiêu về mã chuẩn nội bộ, thống nhất đơn vị tính và kỳ báo cáo, xử lý các trường hợp cơ quan công bố sửa lại số liệu kỳ trước.
  3. 3Tầng phục vụ — các chuỗi số đã sạch, sẵn sàng cho trang tra cứu và cho công cụ vẽ biểu đồ.

Tầng hai là tầng tốn công nhất, đúng như mô tả trong bài Kho dữ liệu tập trung. Bảng ánh xạ tên chỉ tiêu là tài sản quan trọng nhất của cả hệ thống.

Kiểm tra chất lượng tự động

Với dữ liệu công bố, sai một con số là mất uy tín toàn bộ. Nên mỗi lần cập nhật đều chạy qua một bộ kiểm tra trước khi được phép lên trang:

  • Giá trị mới có nhảy bất thường so với chuỗi lịch sử không? Nhảy quá ngưỡng thì dừng lại chờ người xem.
  • Kỳ báo cáo có liên tục không, có kỳ nào bị thiếu không?
  • Các quan hệ nội tại có đúng không — ví dụ tổng các thành phần có bằng số tổng đã công bố.
  • Số liệu kỳ cũ có bị thay đổi so với lần lấy trước không? Nếu có, phải ghi nhận là cơ quan công bố đã điều chỉnh, chứ không ghi đè im lặng.

Vì sao dựng trang tĩnh thay vì truy vấn lúc người dùng vào

Mỗi chỉ tiêu là một trang riêng được dựng sẵn ở máy chủ. Số liệu chỉ đổi mỗi tháng một lần nên không có lý do gì phải truy vấn cơ sở dữ liệu cho từng lượt xem. Kết quả là trang mở gần như tức thì, chịu được lượt truy cập tăng đột biến khi có số liệu mới, và chi phí máy chủ thấp.

Đây cũng là quyết định có lợi cho tìm kiếm: nội dung nằm sẵn trong HTML, kèm ghi rõ nguồn và ngày cập nhật ở từng bảng — thứ mà cả người đọc lẫn công cụ tìm kiếm đều cần để tin một con số.

Công cụ biểu đồ: phần người dùng ở lại lâu nhất

Tra một con số là việc mất ba mươi giây. Thứ khiến người dùng quay lại là khả năng đặt các chỉ tiêu cạnh nhau: lạm phát cạnh bán lẻ, tỷ giá cạnh xuất khẩu, tín dụng cạnh bất động sản.

Phần khó về kỹ thuật là các chỉ tiêu có kỳ khác nhau (tháng, quý, năm) và đơn vị khác nhau, nên không thể vẽ chung một trục. Giải pháp: cho phép nhiều trục, tự động gợi ý cách đồng bộ kỳ, và luôn hiển thị chú thích đơn vị ngay cạnh tên chuỗi.

Điều rút ra cho các dự án dữ liệu khác

  1. 1Giữ bản gốc của mọi lần thu thập. Không gian lưu trữ rẻ, còn việc không truy được nguyên nhân sai thì rất đắt.
  2. 2Kiểm tra chất lượng phải tự động và phải có quyền chặn. Kiểm tra mà không chặn được thì chỉ là ghi log.
  3. 3Ghi rõ nguồn và thời điểm cập nhật ngay cạnh mỗi con số. Đây là chi tiết nhỏ nhưng là toàn bộ khác biệt giữa một kho dữ liệu đáng tin và một trang web có nhiều số.

Cần bàn cụ thể?

SealCore khảo sát tại doanh nghiệp bạn và báo giá trọn gói sau buổi đầu tiên — kể cả khi kết luận là bạn chưa cần viết phần mềm riêng.

Tất cả bài viết