Database Fulltextsearch, Redis Fulltextsearch, hay là Elastic Search
Xin chào mọi người em là newbie backend,
Mấy ngày hôm nay em cũng có tìm hiểu về tìm kiếm, em thấy khá nhiều thứ hỗ trợ fulltext search, ví dụ mysql, redis, elastic search, mà em không hiểu cách hoạt động của những thứ này, ưu và nhược điểm của nó, và khi nào nên dùng cái nào, em thấy trong Elastic Search nó có một thứ gọi là fuzzy search cho phép chúng ta tìm ra kết quả gần đúng, có phải nó được sử dụng nhiều là vì vậy( kèm theo combo ELK của nó)
2 CÂU TRẢ LỜI
Chào bạn newbie backend,
Haha, câu hỏi của bạn hay đấy! Như một chú chim non mới tập bay vào thế giới tìm kiếm vậy.
Nói ngắn gọn:
- MySQL/PostgreSQL (Fulltext Search): Cơ bản, sẵn có, dùng cho những database đơn giản và nhu cầu tìm kiếm không phức tạp. Tưởng tượng như một chú gà con, chạy nhảy trong vườn nhà thôi, đơn giản mà dễ thương.
- Redis (Fulltext Search): Nó nhanh hơn MySQL nhưng không phải chuyên dụng cho fulltext search, thường dùng cho caching hoặc những trường hợp cần lấy dữ liệu cực nhanh. Như một chú thỏ, nhảy nhót nhanh nhưng không chuyên săn mồi.
- Elasticsearch: Siêu xe trong thế giới tìm kiếm. Nhanh, mạnh, nhiều tính năng, đặc biệt là Fuzzy search (tìm kiếm gần đúng) như bạn nói. Elasticsearch + Kibana + Logstash (ELK) thì như một đội đua xe chuyên nghiệp, xử lý được lượng lớn dữ liệu phức tạp.
Ưu nhược điểm:
Feature | MySQL/PG | Redis | Elasticsearch |
---|---|---|---|
Tốc độ | Trung bình | Siêu nhanh | Siêu nhanh |
Tính năng | Cơ bản | Hạn chế | Siêu nhiều |
Phức tạp | Dễ | Dễ | Khá phức tạp |
Chi phí | Thấp | Trung bình | Có thể cao |
Khi nào nên dùng?
- MySQL/PG: Website nhỏ, lưu trữ dữ liệu ít, tìm kiếm đơn giản.
- Redis: Cần cache kết quả tìm kiếm, hoặc tìm kiếm nhanh trên tập dữ liệu nhỏ.
- Elasticsearch: Website lớn, dữ liệu nhiều, cần tìm kiếm phức tạp, phân tích dữ liệu.
Fuzzy Search: Đúng rồi, Fuzzy search là điểm mạnh của Elasticsearch, cho phép tìm kiếm gần đúng, rất hữu ích khi người dùng nhập sai chính tả.
Lời khuyên cho bạn: Nếu đang là newbie thì hãy tập trung làm quen với MySQL/PG trước đã, sau đó thử sức với Elasticsearch lúc nào bạn thấy cần một "siêu xe" trong project của mình.
Hy vọng là bạn hiểu thêm một chút về thế giới tìm kiếm rồi nhé! Cố gắng lên!
Redis sẽ lưu data trong cache ở ram và search với tốc độ nhanh , els thì lại lưu vào disk có một số thuật toán giúp cho nó search rất nhưng , hiện tại một số db cũng hỗ trợ search fulltext rất nhanh như Mongo.
Mà dùng db + redis sẽ hợp lý hơn so với dùng với els mình nghĩ thế , do khi chạy project bắt buộc phải lưu data đồng bộ vào cả els . Mình nghĩ thế không biết đúng không
Cảm ơn vì phản hồi của bạn
Fulltext search trong database có hỗ trợ ví dụ như mysql thì nó có giới hạn ví dụ như là nó khá cứng nhắc, không cho phép sai số
ES chuyên dụng hơn, rất nhiều cấu hình
Mình nghĩ lại là nên dùng db để lưu trữ dữ liệu, redis để cache, kết hợp ES để làm fulltext search
"Right tool for the right job"