Chọn database là một trong những quyết định kỹ thuật quan trọng nhất khi xây dựng hệ thống — và cũng là quyết định mà nhiều SME Việt Nam chọn sai ngay từ đầu. Theo khảo sát Stack Overflow Developer Survey (2025), MySQL vẫn là database phổ biến nhất (41%), tiếp theo là PostgreSQL (33%) và MongoDB (25%). Nhưng phổ biến không có nghĩa là phù hợp cho mọi dự án. Bài viết này giúp bạn hiểu rõ ưu nhược điểm của từng loại database và chọn đúng cho nhu cầu.
Database là gì? (Giải thích cho non-tech)
Database (cơ sở dữ liệu) là nơi lưu trữ dữ liệu một cách có tổ chức để bạn có thể tìm kiếm, thêm, sửa, xóa dữ liệu một cách nhanh chóng.
Ví dụ thực tế:
- Website bán hàng: Database lưu thông tin sản phẩm (tên, giá, mô tả, hình ảnh), thông tin khách hàng (tên, SĐT, địa chỉ), đơn hàng (ngày, sản phẩm, số lượng, tổng tiền)
- CRM: Database lưu thông tin liên hệ, lịch sử tương tác, pipeline bán hàng
- Ứng dụng chat: Database lưu tin nhắn, user profile, nhóm chat
Hai loại database chính
| Loại | Cách tổ chức | Ví dụ | Hình dung |
|---|---|---|---|
| SQL (Relational) | Bảng, hàng, cột — giống Excel | MySQL, PostgreSQL | Nhiều sheet Excel liên kết nhau |
| NoSQL (Non-relational) | Document, key-value, graph | MongoDB, Redis | Nhiều file JSON trong thư mục |
MySQL: “Toyota Camry” của database
MySQL là gì?
MySQL là hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) mã nguồn mở, phổ biến nhất thế giới. Ra đời từ 1995, hiện thuộc sở hữu Oracle.
Ưu điểm
| Ưu điểm | Chi tiết |
|---|---|
| Phổ biến nhất | 90% shared hosting hỗ trợ, dễ tìm developer |
| Dễ học | Cú pháp SQL cơ bản, nhiều tài liệu tiếng Việt |
| Hiệu suất tốt cho READ | Tối ưu cho ứng dụng đọc nhiều (website, blog, CMS) |
| Ecosystem rộng | WordPress, Laravel, Magento, Drupal đều mặc định dùng MySQL |
| phpMyAdmin | Giao diện quản lý đồ họa miễn phí, dễ dùng |
| Replication đơn giản | Master-slave replication dễ setup |
Nhược điểm
| Nhược điểm | Chi tiết |
|---|---|
| Tính năng ít hơn PostgreSQL | Không có JSONB, partial index, CTE recursive |
| Thuộc Oracle | Rủi ro licensing trong tương lai |
| Full-text search yếu | Cần Elasticsearch cho search phức tạp |
| Concurrent writes | Xử lý ghi đồng thời kém hơn PostgreSQL |
Use case phù hợp
- Website WordPress, blog, CMS
- Ứng dụng web đơn giản (CRUD)
- E-commerce nhỏ–vừa (< 1 triệu sản phẩm)
- Dự án cần lên nhanh, MVP
Chi phí
- MySQL Community: Miễn phí
- MySQL Enterprise: Từ $5.000/năm/server
- MariaDB (fork): Miễn phí, tương thích 99% MySQL
- Amazon RDS for MySQL: Từ ~500.000 VND/tháng
PostgreSQL: “BMW” của database
PostgreSQL là gì?
PostgreSQL (hay “Postgres”) là hệ quản trị cơ sở dữ liệu quan hệ-đối tượng, mã nguồn mở. Ra đời từ 1996, phát triển bởi cộng đồng. Được mệnh danh “the world’s most advanced open source database”.
Ưu điểm
| Ưu điểm | Chi tiết |
|---|---|
| Tính năng phong phú | JSONB, arrays, full-text search, CTE, window functions |
| ACID compliance tốt nhất | Đảm bảo tính toàn vẹn dữ liệu tuyệt đối |
| Concurrent xử lý tốt | MVCC hiệu quả, ghi đồng thời không block đọc |
| Extensible | PostGIS (maps), pg_trgm (fuzzy search), TimescaleDB (time-series) |
| Miễn phí hoàn toàn | Không lo licensing (BSD license) |
| JSON support | JSONB cho phép lưu + query JSON nhanh như NoSQL |
Nhược điểm
| Nhược điểm | Chi tiết |
|---|---|
| Ít phổ biến hơn MySQL | Khó tìm developer Việt Nam có kinh nghiệm |
| Cấu hình phức tạp hơn | Tuning performance cần kiến thức sâu |
| Hosting hạn chế | Ít shared hosting hỗ trợ (so với MySQL) |
| Replication phức tạp hơn | Streaming replication cần cấu hình kỹ |
Use case phù hợp
- Ứng dụng tài chính, ngân hàng (cần ACID nghiêm ngặt)
- E-commerce lớn (> 1 triệu sản phẩm, nhiều concurrent writes)
- GIS/Maps application (PostGIS)
- Ứng dụng cần lưu cả structured + semi-structured data
- Analytics, reporting phức tạp
- Dự án mới chọn tech stack hiện đại
Chi phí
- PostgreSQL: Hoàn toàn miễn phí
- Amazon RDS for PostgreSQL: Từ ~600.000 VND/tháng
- Managed PostgreSQL (DigitalOcean): Từ ~370.000 VND/tháng
MongoDB: “SUV đa dụng” của database
MongoDB là gì?
MongoDB là database NoSQL dạng document, lưu dữ liệu dưới dạng JSON-like documents (BSON). Ra đời 2009, là NoSQL database phổ biến nhất.
Ưu điểm
| Ưu điểm | Chi tiết |
|---|---|
| Schema linh hoạt | Không cần định nghĩa cấu trúc trước, thêm field tự do |
| Scale ngang dễ dàng | Sharding tự động, phù hợp big data |
| Developer-friendly | JSON format quen thuộc với web developer |
| Real-time | Change streams cho ứng dụng real-time |
| Atlas (managed) | MongoDB Atlas dễ dùng, free tier rộng rãi |
Nhược điểm
| Nhược điểm | Chi tiết |
|---|---|
| Không có JOIN | Phải dùng $lookup (chậm) hoặc denormalize data |
| Tốn dung lượng | Document lưu field name cho mỗi record → tốn 2–5x |
| ACID hạn chế | Multi-document transactions chỉ từ v4.0, vẫn chậm hơn SQL |
| Dễ thiết kế sai | Schema-less không có nghĩa là không cần thiết kế |
| Chi phí cao khi scale | RAM-intensive, cần nhiều RAM hơn SQL databases |
Use case phù hợp
- Content Management System (CMS) với content đa dạng
- IoT data collection (nhiều thiết bị, data format khác nhau)
- Catalog/inventory với attributes biến đổi
- Real-time analytics, event logging
- Prototype/MVP cần linh hoạt thay đổi schema
Chi phí
- MongoDB Community: Miễn phí
- MongoDB Atlas (managed): Free tier (512MB), paid từ ~620.000 VND/tháng
- Self-hosted: Miễn phí phần mềm, trả tiền server
Bảng so sánh tổng hợp
| Tiêu chí | MySQL | PostgreSQL | MongoDB |
|---|---|---|---|
| Loại | Relational (SQL) | Relational-Object (SQL) | Document (NoSQL) |
| License | GPL (Oracle) | BSD (Cộng đồng) | SSPL |
| ACID | Có (InnoDB) | Có (mạnh nhất) | Có (từ v4.0, hạn chế) |
| JSON support | Có (JSON type) | Tốt (JSONB, indexable) | Native (document) |
| Full-text search | Cơ bản | Tốt | Tốt (Atlas Search) |
| Scaling | Vertical + Read replica | Vertical + Read replica | Horizontal (sharding) |
| Learning curve | Thấp | Trung bình | Thấp–Trung bình |
| Hosting Việt Nam | Rất phổ biến | Ít phổ biến | Cloud only |
| Community VN | Lớn | Nhỏ–Trung bình | Nhỏ |
| Phù hợp | Web truyền thống | Ứng dụng phức tạp | Big data, flexible schema |
Flowchart: Chọn database nào?
Trả lời các câu hỏi sau:
Q1: Dữ liệu có cấu trúc rõ ràng (bảng, hàng, cột) không?
- Có → Q2
- Không / Không chắc → Xem xét MongoDB
Q2: Cần JOIN phức tạp giữa nhiều bảng không?
- Có → Q3
- Không → MySQL hoặc MongoDB đều được
Q3: Cần tính toàn vẹn dữ liệu tuyệt đối (tài chính, giao dịch)?
- Có → PostgreSQL
- Không → Q4
Q4: Dùng WordPress/Laravel/PHP framework?
- Có → MySQL (ecosystem tốt nhất)
- Không → PostgreSQL (tính năng nhiều hơn)
Khuyến nghị theo loại dự án
| Loại dự án | Khuyến nghị | Lý do |
|---|---|---|
| Website WordPress | MySQL/MariaDB | Tương thích mặc định, ecosystem lớn |
| E-commerce WooCommerce | MySQL/MariaDB | WordPress stack |
| E-commerce custom | PostgreSQL | Concurrent writes, JSONB cho product attributes |
| SaaS application | PostgreSQL | Multi-tenant, advanced features |
| Mobile app backend | PostgreSQL hoặc MongoDB | Tùy data structure |
| CMS headless | MongoDB | Flexible content schema |
| IoT / Real-time | MongoDB + Redis | Time-series data, caching |
| Analytics / BI | PostgreSQL | Window functions, CTEs |
| Blog đơn giản | MySQL | Đơn giản, rẻ, dễ host |
Chi phí thực tế cho SME Việt Nam
Self-hosted (trên VPS của bạn)
| Database | License | VPS tối thiểu | Chi phí/tháng |
|---|---|---|---|
| MySQL/MariaDB | Miễn phí | 1GB RAM | ~100.000 VND |
| PostgreSQL | Miễn phí | 1GB RAM | ~100.000 VND |
| MongoDB | Miễn phí | 2GB RAM | ~200.000 VND |
Managed (nhà cung cấp quản lý)
| Service | Gói nhỏ nhất | Chi phí/tháng |
|---|---|---|
| DigitalOcean Managed MySQL | 1GB RAM | ~370.000 VND |
| DigitalOcean Managed PostgreSQL | 1GB RAM | ~370.000 VND |
| MongoDB Atlas M10 | 2GB RAM | ~1.500.000 VND |
| Amazon RDS | db.t3.micro | ~500.000 VND |
| PlanetScale (MySQL) | Free tier 5GB | 0 VND |
| Supabase (PostgreSQL) | Free tier 500MB | 0 VND |
Khuyến nghị cho SME
- Budget < 500.000 VND/tháng: Self-hosted MySQL/PostgreSQL trên VPS, hoặc free tier PlanetScale/Supabase
- Budget 500.000–2.000.000 VND/tháng: Managed database (DigitalOcean, Amazon RDS)
- Budget > 2.000.000 VND/tháng: Enterprise managed với high availability
Sai lầm phổ biến khi chọn database
1. “Dùng MongoDB vì nó trendy”
MongoDB không phải silver bullet. Nếu data của bạn có quan hệ rõ ràng (khách hàng → đơn hàng → sản phẩm), SQL database sẽ phù hợp hơn nhiều. Dùng MongoDB cho relational data = đau đầu với denormalization và data inconsistency.
2. “MySQL cũ rồi, phải dùng PostgreSQL”
MySQL 8.0 đã có rất nhiều cải tiến: window functions, CTEs, JSON support. Nếu bạn dùng WordPress hay Laravel, MySQL vẫn là lựa chọn tốt nhất. Đừng đổi database chỉ vì “người ta nói PostgreSQL tốt hơn”.
3. “Cứ dùng gì cũng được, sau này đổi”
Migration database là một trong những việc đau đầu nhất trong software engineering. Chọn đúng từ đầu tiết kiệm hàng trăm giờ và hàng chục triệu VND sau này.
4. “Cần big data nên dùng MongoDB”
“Big data” không tự động có nghĩa là cần NoSQL. PostgreSQL xử lý tốt hàng trăm triệu records. MongoDB chỉ thực sự cần thiết khi data format biến đổi nhiều hoặc cần horizontal sharding.
FAQ — Câu hỏi thường gặp
Database nào nhanh nhất?
Không có database “nhanh nhất” tuyệt đối — phụ thuộc vào loại workload. MySQL nhanh hơn cho simple reads. PostgreSQL nhanh hơn cho complex queries và concurrent writes. MongoDB nhanh hơn cho document lookups. Quan trọng nhất là thiết kế schema đúng và có indexing phù hợp — bất kỳ database nào cũng chậm nếu thiết kế sai.
Có nên dùng 2 database cùng lúc không?
Hoàn toàn có thể — gọi là polyglot persistence. Ví dụ: PostgreSQL cho dữ liệu chính + Redis cho caching + Elasticsearch cho search. Tuy nhiên, với SME, bắt đầu với 1 database chính là đủ. Thêm database khác khi thực sự cần.
MariaDB có khác MySQL không?
MariaDB là fork của MySQL, tương thích 95%+. MariaDB nhanh hơn một chút, có thêm một số tính năng, và hoàn toàn miễn phí (không lo Oracle). Nếu chọn MySQL, khuyến nghị dùng MariaDB.
Tôi không biết SQL, nên bắt đầu từ đâu?
Bắt đầu với MySQL vì tài liệu tiếng Việt nhiều nhất, cộng đồng lớn nhất. Học SQL cơ bản (SELECT, INSERT, UPDATE, DELETE, JOIN) mất khoảng 1–2 tuần. Sau đó tìm hiểu thêm indexing và query optimization.
Nếu chọn sai database thì sao?
Migration database khó nhưng không phải không thể. Từ MySQL sang PostgreSQL tương đối straightforward (cú pháp SQL gần giống). Từ SQL sang MongoDB (hoặc ngược lại) phức tạp hơn nhiều vì phải redesign data model. Nếu không chắc, hãy liên hệ Trinh Digital để được tư vấn trước khi bắt đầu.
Kết luận
Chọn database là quyết định dài hạn — đừng chọn vì trend, hãy chọn vì phù hợp. Với đa số website và ứng dụng SME Việt Nam, MySQL/MariaDB là lựa chọn an toàn. Nếu cần tính năng nâng cao hoặc xây dựng ứng dụng mới, PostgreSQL là hướng đi hiện đại. MongoDB chỉ nên dùng khi data thực sự flexible và không có quan hệ phức tạp.
Cần tư vấn thiết kế database hoặc xây dựng hệ thống cho doanh nghiệp? Liên hệ Trinh Digital — chúng tôi giúp bạn chọn đúng tech stack từ đầu, tránh chi phí sửa sai sau này.