Ghi chú về star schema và ứng dụng trong BigData
Big Data
6
White

Bùi Hồng Hà viết ngày 05/11/2015

Giới thiệu

Công ty mình có một vấn đề (BigData) cần giải quyết như sau:

"Trong số người dùng đang bình luận vào 1 video (bình luận là thời gian thực), có bao nhiêu người dùng là người dùng premium (trả tiền dịch vụ). Người dùng được phân khúc ra sao: tuổi, vị trí địa lý, giới tính ..."

Nhìn từ việc truy vấn dữ liệu thì bài toán này có vẻ không khó vì đơn giản là dùng 1 query join giữa 2 schema người dùngbình luận. Tuy vậy khi dữ liệu người dùng có vẻ lớn: khoảng 20,000,000 người dùng, số lượng bình luận đến trên 1s là khoảng vài ngàn đến vài chục ngàn, thì truy vấn trả về kết quả hợp lý có vẻ không đơn giản.

Mình cũng không hiểu vấn đề lớn đến đâu, nhưng thấy công ty tư vấn giải pháp tư vấn một phương án mà mình thấy sếp mình gật gù nên mình note lại đây đề phòng phải tham khảo sau này.

Star Schema

alt text

Star Schema là một từ khoá mà bên tư vấn đưa ra. Tìm hiểu trên mạng thì thấy rằng đây không phải là khái niệm mới mà thật ra là một khái niệm rất đơn giản và cơ bản trong kiến trúc data warehouse.

Cấu trúc của Star Schema là Schema trong cơ sở dữ liệu sẽ không được chuẩn hoá theo các bước chuẩn hoá (1NF, 2NF, 3NF, 4NF) như của cơ sở dữ liệu quan hệ mà sẽ được tổ chức dưới dạng các table như hình vẽ. Ở trung tâm của schema là 1 bảng gọi là bảng Fact bao gồm các dữ liệu cân đong đo đếm được của một business nào đó. Các thông tin mô tả cho các Fact sẽ được tập hợp và lưu trữ ở các bảng dữ liệu khác (trên hình là các bảng Dimension). Một ví dụ của cách thiết kế này là (copy từ Wikipedia):

  • Bảng Fact lưu trữ các thông tin giá cả, doanh số, số lượng, thời gian, tốc độ ...
  • Bảng Dimension sẽ bao gồm thông tin như: chủng loại sản phẩm, tên người bán hàng, cấu trúc địa lý v.v của chuỗi cung ứng.

Lợi thế của Star Schema là tính không được chuẩn hoá và do vậy có các lợi thế sau:

  • Query sẽ đơn giản hơn. Các thông tin đo đạc và các thông tin mô tả có thể được truy vấn bằng 1 query join đơn giản.
  • Đơn giản hoá quá trình làm báo cáo của business. Các thông tin metrics đếu đã được tập trung ở bảng Facts. Nếu schema được thiết kế thao dạng cơ sở dữ liệu quan hệ, thông tin metrics có thể sẽ phải tổng hợp qua nhiều bước join hơn.

Điểm bất lợi của star schem (theo wiki) là tính toàn vẹn của dữ liệu. Dữ liệu của bảng Facts không được "chèn" theo dữ liệu của các bảng Dimension mà thường sẽ dược chèn theo 1 batch. Ngoài ra schema theo cơ sở dữ liệu quan hệ có thể hỗ trợ tất cả các thể loại báo cáo miễn là báo cáo yêu cầu nằm trong thiết kế mô hình dữ liệu. Star schema thì giống kiểu cách giải quyết cho một bài toán cụ thể, khi các con số cần trong báo cáo đều đã được biết trước.

Ví dụ query trong Star Schema thì như sau (cũng chép từ wiki ra):

SELECT
    P.Brand,
    S.Country AS Countries,
    SUM(F.Units_Sold)

FROM Fact_Sales F
INNER JOIN Dim_Date D    ON (F.Date_Id = D.Id)
INNER JOIN Dim_Store S   ON (F.Store_Id = S.Id)
INNER JOIN Dim_Product P ON (F.Product_Id = P.Id)

WHERE D.Year = 1997 AND  P.Product_Category = 'tv'

GROUP BY
    P.Brand,
    S.Country

Áp dụng Star schema giải quyết vấn đề thế nào?

Bên tư vấn đưa ra giải pháp áp dụng star schema như sau:

Tổ chức schema dưới dạng star schema như trên ở đó Facts table là các con số về lượt bình luận v.v có thể lấy ra được nhanh chóng dùng map-reduce và dữ liệu lưu trên hadoop. Tổ chức dữ liệu người dùng dưới một Dimension và lưu Dimension này lên HBase. Nếu dữ liệu vừa đủ lưu ở các region server trên HBase, tốc độ query rất cao. Nếu dữ liệu không năm ở trong region, do khả năng ưu việt của HBase ở random access, nên tốc độ query thông tin người dùng khi có ID là rất cao.

Do HBase và Map-Reduce Hadoop được thiết kế với tính mở rộng, nên với bài toán này, kiến trúc này có thể giúp mở rộng dễ dàng khi số lượng dữ liệu tăng lên.

Ngoài ra trong trường hợp mà ta không những cần Random Access mà còn cần cả Sequential Access (ví dụ như khi truy suất dữ liệu theo trục thời gian), Cloudera gần đây có sản phẩm gọi là Kudu cho phép hỗ trợ cả 2 loại truy xuất này.

alt text

Kết luận

Star Schema là khái niệm không mới và là cách giải quyết ad-hoc cho một số bài toán phân tích và làm báo cáo trong data warehouse. Bằng cách ứng dụng Star Schema và áp dụng các giải pháp mã nguồn mở (Hadoop, Hbase, Kudu, Parquet...), nhiều trường hợp ta có ngay cách giải quyết cho bài toán bigdata với chi phí hoàn toàn hợp lý. Ở bài viết này, mình viết lại 1 case-study thực tế cho kết luận trên (học lỏm được từ tư vấn)

Tham khảo

  1. About Kudu
  2. Kudu
  3. Parquet
  4. Các tài liệu trên Wikipedia và Google.
Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Bùi Hồng Hà

59 bài viết.
287 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
75 8
Bài viết tổng hợp cơ chế hoạt động của https Chút ít về chữ ký điện tử Chữ ký điện tử là cơ chế bao gồm 3 thuật toán: Thuật toán chọn một khóa...
Bùi Hồng Hà viết 3 năm trước
75 8
White
44 7
Giới thiệu Gần đây thấy bản thân chém gió rất nhiều về MapReduce, Hadoop v.v nhưng chưa thấy có bài viết nào tổng hợp + giải thích cụ thể về MapRe...
Bùi Hồng Hà viết hơn 2 năm trước
44 7
White
35 1
Giới thiệu Google là một công ty dẫn đầu về phần mềm xử lý Big Data. Hầu hết các phần mềm xử lý dữ liệu như Hadoop đều có nguồn gốc ý tưởng từ Goo...
Bùi Hồng Hà viết hơn 2 năm trước
35 1
Bài viết liên quan
White
15 0
Lang thang hacker news tìm được một phần nhỏ (Link) của một bác ở Anh tổng hợp về stack mà google đã tạo và sử dụng. Chi tiết về các stack được tổ...
cpplover viết 3 năm trước
15 0
White
35 1
Giới thiệu Google là một công ty dẫn đầu về phần mềm xử lý Big Data. Hầu hết các phần mềm xử lý dữ liệu như Hadoop đều có nguồn gốc ý tưởng từ Goo...
Bùi Hồng Hà viết hơn 2 năm trước
35 1
White
44 7
Giới thiệu Gần đây thấy bản thân chém gió rất nhiều về MapReduce, Hadoop v.v nhưng chưa thấy có bài viết nào tổng hợp + giải thích cụ thể về MapRe...
Bùi Hồng Hà viết hơn 2 năm trước
44 7
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
59 bài viết.
287 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!