Database
11 bài viết trong danh mục này
Race condition trong MySQL: isolation level nào giải quyết được?
MySQL có 4 isolation level nhưng mặc định REPEATABLE READ không chặn được mọi race condition. Dirty read, lost update, phantom read — từng loại xảy ra khi nào, isolation level nào ngăn được, và khi nào cần SELECT FOR UPDATE.
Tại sao không nên dùng database để validate input trong backend
Nhiều backend dựa vào NOT NULL, VARCHAR(n), UNIQUE constraint của database để bắt lỗi input. Quan điểm này sai về kiến trúc — database không phải lớp validate. Validate đúng chỗ: DTO hoặc service layer, trước khi data chạm vào DB.
MySQL Deadlock: cách đọc log InnoDB và giảm xác suất xảy ra
Deadlock trong MySQL tự resolve nhưng rollback transaction ngẫu nhiên gây lỗi ở app layer. Cách đọc SHOW ENGINE INNODB STATUS để biết chính xác dòng nào bị lock, nguyên nhân phổ biến, và 5 cách giảm xác suất deadlock.
N+1 Query trong ORM: cách phát hiện bằng SQL log và fix bằng eager loading
N+1 query không gây lỗi nhưng làm API chậm dần khi data tăng — ORM gửi 1 query lấy danh sách rồi lặp N query con. Cách bật SQL log để bắt, đếm query per request, và fix bằng include, batch, hoặc DataLoader.
SQL có xử lý dữ liệu lớn được không? Vai trò của index và query
Vì sao SQL vẫn xử lý tốt dữ liệu lớn nếu schema, index và query đúng cách, từ lọc trước khi join đến tối ưu MySQL cho bài toán hàng triệu khách hàng.
MySQL query chậm vì ORDER BY và LIMIT: nguyên nhân và cách tối ưu
ORDER BY kết hợp LIMIT có thể gây filesort trên triệu bản ghi dù bảng đã có index. Giải thích cách MySQL chọn execution plan, cách đọc EXPLAIN, và 4 pattern tối ưu thực tế.
Cloudflare D1 Database: khi nào nên dùng?
Cloudflare D1 là managed SQLite serverless cho Workers và Pages, hợp side project nhỏ nhưng có giới hạn nếu cần chuyển sang MySQL/PostgreSQL.
Chiến lược caching giảm tải database và API
Các chiến lược caching thực tế để giảm tải database và API: cache-aside, write-through, write-behind, TTL và cache invalidation.
Vai trò của index và những kiểu query làm MySQL chậm
Vì sao index quan trọng trong MySQL, và những kiểu query hay làm chậm như chưa đánh index, SELECT quá nhiều data, hoặc lấy dư dữ liệu rồi mới xử lý ở code.
Cách thiết kế database nhất quán, ít lệch dữ liệu
Nguyên tắc thiết kế database để giữ dữ liệu nhất quán: naming, primary key, foreign key, unique, not null và chuẩn hoá vừa đủ.
Tối ưu MySQL query với 300k+ records
Case study tối ưu query MySQL từ 12s xuống 200ms với explain, index và query rewrite.