Phi chuẩn hóa dữ liệu

Một phần của tài liệu Xây dựng hệ quản trị đào tạo tích hợp mạng xã hội (Trang 121 - 124)

5 Phân tích và thiết kế hệ thống

6.2.2 Phi chuẩn hóa dữ liệu

Chuẩn hóa dữ liệu là một kỹ thuật trong cơ sở dữ liệu nhằm loại bỏ dư thừa và loại bỏ các dị thường (anomaly) khi cập nhật và xóa dữ liệu. Vấn đề dư thừa khơng cịn là vấn đề quan trọng hiện nay khi mà bộ nhớ khơng cịn là một tài nguyên khan hiếm. Tuy nhiên, loại bỏ dị thường vẫn là một lợi ích quan trọng mà chuẩn hóa dữ liệu mang lại. Dị thường xảy ra khi dữ liệu được lặp lại ở nhiều chỗ khác nhau trong cơ sở dữ liệu. Khi đó, việc cập nhật nếu khơng cẩn thận chỉ cập nhật dữ liệu ở một nơi sẽ dẫn đến sự thiếu tính nhất quán trong hệ thống.

Một ví dụ thực tiễn cho việc này đã được nhóm làm đề tài rút ra được, đó chính là sự có mặt của các hệ cơ sở dữ liệu phụ như ElasticSearch (cơng cụ mà nhóm sử dụng để hiện thực chức năng tìm kiếm). Rõ ràng, chúng ta phải lưu trữ lại các thông tin của thực thể trong cơ sở dữ liệu chính vào cơ sở dữ liệu để phục vụ mục đích tìm kiếm. Việc cập nhật này có thể được thực hiện đồng bộ, bất đồng bộ, hoặc thông qua một tác vụ lặp đi lặp lại. Dù cho cơ chế có như thế nào, logic cập nhật dữ liệu từ chỗ đơn giản thông qua một tác vụ UPDATE SQL thông thường trở nên phức tạp hơn rất nhiều. Tồi tệ hơn, các hệ cơ sở dữ liệu NoSQL như ElasticSearch thường khơng có khái niệm quan hệ. Do đó để có thể biểu diễn được mối quan hệ 1..N hay M..N trong sơ đồ ERD, ta thường phải sử dụng cơ chế lưu trữ danh sách các đối tượng lồng nhau (nested objects). Giả sử ta có một thơng tin mapping của trường dữ liệu lưu trữ danh sách thành viên của index Nhóm (Group) như sau:

Hình 32: Lưu trữ trường thành viêntrong index của thực thể group trong index của thực thể group

Khi tên của người dùng được cập nhật ở CSDL Postgres, chúng ta phải vào ElasticSearch tìm kiếm tồn bộ các nhóm có thành viên là người dùng trên, và cập nhật tên của đối tượng trong danh sách đối tượng lồng nhau members của từng nhóm có id trùng với id của người dùng. Do vậy, để hạn chế độ phức tạp trong việc hiện thực và quản lý hệ thống, chúng ta cần giữ cho mức độ lặp dữ liệu ở mức tối thiểu và chỉ sử dụng trong trường hợp cần thiết (như ở ví dụ trên, ta lưu thêm trường tên của thành viên trong nhóm để hiện thực nhu cầu lọc kết quả tìm kiếm nhóm theo tên của thành viên).

Tuy vậy, điều này khơng có nghĩa là ta ln ln phải tn thủ quy tắc chuẩn hóa dữ liệu trong việc thiết kế cơ sở dữ liệu có quan hệ. Nhược điểm của việc chuẩn hóa dữ liệu đó chính là sự đánh đổi về hiệu năng trong tác vụ đọc thơng tin. Một ví dụ được rút ra trong hệ thống chính là việc hiển thị danh sách các đối tượng của thực thể có hiện thực phân trang và sắp xếp có thứ tự.

Hình 33: Mối quan hệ giữa các thực thể Post –Vote - Comment Vote - Comment

Trong tác vụ lấy danh sách thông tin POST sắp xếp theo tổng số vote, ta phải thực hiện thêm một lần JOIN giữa post và vote để lấy ra được số lượng vote rồi mới sắp xếp và phân trang. Hiệu năng khi đó sẽ giảm xuống khơng chỉ vì có sự xuất hiện thêm của tác vụ JOIN mà

cịn vì ta khơng thể đánh index để tăng hiệu năng (nếu giả sử ta gặp phải vấn đề hiệu năng trong tương lai). Nếu chúng ta tạo một trường voteCount trong post lưu trữ số lượng vote trong post thì ta có thể đánh index vào trường này và tăng hiệu năng. Một ích lợi nữa của cách làm này đó đó là làm giảm độ phức tạp cho câu query. Giả sử ta muốn lấy thêm danh sách comment của từng bài post thì ta có thể viết được một câu query đơn giản là: SELECT * FROM post INNER JOIN comment … và lấy được cả số lượng post và comment cùng một lúc. Cách làm ngây thơ đó chính là join cả ba bảng và vừa đếm số lượng vote, vừa lấy thông tin comment trong cùng một câu query. Tuy nhiên, phép join như trên sẽ tạo ra tích Descartes giữa comment và vote, khiến cho việc thông tin comment bị lặp lại khi mapping lên application logic.

Nhóm làm đề tài cũng sử dụng kỹ thuật phi chuẩn hóa dữ liệu để hiện thực chức năng phân tích và hiển thị báo cáo đến người dùng. Đối với chức năng này, ta cần lưu trữ lịch sử các sự kiện và hoạt động cần thiết trong từng đơn vị thời gian xác định để có thể hiển thị báo cáo thống kê một cách linh hoạt: hiển thị thông tin theo nhiều chiều dữ liệu (dimension) và, với mỗi chiều dữ liệu, theo các khoảng thời gian tùy ý.

Như vậy, nhóm làm đề tài phân tích và thiết kế sơ đồ ERD cho tính năng báo cáo thống kê hoạt động của Nhóm như sau:

Hình 34: Thiết kế ERD cho tínhnăng hiển thị báo cáo trong Nhóm năng hiển thị báo cáo trong Nhóm

Thiết kế này được nhóm làm đề tài lấy cảm hứng từ mơ hình Star schema thường được sử dụng để phát triển kho dữ liệu (data warehouse). Mỗi một thực thể yếu có quan hệ với thực thể Group có thể được xem như là một chiều dữ liệu của Group, lưu trữ các thông tin hoạt động của Nhóm theo thời gian. Ví dụ, thực thể Group Engagement lưu trữ tổng số lượng post,

comment và vote của tồn bộ thành viên trong nhóm theo từng ngày. Việc thu thập thông tin được thực hiện thông qua việc chạy cron job ngầm ở phía server. Do đó, thời gian thu thập thơng tin (theo ngày) được chọn làm khóa yếu cho thực thể này. Việc lưu trữ như trên cho phép người dùng có thể lọc theo thời gian và biết được tổng số post, comment và vote trong bất cứ khoảng thời gian nào dựa trên hàm tổng hợp SUM. Các thực thể yếu trên cịn có tên gọi khác là dimension table, để phân biệt với các thực thể chính là fact table. Trong trường hợp này, phi chuẩn hóa dữ liệu thực sự cần thiết để đảm bảo hiệu năng cũng như tính đơn giản khi viết các câu lệnh query truy xuất thông tin thống kê theo thời gian.

Một phần của tài liệu Xây dựng hệ quản trị đào tạo tích hợp mạng xã hội (Trang 121 - 124)

Tải bản đầy đủ (PDF)

(185 trang)