Bảng fact chứa các đại lượng về hoạt động sản xuất kinh doanh của doanh nghiệp.

Các loại bảng Fact

Bảng fact mức chi tiết (Transaction grain fact table)

Mô tả các sự kiện xảy tra trong thế giới thực và được ghi nào vào DW. Các tiêu chí và chiều trong bảng này không mô tả quá trình, chỉ ghi nhận giá trị thời điểm xảy ra sự kiện. Bảng này có quy mô (số lượng) lớn nhất và chi tiết nhất (gồm cả thời gian chính xác sự kiện xảy ra), ít được sử dụng ở mức người dùng cuối và là đầu vào để tổng hợp lên các bảng fact có mức tổng hợp cao hơn.

Bảng fact tổng hợp thường kỳ (Periodic snapshot fact table)

Đại diện cho một khung thời gian nhất định và sẽ lặp lại sau mỗi chu kỳ. Một số dạng thường gặp là tổng hợp theo ngày, theo tháng, theo năm.

Có 2 cách xây dựng dữ liệu cho bảng fact này:

  • Đợi đến cuối chu kỳ (thường là tháng) rồi tính một lần.
  • Duy trì và cập nhật bản ghi luỹ kế tháng, cộng dồn kết quả hàng ngày lại cho đến đầu tháng sau thì chốt tháng cũ và sinh ra bản ghi mới.

Bảng fact luỹ kế (Accumulating snapshot fact table)

Lưu trữ số liệu có thời gian không định trước, như doanh số của một sản phẩm từ khi ra đời cho đến thời điểm hiện tại (tiếp tục cập nhật trong tương lai)

Ghi dữ liệu vào Fact

Vì là nơi tập trung số lượng lớn bản ghi trong DW nên việc ghi dữ liệu vào fact không phải là việc đơn giản, cần phải được xử lý cẩn thận. Sau đây là một số vấn đề thường gặp khi ghi dữ liệu vào fact.

Indexing

Index rất hữu ích đối với query, nhưng ảnh hưởng tiêu cực đến việc ghi dữ liệu. Trong một số trường hợp, bảng dữ liệu có nhiều index làm chậm việc ghi đến mức có cảm giác cả tiến trình không hoạt động.

Cách xử lý: Xoá hết index trước khi ghi dữ liệu; ghi xong tạo lại index.

Partitioning

Partition cho phép bảng dữ liệu (và cả index) được chia thành các bảng dữ liệu nhỏ hơn về mặt vật lý. Phép chia này cho phép câu truy vấn có thể chạy đến đúng phân khu chứa dữ liệu cần thiét mà không cần tìm kiếm trên toàn bộ bảng dữ liệu. Nếu được xử lý tốt, partition giúp làm tăng hiệu năng truy vấn lên đáng kể, đặc biệt là các bảng fact lớn.

Partitioning thường trong suốt với người dùng, được vận hành với DBA. Kỹ thuật thông dụng nhất là partitioning theo trường thời gian (năm/quý/tháng/tuần/ngày). Ưu điểm của trường thời gian là luôn ổn định, được đinhj nghĩa sẵn nên chúng ta luôn biết được khoá thay thế sắp được sử dụng là gì để sử dụng. Sai lầm thường thấy là người thiết kế thêm một trường thời gian vào bản ghi fact và dùng trường đó để đánh partition. Nếu trường thời gian không xuất hiên trong câu truy vấn, partitioning là vô nghĩa. Vì vậy chỉ lảm partitioning vào trường thời gian được người dùng quan tâm, sử dụng.

Rollback log

Mặc định tất cả CSDL quan hệ đều hỗ trợ xử lý lỗi khi transaction thất bại. Hệ thống tra các bản ghi lỗi về trạng thái trước commit, bằng cách ghi nhận lại tất cả thao tác thay đổi dữ liệu. Khi có lỗi, DB đọc bản ghi log này và sửa chữa tất cả thao tác cập nhật chưa được commit. Việc commit một transaction là thông báo cho DB biết giao dịch đã thành công và các tác động phải được cập nhật vào cơ sở dữ liệu.

Rollback log, hay còn gọi là redo log, có ý nghĩa rất lớn trong hệ thống nghiệp vụ. Nhưng trong DW lại là ính năng gây phiền phức (vì tất cả giao dịch được xử lý bằng các luồng ETL), gây cản trờ việc ghi dữ liệu:

  • Dữ liệu được ghi vào DW bằng một tiến trình được giám sát kỹ càng – các luồng ETL.
  • Dữ liệu được ghi hàng loạt vào DW.
  • Nếu bị lỗi, người vận hành có thể dễ dàng khắc phụ và cho chạy lại tiến trình.

Ghi dữ liệu

Một số kỹ thuật khi ghi một lượng lớn dữ liệu vào DW:

  • Tách ghi dữ liệu cũ với cập nhật dữ liệu mới: Một số công cụ ETL cung cấp tính nằng cập nhật hoặc ghi mới (Tuy nhiên xử lý thực tế lại chậm chạp vì mỗi khi có bản ghi mới đều phải kiểm tra dữ liệu xem đã tồn tại chưa). Vì vậy không nên dùng tính năng này, thay vào đó tạo ra 2 luồng khác nhau:
    • Cập nhật trước
    • Sau đó ghi dữ liệu mới.
  • Dùng công cụ ghi dữ liệu của DW: Các hệ quản trị CSDL thường cung cấp công cụ ghi dữ liệu, áp dụng nhiều kỹ thuật độc quyền nên tốc độ ghi nhanh hơn dùng câu lệnh INSERT.
  • Chia luồng ghi dữ liệu chạy song song: khi phải ghi số lượng lớn bản ghi vào DW nên chia nhỏ khối dữ liệu ra nhiều phần, cho nhiều luồng ETL chạy song song.
  • Hạn chế sửa đổi: Chạy lệnh UPDATE trong DW thường chậm chạp và khó theo dõi, nên thường phải sử dụng các kỹ thuật khác. Một kỹ thuật thông dụng là xoá bản ghi cũ cần cập nhật rồi ghi lại chính bản ghi đó với thông tin đã được sửa chữa.
  • Tạo bảng tổng hợp bên ngoài DB: các phép sắp xếp, giao, tổng hợp dữ liệu nên được thưc hiện bên ngoài DW để đạt hiệu quả cao hơn. Nguyên nhân là tài nguyên cho DW thường có hạn và khó nâng cấp (theo chiều dọc: RAM, CPU; hay chiều ngang: thêm server), trong khi đó ETL có thể triển khai trên nhiều server khác nhau để chia sẻ tải.
    • Tuy nhiên, Hiện nay với sự phát triển của điện toán đám mây, chúng ta có thể nâng cấp tuỳ theo nhu cầu sử dụng.

Tham khảo:

Data Warehouse và các thiết kế Data Warehouse – Lưu Đức Thắng.

Comments
←Nhập môn Data Warehouse] Quy luậ... Chatbot Căn bản] Tổng quan ...→