Kỹ thuật tăng Database Performance, Availability và Scalability
Bài viết được sự cho phép của tác giả Kiên Nguyễn
Quay lại với chủ đề Database Performance, chủ đề không mới nhưng các kĩ thuật để cải thiện Performance thì luôn mới theo từng ngày.
Performance ở đây không chỉ nói về tốc độ, bản thân nó còn bao gồm khả năng mở rộng (Scalability) và tính sẵn sàng (Availability) của hệ cơ sở dữ liệu nữa.
Bài viết này tui hân hạnh giới thiệu với anh em 3 kĩ thuật giúp cải thiện Performance. Anh em đọc xong có góp ý gì thì comment cho tui với nhé.
1. Database Performance với Indexing
Database Indexing là một kĩ thuật không còn quá xa lạ với anh em. Với indexing, performance các câu truy vấn tăng lên rõ rệt. Mục này xin được phân tích kĩ hơn bằng cách nào mà Indexing lại có thể làm tăng Database Performance.
1.1 Movitation
Đầu tiên, với Indexing:
- Speed up retrieval operations
- Locate the desired records in a sublinear time
Chính vì vậy, nếu không có Indexing và khi table có một lượng data cực kì lớn, ta sẽ gặp phải vấn đề về Database Performance (cụ thể là Query Performance)
- Require a “Full Table Scan” (Scan toàn bộ table để tìm record match)
- Take a long time for large tables (Cần thời gian nhiều hơn đối với table có lượng data khủng)
Ví dụ dưới đây ta cần tìm kiếm cho các records có city là “Los Angeles”. Không có indexing, ta cần scan toàn bộ table từ trên xuống dưới để tìm ra được các records thoả mãn yêu cầu.
Hoặc với một trường hợp khác là vừa Scan vừa Sort theo Age. Số lần sort tối thiểu cần là 1 và vẫn scan toàn bộ table.
Nếu scan toàn bộ table và với một lượng data lớn. Việc full scan table có thể gây ra 2 vấn đề:
- Become a performance bottleneck (trở thành một điểm chết về performance)
- Impact our users’ experience (ảnh hưởng tới trải nghiệm người dùng)
1.2 Index Table
Tới với giải pháp đầu tiên là Index Table. Vậy index table là gì?
Index Table is helper table, created from a particular columns/ group columns Index Table thực chất là một bảng hỗ trợ được tạo từ một cột hoặc một nhóm cột cụ thể
Ví dụ phía trên cho thấy Index Table bao gồm City và Row, row là thứ tự của dòng có giá trị City mà nó lưu.
1.3 Data Structures
Index Table cũng có Data Structures của riêng nó theo từng loại index. Mỗi loại index lại sử dụng một loại Data Structures riêng, từ đó improve được Database Performance.
- HashMap
- Self-balanced tree (B-Tree)
Ví dụ dưới đây là Index Hash Table và sử dụng HashMap, phía bên row là index của các row có giá trị của City là Los Angeles. Chính cái này làm tăng performance. Khi cần query thì chỉ cần lấy ở row số 1 và row số 3
Chi tiết hteme về database index anh em có thể tham khảo ở bài viết Database indexes : advantages and disadvantages.
Tham khảo việc làm Database hấp dẫn tại TopDev!
2. Database Replication
Database Replication cũng là một kĩ thuật giúp cải thiện Database Performance. Bản thân từ Replication có nghĩa là nhân rộng. Cũng là bản chất của kĩ thuật này và tại sao áp dụng nó lại làm tăng tính Scalability của Database nói riêng và hệ thống nói chung.
Ví dụ như hình trên đây là mình hoạ cho một ứng dụng chỉ có duy nhất một Replica của Database. Ta có rất nhiều services và nhiều Server để thao tác với database.
Chỉ một database kiểu này biến nó trở thành (Single point of failure – một điểm chết). Trường hợp database này có vấn đề, toàn bộ hệ thống sẽ down.
Replication lúc này trở thành cứu cánh, giải pháp là Replication tạo ra nhiều hơn một các Database.
Khi một Replication down, request từ services lúc này sẽ chuyển hướng tới các Replica khác
Chính việc áp dụng Replication giúp làm tăng tính sẵn sáng của hệ thống (Availability).
3. Database Sharding
Database Sharding hay còn có cái tên khác à Databse Partitioning là một giải pháp khác giúp làm tăng Database Performance. Chủ yếu là ở phương diện Scalability (mở rộng).
Về cơ bản thì kĩ thuật này thay vì clone các Database thành các Replica khác nhau (bao gồm toàn bộ data) như hình dưới.
Thay vì clone ra như giải pháp Replication, Sharding là kĩ thuật chia toàn bộ Database thành các Shard nhỏ hơn. Khái niệm về Shard không dễ đâu nha anh em. Anh em có thể tìm hiểu thêm qua bài viết Dynamic Sharding – Nghệ thuật của locator.
Về adavantages thì Database Sharding cho phép ta:
- Scale our database to store more data (lưu được nhiều dữ liệu hơn)
- Different queries can be performed completely in parallel
- Better Performance
- Higher Scalability
Sharding cũng là giải pháp cho hệ cơ sở dữ liệu phân tán (Distributed Database). Vấn đề muôn thưở là Shard nào sẽ lưu đúng data mà ta cần. Request tới, nhưng lấy dữ liệu từ đâu?
Mé, cái này là câu hỏi lớn và cần một bài viết riêng mới giải thích cụ thể hơn cho anh em là làm như thế nào có thể “tìm được đúng tình yêu Shard của đời mình”?.
4. Tổng kết
Bài viết này tui đã giới thiệu cho anh em 3 kĩ thuật giúp tăng Database Performance bao gồm:
- Một là Indexing
- Hai là Replication
- Ba là Partitioning
Có kĩ thuật nào khác nhờ anh em chỉ giáo giúp nghe.
5. Tham khảo
- What is Database Replication and How Does it Work?
- Data partitioning guidance – Best practices for cloud applications
Today is great day for me when I learned a new thing – Thank you for your time – Happy coding!
Bài viết gốc được đăng tải tại kieblog.vn
Có thể bạn quan tâm:
- Phân biệt save, persist, update, merge, saveOrUpdate trong hibernate
- Các lưu ý về strategy của GeneratedValue khi sử dụng hibernate
- Hướng dẫn kết nối PHP với SQL Server
Xem thêm Việc làm IT hấp dẫn trên TopDev
- B BenQ RD Series – Dòng Màn Hình Lập Trình 4k+ Đầu Tiên Trên Thế Giới
- F Framework nào tốt nhất cho dự án của bạn? – Checklist chi tiết
- K Kinh nghiệm xử lý responsive table hiệu quả
- S Stackoverflow là gì? Bí kíp tận dụng Stack Overflow hiệu quả
- 7 7 kinh nghiệm hữu ích khi làm việc với GIT trong dự án
- B Bài tập Python từ cơ bản đến nâng cao (có lời giải)
- B Bảo mật API là gì? Một số nguyên tắc và kỹ thuật cần biết
- H Hướng dẫn cài đặt và tự học lập trình Python cơ bản từ A-Z
- C Chinh Phục Phân Tích Dữ Liệu Với Pandas Trong Python: Hướng Dẫn Từng Bước
- D Display CSS là gì? Cách khai báo và sử dụng thuộc tính display trong CSS