Nỗi ám ảnh mang tên “Kiến trúc Frankenstein”
Dân làm Fullstack chắc chẳng lạ gì cảnh một dự án phải gánh 4-5 loại database. Bạn dùng PostgreSQL lưu dữ liệu quan hệ, Redis để cache, Elasticsearch để search, rồi lại thêm Neo4j nếu cần xử lý quan hệ mạng lưới. Việc duy trì đống hạ tầng cồng kềnh này cực kỳ tốn thời gian. Nó ngốn tài nguyên kinh khủng, nhất là với các dự án MVP cần tốc độ triển khai nhanh.
Thực tế, các database truyền thống thường chỉ giỏi một việc. MySQL hay Postgres rất chặt chẽ nhưng lại khó mở rộng schema linh hoạt. Ngược lại, MongoDB cho phép lưu trữ thoải mái nhưng khi cần JOIN (lookup) nhiều bảng, hiệu năng sẽ tụt dốc không phanh. Lúc này, code của bạn sẽ trở nên cực kỳ rối rắm chỉ để xử lý logic dữ liệu.
Sự phức tạp này đến từ việc chúng ta đang cố ghép những mảnh rời rạc lại với nhau. Khi ứng dụng hiện đại đòi hỏi cả real-time, scale linh hoạt và cấu trúc đa dạng, bạn cần một giải pháp hợp nhất. Đó là lúc SurrealDB xuất hiện để giải quyết bài toán này.
SurrealDB là gì? Tại sao giới Dev lại phát sốt?
SurrealDB không phải là database thông thường mà là một Multi-model Database. Nó được viết bằng Rust, đóng gói gọn nhẹ trong một file binary duy nhất chỉ khoảng 20-30MB. Sức mạnh của nó nằm ở việc hội tụ mọi tinh hoa:
- Relational (SQL): Bạn vẫn dùng SELECT, JOIN, GROUP BY như đang làm việc với Postgres.
- Document (NoSQL): Lưu JSON linh hoạt, thích schema hay không là quyền của bạn.
- Graph: Kết nối các record bằng quan hệ đồ thị. Bạn có thể truy vấn hàng triệu kết nối mà không bị delay như JOIN truyền thống.
- Real-time: Tích hợp sẵn Live Queries. Dữ liệu tự đẩy về client ngay khi có thay đổi mà không cần setup Socket.io phức tạp.
Thay vì phải viết Backend API (Node.js, Go) làm trung gian, SurrealDB cho phép kết nối thẳng từ Frontend. Hệ thống phân quyền (Permissions) chi tiết đến từng dòng record đảm bảo dữ liệu luôn an toàn.
Hướng dẫn cài đặt SurrealDB trong 1 nốt nhạc
Vì được tối ưu bằng Rust nên SurrealDB cực kỳ nhẹ và khởi động gần như tức thì.
1. Cài đặt trực tiếp trên macOS/Linux
Dùng lệnh curl thần thánh để cài bản mới nhất:
curl --proto '=https' --tlsv1.2 -sSf https://install.surrealdb.com | sh
2. Chạy bằng Docker (Khuyên dùng)
Nếu muốn môi trường sạch sẽ, Docker là chân ái. Bạn chỉ cần một dòng lệnh để có ngay database server:
docker run --rm -p 8000:8000 surrealdb/surrealdb:latest start --user root --pass root
Server sẽ lắng nghe ở cổng 8000. Bạn có thể truy cập ngay với tài khoản root/root.
Thao tác với ngôn ngữ SurrealQL
SurrealQL là sự kết hợp giữa SQL quen thuộc và tư duy hiện đại. Nó giúp bạn thao tác với dữ liệu phức tạp một cách cực kỳ trực quan.
Tạo dữ liệu siêu tốc
Truy cập CLI để bắt đầu vọc vạch:
surreal sql --endpoint http://localhost:8000 --user root --pass root --ns test --db test
Thử tạo một record người dùng với các trường linh hoạt:
-- Tạo user mới
CREATE user:admin SET
name = 'Blog IT Từ Zero',
tags = ['rust', 'database', 'surrealdb'];
-- Lấy dữ liệu
SELECT * FROM user;
Truy vấn Graph: Không còn nỗi lo JOIN chậm
Hãy tưởng tượng bạn làm tính năng “Like”. Trong SQL truyền thống, bạn cần bảng trung gian. Với SurrealDB, bạn chỉ cần tạo một “cạnh” (edge) nối giữa hai bản ghi:
-- Tạo bài viết
CREATE article:post1 SET title = 'SurrealDB 101';
-- Tạo quan hệ 'like' từ user đến bài viết
RELATE user:admin->like->article:post1 SET time = time::now();
-- Lấy danh sách người đã like bài viết
SELECT ->like->user.name FROM article:post1;
Câu lệnh trên chạy với độ phức tạp O(1) thay vì O(log n) như JOIN thông thường. Điều này cực kỳ quan trọng khi dữ liệu lên tới hàng triệu dòng.
Live Queries: Real-time không cần Backend
Trước đây, để làm tính năng thông báo, mình phải dùng LISTEN/NOTIFY trong Postgres rồi truyền qua Socket.io. Với SurrealDB, mọi thứ gói gọn trong một câu lệnh:
LIVE SELECT * FROM article WHERE tags CONTAINS 'rust';
Bất kỳ ai thêm bài viết mới về Rust, client của bạn sẽ nhận được notification ngay lập tức. Tính năng này giúp giảm tới 60% lượng code boilerplate ở phía Backend.
Góc nhìn thực tế: Có nên dùng SurrealDB ngay bây giờ?
Dù rất mạnh mẽ, nhưng bạn cần cân nhắc kỹ dựa trên nhu cầu thực tế:
- Dự án Startup/MVP: Đây là lựa chọn số 1. Bạn sẽ tiết kiệm được hàng tuần trời thiết lập hạ tầng và định nghĩa API.
- Ứng dụng Social/IoT: Những app cần xử lý quan hệ chằng chịt hoặc dữ liệu đổ về liên tục sẽ tận dụng tốt thế mạnh của Graph và Live Queries.
- Lưu ý về Production: SurrealDB còn khá trẻ. Cộng đồng chưa thể lớn mạnh bằng Postgres hay MySQL. Các công cụ GUI hay ORM vẫn đang trong quá trình hoàn thiện.
Một điểm đáng gờm là SurrealDB có khả năng scale vô hạn. Bạn có thể chạy nó trên một file đơn lẻ hoặc triển khai cụm phân tán dùng TiKV làm storage engine mà không cần đổi code.
Lời kết
SurrealDB thực sự là một làn gió mới trong thế giới database vốn đã quá quen thuộc với những cái tên cũ kỹ. Việc gom SQL, NoSQL và Graph vào một nơi giúp chúng ta tập trung vào logic sản phẩm thay vì đánh vật với hạ tầng.
Nếu bạn đã mệt mỏi với việc cấu hình hàng tá dịch vụ chỉ để chạy một app web, hãy thử dành một buổi cuối tuần với SurrealDB. Biết đâu, nó sẽ là “vũ khí bí mật” cho dự án tiếp theo của bạn.

