Đến nội dung chính
QK

PostgreSQL query optimization thực chiến: từ 3s xuống 80ms

QK

Quang Khải

28 tháng 4, 2026 · 11 phút đọc · 6.7k lượt xem

Đây là bài viết demo với nội dung placeholder. Khi kết nối với backend thực (Phase 2), nội dung sẽ được render từ Plate.js JSON thông qua @blog/editor/renderer.

Bối cảnh và vấn đề

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Phân tích codebase cũ

Sau khi audit codebase, chúng tôi phát hiện ra 3 vấn đề chính: circular dependencies giữa các module, business logic nằm rải rác trong controllers, và không có integration tests.

// Trước refactor — circular dep rất phổ biến
@Injectable()
export class PostService {
  constructor(
    private readonly userService: UserService, // circular!
    private readonly categoryService: CategoryService,
  ) {}
}

Kế hoạch refactor

Chúng tôi chọn Strangler Fig pattern — không rewrite từ đầu mà dần dần thay thế từng phần, đảm bảo production vẫn chạy liên tục trong suốt quá trình.

"The best refactoring is the one that ships without users noticing." — Team motto

Nội dung đầy đủ sẽ có khi Phase 2 hoàn thành và kết nối BE thực.

Bài viết có hữu ích không?

QK

Quang Khải

@khaido

Full-stack developer, viết về React, Node.js và mọi thứ liên quan đến web. Đang build sản phẩm tại Việt Nam.

Bình luận (47)

Đăng nhập để bình luận

Bài viết liên quan

Cùng chủ đề ⚙️ Backend

Tôi đã refactor toàn bộ backend NestJS như thế nào — và những bài học đắt giá

Sau 2 năm tích lũy tech debt, codebase NestJS của chúng tôi đã trở thành một mớ hỗn độn. Bài viết này ghi lại toàn bộ quá trình refactor, từ planning đến execution, và những gì tôi học được về dependency injection, module boundaries và testing strategy.

QK
Quang Khải·12 phút đọc
156 23 89

Redis patterns thực tế: caching, rate limiting, queue, và pub/sub trong một app

Redis không chỉ là một cache đơn giản. Tôi sẽ show cách dùng Redis cho 4 mục đích khác nhau trong cùng một ứng dụng: distributed cache với invalidation, sliding window rate limiter, job queue với BullMQ, và real-time event bus — không xung đột nhau.

QK
Quang Khải·14 phút đọc
276 38 178