Có một sự thật mà tụi mình thường hay né tránh, đó là việc chọn "quá nhiều" database cho một project nhỏ. Tôi đã từng rơi vào bẫy này vài lần, đặc biệt là khi bắt đầu với dự án cá nhân.
Hồi mới học code, tôi nghĩ mình phải "sành sỏi" thì mới dùng được những thứ "mạnh mẽ" như PostgreSQL hay Redis. Nhưng thực tế? Với một blog cá nhân hay một tool quản lý task đơn giản, SQLite mới là chân ái. Nó nhẹ, không cần cài đặt server, chỉ cần một file là chạy ù ù.
Tôi nhớ có lần debug lỗi race condition trên một feature booking, tôi đã đầu tư cả tiếng để cấu hình PostgreSQL với transaction isolation level phức tạp, chỉ để phát ra vấn đề là do logic của tôi sai ở chỗ lock dữ liệu. Nếu làm với SQLite, có lẽ tôi đã sớm thấy lỗi đó vì nó đơn giản hơn nhiều trong môi trường dev.
Đấy, không phải lúc nào PostgreSQL cũng thắng. Nó mạnh về tính nhất quán và ACID, nhưng SELECT * FROM users LIMIT 10; thì SQLite chạy nhanh như chớp trên local. Còn nếu bạn cần cache nhanh, Redis là vua, nhưng nếu dữ liệu của bạn không thường xuyên thay đổi hoặc không cần real-time, thì việc nhét Redis vào chỉ là... lãng phí tài nguyên và tăng độ phức tạp cho deployment.
Còn MariaDB? Tôi thích nó vì sự tương thích gần như tuyệt đối với MySQL, nhưng đôi khi lại đau đầu vì những bản update không "thân thiện" với các extension cũ. mysql_upgrade --force từng cứu mạng tôi mấy lần khi server sập sau khi update.
Quan điểm của tôi bây giờ rất rõ ràng: Start small. Hãy bắt đầu với SQLite cho dev, dùng PostgreSQL khi cần tính năng phức tạp về join và indexing, và chỉ thêm Redis khi bạn thực sự cần tốc độ đọc ghi cực cao. Đừng "over-engineer" khi chưa cần thiết. Code đơn giản, dễ maintain mới là king, chứ không phải là số lượng database bạn đang chạy.
Chắc chắn sẽ có những lập luận phản bác, nhưng trải nghiệm cá nhân cho tôi thấy: công nghệ tốt nhất là công nghệ giúp bạn ngủ ngon hơn, không phải công nghệ khiến bạn thức trắng vì debug config file.