-->
ads here

Tổng quan về Elasticsearch

advertise here
Chắc hẳn, phần lớn chúng ta đã từng lên một trang thương mại điện tử và gõ vào thanh tìm kiếm một từ khoá về một sản phẩm nào đó! Và các bạn có tự hỏi làm sao chúng ta gõ từ khoá “one” thì kết quả sẽ trả về là “one direction” hay “Bã xã em number one” thay vì “phone” hay “zone” chưa? Trong bài viết hôm nay mình sẽ giới thiệu về một công cụ để làm đc điều này. Đó là Elasticsearch.
Nội dung bài viết của chúng ta gồm 3 phần như sau:
  1. Elasticsearch là gì? Nó được dùng để làm gì? Vì sao cần dùng Elasticsearch
  2. Một số khái niệm căn bản của Elasticsearch
  3. Ưu điểm, nhược điểm của ES
OK, let’s begin!
enter image description here

1.Elasticsearch là gì? Nó được dùng để làm gì? Vì sao cần dùng Elasticsearch

1.1. What is Elasticsearch?

Theo định nghĩa trên trang chủ của ES:
Elasticsearch is a distributed, open source search and analytics engine for all types of data, including textual, numerical, geospatial, structured, and unstructured. Elasticsearch is built on Apache Lucene and was first released in 2010 by Elasticsearch N.V. (now known as Elastic). Known for its simple REST APIs, distributed nature, speed, and scalability, Elasticsearch is the central component of the Elastic Stack, a set of open source tools for data ingestion, enrichment, storage, analysis, and visualization. Commonly referred to as the ELK Stack (after Elasticsearch, Logstash, and Kibana), the Elastic Stack now includes a rich collection of lightweight shipping agents known as Beats for sending data to Elasticsearch.
ES là một công cụ hỗ trợ tìm kiếm các loại dữ liệu dạng văn bản, bên cạnh đó còn hỗ trợ tính năng thu thập, thống kê và đánh gía kết quả tìm kiếm

1.2. Elasticsearch được dùng để làm gì?

Một số ứng dụng nổi bật của ES có thể kể đến như sau:
  • Công cụ tìm kiếm trong website hay trang thương mại điện tử: Ví dụ điển hình là bạn có thể lên một số trang Thương mại điện tử bạn sẽ luốn thấy những thanh tìm kiếm, tại đó bạn có thể gõ từ khoá mà mình cần tìm và nhận được kết quả mong muốn
    enter image description here
  • Ngoài ra, nếu bạn có 1 tập dữ liệu mà cần phải trực quan hoá hoặc cần phân tích dưới dạng thống kê, xu hướng … thì bạn có thể dùng các công cụ Logstash hoặc Kibana trong Elasticsearch để làm điều này.
Trong phạm vi bài viết này sẽ tập trung chủ yếu vào tính năng Full text search của Elasticsearch.

1.3. Vì sao chúng ta cần dùng Elasticsearch

  • Elasticsearch is fast: Elasticsearch thực sự rất nhanh vì nó được xây dựng trên nền tảng Lucene (một thư viện cực kì mạnh về full-text search, được viết bằng Java bởi Doug Cutting). Độ trễ của việc indexing document cho đến khi có thể tìm kiếm của ES rất ngắn (tầm 1s), nên rất thích hợp cho các use-case cần về thời gian như security analytics hay infrastructure monitoring.
  • Elasticsearch is distributed by nature: Các document trong ES được phân tán trên nhiều container khác nhau hay còn gọi là Shard. Shard sẽ được nhân bản trong trường hợp phần cứng hỏng. Khả năng phân tán của Elasticsearch cho phép ta có thể scale up lên hàng trăm hay hàng ngàn server và xử lý lượng dữ liệu tới hàng petabytes
  • Elasticsearch comes with a wide set of features: Ngoài tốc độ, khả năng scale và khôi phục dữ liệu, Elasticsearch còn có nhiều tính năng hỗ trợ cho việc lưu trữ và tìm kiếm dữ liệu hiệu quả hơn như: rollup hay index lifecycle management
Trong phần tiếp theo chúng ta sẽ tìm hiểu các khái niệm căn bản cần biết trong Elasticsearch

2. Các khái niệm căn bản

Document

Là một JSON object chứa dữ liệu, là đơn vị nhỏ nhất để lưu trữ dữ liệu trong Elasticsearch

Index

Khái niệm này khác với khái niệm index trong SQL nhé. Trong Elasticsearch, có một cấu trúc được sử dụng tên là inverted index, cấu trúc này cho phép tìm kiếm full-text search rất nhanh.
Cách thức hoạt động của nó là phân tách các văn bản thành những term hay token, sau đó map xem từng từ sẽ thuộc văn bản nào.
Ví dụ ta có 2 document như sau
  • Doc_1: The quick brown fox jumped over the lazy dog
  • Doc_2: Quick brown foxes leap over lazy dogs in summer
Để bắt đầu tạo một inverted index, ta tiến hành liệt kê các term có trong Doc_1 và Doc_2 sau đó đánh dấu xem term nào thuộc document nào
Term Doc_1 Doc_2
Quick X
The X
brown X X
dog X
dogs X
fox X
foxes X
in X
jumped X
lazy X X
leap X
over X X
quick X
summer X
the X
Giờ giả sử ta tìm từ khoá quick brown thì ta tra trong bảng sẽ được
Term Doc_1 Doc_2
quick X
brown X X
Total 2 1
Như ta có thể thế, cả 2 tài liệu đều thích hợp với từ khoá, nhưng Doc_1 chính xác hơn.

Shard

Một index có thể chứa rất nhiều dữ liệu, và có thể vượt ra ngoài khả năng của phần cứng, vì vậy Elasticsearch cho phép bạn phân mảnh index thành các phần nhỏ hơn gọi là Shard.
Vai trò của Shard:
  • Cho phép phân mảnh theo chiều ngang để mở rộng khối lượng bản ghi
  • Cho phép xử lý phân tán và làm việc song song nhằm tăng hiệu suất

Replica shard

Replica shard là một bản sao của shard nhằm đảm bảo tính toàn vẹn dữ liệu nếu có vấn đề xảy ra với Shard. Replica Shard không bao giờ được để cùng chỗ với Shard để tránh trường hợp hư hỏng, đồng thời với Replica Shard ta có thể mở rộng khả năng tìm kiếm vì có thể thực hiện tìm kiếm song song trên các bản sao

Node

Là một server đơn lẻ lưu trữ dữ liệu của bạn. Node có nhiệm vụ đánh index và thực hiện thao tác tìm kiếm dữ liệu. Mỗi node được đặt tên bằng 1 định danh duy nhất unique name

Cluster

Là tập hợp một hay nhiều node cùng nắm giữ toàn bộ data, cung cấp khả năng lập chỉ mục và tìm kiếm liên kết giữa các node với nhau. Cluster có trách nhiệm phân bổ xem shard nào sẽ nằm ở node nào. Mỗi Cluster cũng được định danh bằng unique name.
Mỗi cluster có một node master được lựa chọn ngẫu nhiên và có thể thay thế được nếu có sự cố xảy ra. Các node trong Cluster có thể ở trên cùng một server, tuy nhiên trong thực tế, thường mỗi node nằm ở các server khác nhau, để nếu có sự cố xảy ra trên một server thì các node khác vẫn hoạt động bình thường.

Near Realtime (NRT)

Elasticsearch là một nền tảng có Near Reatime, tức nghĩa thời gian thực hiện của thuật toán rất nhỏ, gần với thời gian thực. Độ trễ thường là tầm 1s cho thời gian lập chỉ mục đến khi ra kết quả tìm kiếm

3. Ưu - nhược điểm của Elasticsearch

Ưu điểm

  • Elasticsearch tìm kiếm dữ liệu rất nhanh chóng
  • Có khả năng phân tích dữ liệu với các công cụ built-in
  • Khả năng mở rộng theo chiều ngang
  • Hỗ trợ tìm kiếm mờ (fuzzy): khi key word sai chính tả hay cú pháp thì vẫn có thể có kết quả tốt
  • Hỗ trợ rất nhiều ngôn ngữ lập trình như: Java, JS, .Net, PHP, Python…

Nhược điểm

  • Elasticsearch được sinh ra với mục đích tìm kiếm, nên các thao tác khác ngoài search như CRUD rất kém so với MySQL hay MongoDB, vì vậy Elasticsearch không được dụng như database lưu trữ dữ liệu
  • Trong Elasticsearch, không có khái niệm Database transaction, tức là không đảm bảo toàn vẹn dữ liệu với các thao tác Insert, Delete, Update.

Kết luận

Qua bài viết trên, mình đã cung cấp cho các bạn một cái nhìn tổng quan và điểm qua một số khái niệm của Elasticsearch cũng như ưu và nhược điểm của nó. Hi vọng từ đây các bạn có thêm kiến thức về Elasticsearch để sử dụng trong công việc của mình. Thanks.

Reference

Advertisement
COMMENTS ()