Làm DevOps, chắc hẳn ai từng phải vọc log hoặc làm full-text search chắc không lạ gì Elasticsearch. Nhưng tại sao nó lại “ngon ăn” hơn MongoDB hay DBMS truyền thống khi nói đến tìm kiếm dữ liệu? Bài viết này sẽ đi thẳng vào vấn đề — so sánh sòng phẳng về tính năng, tốc độ, và trải nghiệm thực tế.
1. Cách hoạt động của từng hệ thống tìm kiếm
DBMS (MySQL, PostgreSQL,…)
Các DBMS truyền thống sử dụng chỉ mục B-tree, phù hợp với tìm kiếm chính xác (WHERE id = 123
), còn tìm kiếm mờ kiểu LIKE "%keyword%"
thì chậm như rùa.
SELECT * FROM articles
WHERE title LIKE '%devops%'
Kết quả: Chậm với bảng lớn, đặc biệt là không có full-text index.
MongoDB
MongoDB hỗ trợ text index nhưng vẫn hơi “non” khi gặp yêu cầu tìm kiếm phức tạp.
db.articles.createIndex({ title: "text" })
db.articles.find({ $text: { $search: "devops" } })
Kết quả: Tìm được, nhưng không có ranking rõ ràng, thiếu phân tích từ.
Elasticsearch
Elasticsearch dùng inverted index, giống như cách Google làm search engine. Nó tokenize, phân tích từ, đánh trọng số… nói chung là sinh ra để tìm kiếm.
GET /articles/_search
{
"query": {
"match": {
"title": "devops"
}
}
}
Kết quả: Trả về có scoring, highlighting, tốc độ thì nhanh như chớp dù dữ liệu cả trăm GB.
2. So sánh nhanh
Tiêu chí | DBMS | MongoDB | Elasticsearch |
---|---|---|---|
Tối ưu cho tìm kiếm | ❌ | ⚠️ | ✅ |
Full-text search | Có, nhưng yếu | Tạm ổn | Mạnh mẽ |
Tốc độ với dữ liệu lớn | Chậm | Tạm được | Rất nhanh |
Ranking, relevance scoring | Không | Có, nhưng hạn chế | Có, rất mạnh |
Khả năng mở rộng | Trung bình | Tốt | Tốt |
Khả năng phân tích từ | Không | Không sâu | Có, rất chi tiết |
3. Thử nghiệm thực tế
Bối cảnh:
- 1 triệu bản ghi về blog post.
- Mỗi bản ghi có
title
,content
,tags
.
Truy vấn: Tìm bài có từ khoá “DevOps CI/CD”
Công nghệ | Thời gian trả về | Tính chính xác | Độ hài lòng dev |
---|---|---|---|
MySQL | 5.6 giây | Trung bình | 😩 |
MongoDB | 1.8 giây | Khá | 😐 |
Elasticsearch | 0.12 giây | Rất cao | 😎 |
4. Khi nào nên chọn Elasticsearch?
- Bạn cần tìm kiếm phức tạp (fuzzy, stemming, từ đồng nghĩa,…).
- Dữ liệu log lớn, real-time (như dùng với Logstash, Kibana).
- Bạn cần phân loại, đánh trọng số, ví dụ: hệ thống gợi ý, search engine riêng.
Ngược lại, nếu chỉ cần tìm đơn giản và đã có DBMS sẵn, thì… xài tạm cũng được, nhưng đừng kỳ vọng nhiều 😅.
5. Kết luận
Elasticsearch không thay thế MongoDB hay DBMS, nhưng nếu nói riêng về tìm kiếm, thì nó “ăn đứt” nhờ vào cơ chế inverted index, khả năng phân tích ngôn ngữ tự nhiên, và hiệu năng vượt trội.
👉 Trong DevOps, đừng build search bằng SQL — đó là sai lầm kinh điển của người mới.