Ruby on Rails

Tối ưu hóa hiệu năng

Database indexing, tối ưu hóa truy vấn, gem Bullet, rack-mini-profiler, đồng thời/Puma, thread-safety, connection pool

26 câu hỏi phỏng vấn·
Senior
1

Mục đích chính của việc thêm index trên một cột cơ sở dữ liệu là gì?

Câu trả lời

Một index tăng tốc các truy vấn tìm kiếm bằng cách tạo ra một cấu trúc dữ liệu được tối ưu hóa (thường là B-tree) giúp tránh quét tất cả các hàng trong bảng. Nếu không có index, cơ sở dữ liệu thực hiện sequential scan có thể rất chậm trên các bảng lớn. Các cột thường được dùng trong mệnh đề WHERE, ORDER BY hoặc join là ứng viên lý tưởng để lập chỉ mục.

2

Làm thế nào để tạo một index tổng hợp trên các cột user_id và created_at trong một migration của Rails?

Câu trả lời

Phương thức add_index nhận một mảng các cột để tạo một index tổng hợp. Thứ tự cột rất quan trọng: index sẽ hiệu quả cho các truy vấn lọc trước theo user_id, sau đó created_at, nhưng không hiệu quả cho các truy vấn chỉ lọc theo created_at. Một index tổng hợp là tối ưu cho các truy vấn sử dụng các cột từ trái sang phải.

3

Vấn đề N+1 trong ngữ cảnh của ActiveRecord là gì?

Câu trả lời

Vấn đề N+1 xảy ra khi một truy vấn ban đầu lấy về N bản ghi, sau đó N truy vấn bổ sung được thực thi để tải các liên kết của mỗi bản ghi. Ví dụ, tải 100 posts rồi thực hiện 100 truy vấn riêng lẻ cho các tác giả. Mẫu này nhân số lượng truy vấn lên và làm giảm hiệu năng nghiêm trọng. Giải pháp là sử dụng includes, preload hoặc eager_load để tải các liên kết trong một hoặc hai truy vấn.

4

Nên dùng phương thức ActiveRecord nào để giải quyết vấn đề N+1 bằng cách tải các liên kết trước?

5

Vai trò của gem Bullet trong việc tối ưu hóa hiệu năng Rails là gì?

+23 câu hỏi phỏng vấn

Nắm vững Ruby on Rails cho lần phỏng vấn tiếp theo

Truy cập tất cả câu hỏi, flashcards, bài kiểm tra kỹ thuật, bài tập code review và mô phỏng phỏng vấn.

Bắt đầu miễn phí