Database

Database

11 bài viết trong danh mục này

LOST
DIRTY
PHTM
Isolation Level
rc • rr • for update
BackendMySQLDatabase

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.

12 phút đọc18/06/2026
DTO
DB
Validate in Code
dto • service • not db
BackendDatabase

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.

10 phút đọc18/06/2026
TX1
LOCK
TX2
Deadlock
innodb • log • rollback
BackendMySQLDatabase

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.

12 phút đọc18/06/2026
1
+N
SQL
SLOW
N+1 Query
orm • join • batch
BackendDatabase

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.

11 phút đọc18/06/2026
12s
200ms
MySQL Query
explain • scan • optimize
DatabaseMySQLSQL

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.

11 phút đọc18/06/2026
12s
200ms
MySQL Query
explain • scan • optimize
BackendMySQLDatabase

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ế.

12 phút đọc18/06/2026
D1
SQL
Cloudflare D1
sqlite • free • edge
CloudCloudflareDatabase

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.

10 phút đọc16/06/2026
HIT
TTL
DB
Cache Strategy
aside • write-through • ttl
BackendRedisDatabase

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.

13 phút đọc16/06/2026
IDX
SLOW
MySQL Index
scan • query • data
DatabaseMySQLSQL

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.

10 phút đọc16/06/2026
FK
DB Consistency
schema • key • rule
DatabaseSQLBackend

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 đủ.

10 phút đọc16/06/2026
12s
200ms
MySQL Query
explain • scan • optimize
DatabaseMySQLSQL

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.

10 phút đọc05/06/2026