Kỹ thuật tăng Database Performance, Availability và Scalability

8200

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.

Database Performance

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.

Database Performance

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)

  Công cụ performance test Jmeter
  Quản lý realm database theo hướng micro-service trong iOS

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

Database Performance

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.

Database Performance

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.

Database Performance

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.

Database Performance

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.

Database Performance

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?

Database Performance

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

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:

Xem thêm Việc làm IT hấp dẫn trên TopDev