Hello anh chị em, tui nhận thấy nhiều bạn mới chuyển sang data đều rất bỡ ngỡ về Data Warehouse, nhất là các bạn newbie. Ở trên trường, tui cũng như các bạn đều được dạy về Database như MySQL, Microsoft SQL hoặc MongoDB. Tuy nhiên, khi học Data thì mình lại có khái niệm mới là Data Warehouse, cũng là một dạng lưu trữ dữ liệu.

Vậy 2 cái này khác nhau như thế nào? Để tui làm rõ cho mọi người nha.

Trước khi đi vào chi tiết, tui muốn quy ước nhẹ với các bạn, mình đang bàn về khái niệm Database và Data Warehouse. Còn MySQL, Microsoft SQL, MongoDB hoặc Hadoop HDFS mà mọi người thường nghe nhắc đến đều là công nghệ để ứng dụng cho hai khái niệm trên.

Vậy Database là gì?

Theo lý thuyết hồi đi học:

Database (cơ sở dữ liệu) là một tập hợp những data (dữ liệu) có liên quan với nhau. Database được duy trì dưới dạng một tập hợp các tập tin trong hệ điều hành hay được lưu trữ trong các hệ quản trị cơ sở dữ liệu.

Nói đơn giản theo tui, Database là một nơi để lưu trữ dữ liệu. Những dữ liệu lưu trữ bên trong Database dùng cho các ứng dụng web, mobile hoặc API như thông tin người dùng, sản phẩm, log hệ thống…

Database có thể được xây dựng bằng rất nhiều công nghệ khác nhau như MySQL, PostgreSQL, MongoDB… thậm chí file .txt, .log cũng có thể dùng như một dạng Database.

Data Warehouse khác như thế nào ?

Data Warehouse (kho dữ liệu) là khái niệm chỉ một nơi dùng để lưu trữ dữ liệu được thu thập ở nhiều nguồn khác nhau. Dữ liệu lưu trữ trong Data Warehouse chủ yếu dùng để làm Report (báo cáo) hoặc Analysis (phân tích).

Để làm rõ hơn, tui lấy ví dụ nho nhỏ về một trang web thương mại điện tử giống giống như tiki, lazada hoặc shopee

  • Đa phần anh chị em quen thuộc với những thông tin như sản phẩm, người mua hàng, hóa đơn thanh toán, đánh giá, bình luận… Tất cả những dữ liệu đó đều sẽ được lưu vào Database.
  • Trong trường hợp, sếp muốn có một bản báo cáo hàng tháng về doanh thu, tồn kho của một ngành hàng cụ thể thì Data Warehouse sẽ phát huy tác dụng. Mình sẽ trích xuất data từ bên Database, xử lý biến đổi những data đó và lưu trữ vào Data Warehouse.
  • Sau khi lưu trữ vào Data Warehouse, team Analyst có thể dễ dàng tạo báo cáo từ những dữ liệu đó bằng nhiều công cụ khác nhau và gửi cho sếp. Vì vậy bước xử lý phải chính xác, phù hợp để data có thể dễ dàng tạo ra Report.

Bởi vì công việc này thực hiện hàng tháng, nên chúng ta cần tự động toàn bộ quy trình, quy trình này gọi là ETL (Extract - Transform - Load). Với việc data được lưu trữ như vậy, tui có thể tái sử dụng Data để tạo nhiều Report khác nhau tùy theo yêu cầu của sếp.

Có nhiều cách khác nhau để xây dựng Data Warehouse, tùy theo nhu cầu của công ty mà tui sẽ lựa chọn giải pháp phù hợp. Với công ty nhỏ, data ít thì có thể sử dụng MySQL hoặc PostgreSQL. Còn dữ liệu nhiều lên đến hàng trăm Gigabytes mỗi tháng, một năm có thể vài Terabytes thì có thể sử dụng Big Data như Hadoop HDFS hoặc giải pháp trên cloud như Amazon S3, Azure Blob hay Google Storage.

Sau khi chọn được giải pháp tối ưu, việc thiết kế Data Warehouse cũng là một vấn đề lớn. Có 2 mô hình thiết kế nổi tiếng nhất là Star Schema và Snowflake, mọi người thể tìm hiểu thêm qua Google hoặc tham khảo cuốn sách nổi tiếng “The Data Warehouse Toolkit” của Ralph Kimball.

Mở rộng (Datalake và Data Mart)

Ngoài Data Warehouse, hiện nay dân gian còn lưu truyền 2 khái niệm khác là Datalake (dịch là hồ dữ liệu thì kì quá nên mọi người đừng dịch nha) và Data Mart.

Datalake là một kho lưu trữ trung tâm chứa Raw Data (dữ liệu thô). Dữ liệu bên trong Datalake là dữ liệu hoàn toàn chưa qua xử lý.

Tại sao mình lại cần Datalake ?

  • Datalake giúp chúng ta đồng bộ dữ liệu về một nguồn, bao gồm cả structure data và unstructure data (cấu trúc và không cấu trúc). Ví dụ như ngoài những thông tin sản phẩm, hóa đơn.. Datalake còn lưu trữ cả hình ảnh của sản phẩm nữa.
  • Toàn bộ Data sẽ được lưu trữ trong thời gian lâu dài và không giới hạn dung lượng.
  • Nhờ vào việc đồng bộ dữ liệu, tui không cần lo lắng về việc lỡ tay làm gì đó ảnh hưởng đến toàn hệ thống như làm việc với Database.

Áp dụng vào bên trên, khi lấy data từ Database và xử lý để lưu vào Data Warehouse, chẳng may trong đó có thông tin mà mình không được phép truy cập, hoặc câu Query quá phức tạp dẫn đến hệ thống quá tải, điều đó sẽ ảnh hưởng đến website và mobile app. Với Datalake vấn đề này sẽ được khắc phục. Theo đúng mô hình thì quy trình ETL bên trên phải từ Database → Datalake → Data Warehouse.

Vì vậy, Datalake là một việc cần thiết khi chúng ta xây dựng hệ thống Data. Thông thường, Data sẽ được tự động copy từ Database và nhiều nguồn khác vào Datalake, để sẵn trong đó, có thể mỗi ngày một lần. Datalake sẽ chứa data ở dạng file như parquet, csv, txt, json… nên các công nghệ sử dụng có thể kể đến là Hadoop HDFS, Amazon S3, Azure Blob hoặc Google Storage (tương tự như Data Warehouse).

Nói thêm một chút về Data Mart, đây là một mô hình thu nhỏ của Data Warehouse. Ở một số công ty thì nhiều Data Mart sẽ tạo thành Data Warehouse. Sự khác biệt duy nhất là Data Mart chứa dữ liệu để giải quyết một vấn đề business cụ thể, ví dụ như dữ liệu cho báo cáo tài chính. Data Mart có thể là một table hoặc một schema trong hệ thống.

Để kết luận lại hoàn chỉnh hệ thống, tui vẽ cái hình dưới đây.

database-datalake-datawarehouse

Dữ liệu sẽ được thu thập từ nhiều nguồn khác nhau như database, files, hình ảnh.. và lưu vào (ingestion) Datalake, các ETL jobs sẽ xử lý dữ liệu thô và lưu trữ vào Data Warehouse hoặc Data Mart, cuối cùng là tạo ra báo cáo.

Khái niệm là vậy thôi, nhưng thực tế khi làm việc, những lúc cần tạo ra báo cáo đơn giản, tui có thể tạo trực tiếp từ Datalake mà không cần lưu trữ vào Data Warehouse.

Hy vọng qua bài này, các bạn newbie, những bạn nào muốn chuyển sang data sẽ không còn bỡ ngỡ với Data Warehouse và Datalake nữa. Nếu các bạn thấy sai sót chỗ nào, để lại comment cho tui biết nha.