01/10/2018, 00:27
Như thế nào là 1 database tối ưu
Em có 1 chút băn khoăn về việc tạo database tối ưu và cách tối ưu database ví dụ như em muốn tạo 1 bảng comment có lưu thông tin user + thời gian + nội dung
cấu trúc bảng comment như sau
comment
+ comment_id
+ user_id
+ post_id
+ content
+ data_time
....
user
+ user_id
+ user_name
+ user_id_string
+ user_extra
...
post
+ post_id
+ post_extra
....
mỗi lần comment sẽ add thêm 1 record vào bảng comment sau 1 thời gian giả sử mình có rất nhiều post mỗi post thì sẽ rất nhiều record dẫn tới query rất chậm .
Không biết có cách nào cải thiện không ạ em cảm ơn mọi người .
Bài liên quan
Bạn lo quá xa, trừ khi bạn viết query quá dở, lúc nào cũng SELECT * Rồi thì những bài lâu lắc không ai đọc tới mà bạn không làm một table dạng comment_archive để chuyển bớt sang đó. Bạn cũng không biết tạo index cho cơ sở dữ liệu cũng như viết store hay các thứ tối ưu khác…
Việc “lo bò trắng răng” của bạn thật vô nghĩa nếu cái CMS hay blog của bạn có ít hơn 1 triệu bài viết, và mỗi bài viết có khoảng 50 comment.
Nói chung, bạn không làm gì hết về tối ưu, cũng không viết những câu lệnh toàn select * và cũng không có LIMIT số biểu ghi thì bạn cũng chỉ mất tối đa 2 giây để query. Không hề chậm tí nào.
Bạn cứ code đi chưa cần tối ưu vội, Sau nàu khi gặp vấn đề thì mới tìm nút thắt để giaỉ quyết.
Cảm ơn mấy a vấn đề ở đây là không phải là lo bò trắng răng ạ, vấn đề ở đây là em muốn hỏi các tiền bối có những cách nào để tối ưu hơn … thiết nghĩ đó cũng là vấn đề rất là thường nhật em thì là tay ngoài thôi ạ tự tìm hiểu
một câu hỏi khá hay, nhưng hỏi rộng ra thì mới có cái trả lời còn nếu chỉ 3 table này thì có gì đâu mà tối ưu
Để tối ưu bạn cần có yêu cầu mục đích bài toán cụ thể. Kiểu như bạn không thể nào tối ưu cùng lúc thời gian và dung lượng 1 chương trình mà phụ thuôc vào bài toán cụ thể.
VD bạn có 1 danh sách và vệc thêm vào ít hơn so với truy vấn thì có thể dùng thêm 1 list con trỏ (list index) để khi thêm vào bạn thưc hiện trèn tăng dần hay theo 1 cây phân lớp để tăng tốc truy vấn nhưng khi thêm lâu hơn và tốn thêm 1 dánh sách.
Hoặc khi bạn làm các hệ thống nhúng thì cần tối ưu về dung lương ram có thể dọc ghi xuống flash tuy lâu hơn trên ram nhưng tiết kiệm ram hơn.
Chỉ khi bạn có 1 hệ thống chạy được thì khi đó bạn mới có vấn đề và tìm cách giaỉ quyết nó.
Cái này thì mình nghĩ là bạn cứ làm thôi… Còn về sau nâng cấp sau…Chú ý về kiến trúc phần mềm kẻo về sau nâng cấp lại khó…
Đến lúc dữ liệu nhiều thì bạn có thể dựa vào tính chất dữ liệu chia dữ liệu thành các bảng categories khác nhau…
Nhân dịp nói về tối ưu database các anh có kinh nghiệm gì chia sẻ em với e chỉ biết tách bảng, đánh chỉ mục . . .
Còn về thiết kế database sao để dễ nâng cấp thì chắc phải cao thủ review database chứ em nghĩ sao làm vậy á .
Database tối ưu là phải đạt chuẩn 3 (3NF) trở lên bạn nhé
Có chuẩn nào tối ưu hơn 3NF à bạn?
Chuẩn Boyce–Codd (BCNF hay 3.5NF) bạn nhé