Thiết kế CSDL và Denormalizing để tối ưu hiệu năng (Phần 3)

Trong phần này mình sẽ trình bày chi tiết về các kĩ thuật denormalize. Hiện tại thì tại công ty mình làm cũng đang áp dụng 1 trong những cách này tuy nhiên thì mình thấy hơi lạm dụng quá đà. Chi tiết thì mình sẽ trình bày thêm về việc lạm dụng này. Còn đây là 3 cách hay dùng:

  • Thêm các cột dư thừa (redundant columns)
  • Thêm cột derived columns (cái này mình chả biết dịch là gì :3)
  • Gộp bảng (Collapsing Tables)

Ngoài những cách này thì còn có cả duplicate hoặc split (nhân đôi hoặc tách) các bảng để tối ưu. Mặc dù thì đây không phải là denormalize CSDL tuy nhiên cũng có tác dụng tương tự như 3 cách trên cũng như việc maintain dữ liệu

Thêm cột dư thừa

Bạn có thể thêm các cột không cần thiết để loại bỏ việc thực hiện các câu lệnh JOIN.

Ví dụ:

Ta có 2 bảng Author và Title như hình dưới. Nếu ta muốn lấy ra tên tác giả thì cần thực hiện lệnh JOIN

SELECT dbo.TitleAuthor.*, dbo.Author.LastName AS Expr1, dbo.TitleAuthor.TitleId AS Expr2, dbo.TitleAuthor.AuthorId AS Expr3
FROM dbo.Author INNER JOIN
dbo.TitleAuthor ON dbo.Author.AuthorId = dbo.TitleAuthor.AuthorId

Untitled.png

Nếu ta thiết kế dư thừa thêm 1 cột LastName trong bảng TitleAuthor thì không cần phải JOIN vào bảng Author nữa

Untitled.png

SELECT dbo.TitleAuthor.*
FROM dbo.TitleAuthor

 

Việc bổ sung các cột dư thừa này loại bỏ được việc JOIN khi truy vấn tuy nhiên nó gặp các vấn đề đó là

  • Cần thêm dung lượng ổ đĩa vì cột LastName đã bị duplicate
  • Yêu cầu phải maitain dữ liệu cho cột dữ liệu mới. Mọi thay đổi phải thực hiện ở cả 2 bảng và có thể xảy ra ở nhiều dòng trên các bảng

Thêm cột derived

Tương tự như như việc bổ sung các cột dư thừa thì bổ sung các cột derived cũng làm giảm việc thực hiện câu lệnh JOIN và làm giảm thời gian để tính toán các giá trị cần tổng hợp từ nhiều bảng.

Untitled.png

Bây giờ với 2 bảng Title và bảng TitleAuthor ta cần tính toán số lượng sách bán ra được thì cần thực hiện câu lệnh

SELECT t.Title, sum(ta.quantity)
FROM Title t
join TitleAuthor ta ON t.TitleId = ta.TitleId
GROUP BY ta.TitleId, t.Title

Còn bây giờ nếu ta thiết kế thêm 1 cột SumQuantiy ở trong bảng Title thì chỉ cần truy vấn ra ngay là được

SELECT Title, SumQuantity FROM Title

Untitled.png

Việc thực hiện này cũng có các vấn đề tương tự với việc thêm các cột dư thừa

Gộp bảng

Trong nhiều trường hợp thì người dùng cần xem full dữ liệu từ cả 2 bảng thì việc gộp bảng có thể làm tăng hiệu năng đáng kể bằng việc loại bỏ câu lệnh JOIN

Untitled.png

Ví dụ như 2 bảng Author và Copy ta cần lấy ra toàn bộ nhưng bây giờ ta chỉ cần 1 bảng như sau là được

Untitled.png

Việc gộp bảng làm  loại bỏ câu lệnh JOIN, nhưng  lại làm mất đi sự tách biệt của dữ liệu. Nếu người dùng vẫn cần truy vấn vào 1 vài cột dữ liệu ở 2 bảng, thì ta nên lấy các cột cần thiết ra thôi hoặc sử dụng view

Duplicate bảng

Nếu 1 số người dùng chỉ truy cập vào 1 phần dữ liệu của bảng như bản NewAuthor chẳng hạn thì bản có thể sao chép dữ liệu ra các bảng con khác

Untitled

Việc duplicate bảng này làm giảm thiểu việc tranh chấp dữ liệu nhưng nó đòi hỏi bạn phải quản lý dữ liệu thật cẩn thận để tránh việc dư thừa quá nhiều dữ liệu

Tách bảng

Đôi khi thì việc tách các bảng được chuẩn hóa  có thể cải thiện hiệu suất cho ứng dụng của bạn đáng kể. Bạn có thể chia bảng trong hai cách:

  • Theo chiều ngang (horizontally), bằng cách tách các dòng dữ liệu thành hai bảng riêng biệt. Điều này phụ thuộc vào giá trị của dữ liệu ở 1 hoặc nhiều cột
  • Theo chiều dọc (vertically), tách 1 bảng nhiều cột thành các nhiều bảng mà mỗi bảng chứa 1 khóa và 1 số cột từ bảng cha

Việc tách bảng bất cứ theo chiều nào cũng đều làm tăng độ phức tạp cho ứng dụng của bạn thế nên bạn cần phải rất lưu ý khi áp dụng nếu không thì đừng nên áp dụng :))

Tách bảng chiều ngang

Ta áp dụng cách này trong các trường hợp sau

  • Đó là bảng có nhiều dữ liệu và cần giảm số lượng index trong câu truy vấn
  • Bảng dữ liệu đại loại như dữ liệu lịch sử so với dữ liệu hiện tại, bảng dữ liệu địa lý vùng.. Loại bảng  này thường thì đối với dữ liệu lịch sử thì ít khi truy cập và bạn có nhu cầu cao cho việc truy vấn dữ liệu hiện tại

Nói chung, việc tách bảng theo chiều nganh làm nâng tầm đầu óc của bạn nên rất nhiều vì cần phải xử lý phức tạp hơn khi lập trình và quản lý :d.

Nó đòi hỏi  bạn phải liên tục nghĩ các tên bảng khác nhau để đặt tên (có lẽ sẽ giúp bạn việc đặt tên con mình sau này =)) ) tùy thuộc vào giá trị trong các bảng.

Đối với ví dụ trên thì đối với bảng Author bạn có thể tách thành 2 bảng là InactiveAuthor và ActiveAuthor; và bạn hầu như chỉ truy cập vào bảng ActiveAuthor

Tách bảng chiều dọc

Sử dụng tách bảng theo chiều dọc trong các trường hợp sau đây:

  • Một số cột được truy cập thường xuyên hơn so với các cột khác.
  • Bảng này có các hàng chứa nhiều dữ liệu, và việc chia bảng này làm giảm số lượng các page mà cần phải được read.

Việc tách bảng theo chiều dọc thì hay được áp dụng hơn trong thực tế. Khi một bảng chứa các cột rất dài mà không phải truy cập thường xuyên, thì việc đưa chúng trong một bảng riêng biệt rất có thể đẩy nhanh tốc độ truy vấn dữ liệu

Untitled.png

Như bảng Author ta tách thành 2 bảng: bảng Author_Frequent sẽ chứa các cột hay truy cập đó là LastName và Family còn bảng Author_Infrequent sẽ chứa 2 cột ít truy cập hơn đó là Phone, City

CHỐT

Viêt bài mất cả tiếng đồng hồ đến giờ cuối cùng cũng xong, bạn nó có vấn đề gì thì cứ hỏi nhé 😀

Trong phần tiếp theo là phần cuối của serie này mình sẽ trình bày nốt và cách quản lý dữ liệu khi thiết kế denormalize. :3 cũng như các lỗi khi thiết kế mà mình đang gặp ở công ty mình mình xin chia sẻ để mọi người tránh

Advertisements

6 thoughts on “Thiết kế CSDL và Denormalizing để tối ưu hiệu năng (Phần 3)

  1. Bạn đang tìm kênh đầu tư hiệu quả và an toàn Việc
    tiếp theo chính là lập dự toán chi phí xây dựng
    nhà ở để xác định nguồn vốn tài chính mà gia chủ mang đi đầu tư..… Chúng tôi sẽ tư vấn giải
    pháp giúp bạn tiết kiêm chi phí theo tiêu chuẩn xây
    dựng nhà ở của bộ xây dựng công ty nguyễn Hoàn Bước thứ 3 cũng là bước cuối
    cùng trong trình tự xây nhà là thi công và hoàn công.
    Hầu hết việc này được giao cho đơn vị nhà
    thầu hoàn tất…… đống đa hà nội những lời nói
    xuôi tai và chắc như đinh đóng cột nhưng
    sau đó là khiến bạn mất thời gian và tiền bạc do thiếu tính minh
    bạch và rõ ràng ngay từ lúc ký kết.,.…
    cty xây dựng

    Like

  2. công ty xây dựng nhà giá rẻ Việc tiếp theo
    chính là lập dự toán chi phí xây dựng nhà ở để
    xác định nguồn vốn tài chính mà gia chủ mang đi
    đầu tư..… công ty của tôi sẽ giúp
    bạn xây nhà giá rẻ theo tiêu chuẩn xây dựng nhà
    ở của bộ xây dựng Công ty xây dựng Hòa Hưng Phát Bước thứ 3 cũng là bước cuối cùng trong trình tự xây
    nhà là thi công và hoàn công. Hầu hết việc này
    được giao cho đơn vị nhà thầu hoàn tất……

    Củ chi những lời nói xuôi tai và chắc như đinh đóng cột nhưng sau đó là khiến bạn mất thời gian và tiền bạc do thiếu tính minh bạch và rõ ràng
    ngay từ lúc ký kết.,.… công ty thi công xây dựng

    Like

  3. bạn muốn tư vấn về xây phòng trọ Tính hiệu quả
    và tiện lợi khi bạn chọn dịch vụ xây nhà trọn gói đó là bạn chỉ cần mất thời gian đầu làm việc với nhà thầu một
    cách rõ ràng và minh bạch nhất có thể,..… Chúng tôi sẽ xây
    nhà miễn phí cho bạn sau đó bạn an tâm đi làm việc riêng của bạn và chờ ngày nhận nhà.
    Bạn có thấy tuyệt vời không? Công ty
    xây dựng Hòa Hưng Phát uy nhiên, với một thị trường xây dựng hỗn độn thì việc tìm
    kiếm một nhà thầu uy tín khiến bạn đau đầu lo lắng…..
    Thủ Đức những lời nói xuôi tai và chắc như đinh đóng cột
    nhưng sau đó là khiến bạn mất thời gian và tiền bạc do thiếu tính minh bạch và rõ ràng ngay từ lúc ký kết.,.… công ty
    xây dựng uy tín
    xay nha tro

    Like

  4. Bạn muốn đầu tư vào phòng trọ Việc tiếp theo chính là lập dự
    toán chi phí xây dựng nhà ở để xác định nguồn vốn tài chính mà gia chủ
    mang đi đầu tư..… khai thác hết tiềm năng nhà trọ
    theo tiêu chuẩn xây dựng nhà ở của bộ xây dựng Công ty xây
    dựng nhà trọn gói Hữu Thắng Bước thứ 3 cũng là bước cuối
    cùng trong trình tự xây nhà là thi công và hoàn công.

    Hầu hết việc này được giao cho đơn vị
    nhà thầu hoàn tất…… Kiên Giang những lời nói xuôi tai
    và chắc như đinh đóng cột nhưng sau
    đó là khiến bạn mất thời gian và tiền bạc do thiếu tính minh bạch và rõ ràng ngay
    từ lúc ký kết.,.… công xây dựng nhà

    Like

  5. Bạn muốn 1 giải pháp hiệu quả cho ngôi nhà của bạn Việc tiếp theo chính là lập dự toán chi phí xây dựng nhà ở để xác định nguồn vốn tài chính mà
    gia chủ mang đi đầu tư..… Chúng tôi sẽ hổ trợ
    giúp bạn xây nhà theo tiêu chuẩn xây dựng nhà ở của
    bộ xây dựng Công ty xây dựng Đại nghĩa Hồng Bước thứ 3 cũng là bước cuối cùng trong trình tự xây nhà là
    thi công và hoàn công. Hầu hết việc này được giao cho đơn vị nhà thầu hoàn tất……

    Bến phà cần thơ củ chi những lời nói xuôi tai
    và chắc như đinh đóng cột nhưng sau đó là khiến bạn mất thời gian và tiền bạc do
    thiếu tính minh bạch và rõ ràng ngay từ lúc
    ký kết.,.… Chúng tôi khảo sát và báo giá họp
    lý cho quý gia chủ

    Like

  6. Bạn muốn đầu tư vào phòng trọ Việc tiếp theo chính là lập dự
    toán chi phí xây dựng nhà ở để xác
    định nguồn vốn tài chính mà gia chủ mang đi
    đầu tư..… Chúng tôi sẽ hổ trợ giúp
    bạn xây nhà theo tiêu chuẩn xây dựng nhà ở của
    bộ xây dựng Công ty trách nhiệm
    hữu hạn xây dựng nhà trọn gói
    Bước thứ 3 cũng là bước cuối cùng trong trình tự xây nhà là
    thi công và hoàn công. Hầu hết việc này được giao cho
    đơn vị nhà thầu hoàn tất…… Quảng châu trung
    quốc những lời nói xuôi tai và chắc như đinh đóng
    cột nhưng sau đó là khiến bạn mất thời gian và tiền bạc do thiếu tính minh bạch và rõ ràng ngay từ lúc
    ký kết.,.… công ty xây dựng nhà ở tphcm

    Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s