Elaticsearch là một công nghệ phổ biến để lưu trữ và truy xuất dữ liệu hiệu quả và có thể mở rộng. Tuy nhiên, việc duy trì hiệu suất và tính toàn vẹn dữ liệu của nó đòi hỏi một phương pháp quan trọng được gọi là lập chỉ mục lại. Lập chỉ mục là quá trình ban đầu để thêm dữ liệu vào Elaticsearch, trong khi lập chỉ mục lại là điều cần thiết để duy trì độ chính xác của dữ liệu và tối ưu hóa hiệu suất tìm kiếm.
Cho dù bạn là người dùng Elaticsearch dày dạn kinh nghiệm hay mới bắt đầu hành trình của mình, việc hiểu về lập chỉ mục lại là điều quan trọng để duy trì cụm Elaticsearch hiệu quả. Trong bài viết này, chúng ta sẽ đi sâu vào các yếu tố cần thiết về lập chỉ mục lại Elaticsearch, trả lời khi cần thiết, cách kích hoạt nó và các phương pháp hay nhất để tận dụng tối đa cụm Elaticsearch của bạn.
Trong Elaticsearch, việc lập chỉ mục lại giúp duy trì tính toàn vẹn dữ liệu và tăng hiệu suất. Nói một cách đơn giản, đó là quá trình sao chép dữ liệu từ chỉ mục này sang chỉ mục khác. Mặc dù điều này nghe có vẻ đơn giản nhưng nếu không được thực hiện đúng cách, nó có thể gây ra các vấn đề như truy xuất dữ liệu chậm hoặc thậm chí cho kết quả không chính xác.
Hãy tưởng tượng các chỉ mục Elaticsearch của bạn như những thư viện được tổ chức tốt. Theo thời gian, sách có thể cần được cập nhật, sắp xếp lại hoặc thậm chí thay thế. Lập chỉ mục lại cũng giống như sắp xếp lại các kệ thư viện hoặc cập nhật sách để giữ mọi thứ ngăn nắp. Nếu không có nó, thư viện của bạn có thể trở nên vô tổ chức, dẫn đến việc tìm kiếm chậm hơn và dữ liệu của bạn có thể không chính xác.
Sự tương tự này nhấn mạnh tầm quan trọng của việc hiểu việc lập chỉ mục lại trong Elaticsearch. Nó không chỉ là sao chép dữ liệu; đó là việc duy trì tính toàn vẹn của "thư viện" của bạn để tìm kiếm và truy xuất hiệu quả. Chúng ta hãy xem khi nào cần lập chỉ mục lại và cách duy trì nó.
Việc lập chỉ mục lại trở nên cần thiết khi có những thay đổi xảy ra trong ánh xạ hoặc mô hình dữ liệu Elaticsearch của bạn hoặc khi bạn đang tìm kiếm các cải tiến về hiệu suất. Trong phần này, chúng ta sẽ xem xét các tình huống này chi tiết hơn để hiểu các sắc thái xung quanh lý do tại sao cần phải lập chỉ mục lại.
Những thay đổi về cấu trúc trong mô hình dữ liệu đề cập đến những sửa đổi về cách cấu trúc dữ liệu trong Elaticsearch. Những thay đổi này có thể bao gồm những việc như thêm hoặc xóa trường mới hoặc thay đổi loại dữ liệu của trường hiện có.
Việc giới thiệu các trường mới thường yêu cầu lập chỉ mục lại để đảm bảo Elaticsearch biết cách tìm kiếm dữ liệu được lưu trữ trong trường đó một cách hiệu quả. Việc sửa đổi loại dữ liệu yêu cầu hoàn toàn chỉ mục mới vì bạn không thể thay đổi loại dữ liệu tại chỗ. Khi ánh xạ mới đã được tạo cho kiểu dữ liệu đã sửa đổi thì dữ liệu đó cần được lập chỉ mục lại.
Những thay đổi về cấu trúc này yêu cầu lập chỉ mục lại do cách tiếp cận lược đồ khi ghi của Elaticsearch. Elaticsearch lập chỉ mục dữ liệu khi dữ liệu được nhập và bất kỳ thay đổi nào đối với cấu trúc dữ liệu đều có thể dẫn đến sự không nhất quán giữa dữ liệu hiện có và dữ liệu được ghi bằng lược đồ mới. Kết quả là, nếu không lập chỉ mục lại, các truy vấn tìm kiếm có thể mang lại kết quả không mong muốn hoặc không chính xác do lược đồ của các mục dữ liệu không khớp. Điều này có thể có tác động đến cả độ chính xác của dữ liệu và hiệu suất tìm kiếm.
Ánh xạ đóng vai trò là bản thiết kế chi tiết về cách dữ liệu được lập chỉ mục và truy vấn trong Elaticsearch. Khi những ánh xạ này được sửa đổi thì việc lập chỉ mục lại thường được yêu cầu.
Ánh xạ xác định các loại dữ liệu và thuộc tính của các trường trong Elaticsearch. Bất kỳ thay đổi nào đối với các ánh xạ này đều ảnh hưởng đến cách dữ liệu được lập chỉ mục, lưu trữ và truy xuất. Ví dụ: việc thay đổi trường văn bản thành trường ngày về cơ bản sẽ thay đổi cách xử lý và truy vấn dữ liệu. Elaticsearch thực thi tính nhất quán của dữ liệu dựa trên các định nghĩa ánh xạ. Những thay đổi đối với ánh xạ có thể dẫn đến sự không nhất quán giữa dữ liệu hiện có và lược đồ được cập nhật nếu dữ liệu không được lập chỉ mục lại.
Khi ánh xạ được sửa đổi, đặc biệt nếu nó liên quan đến việc thay đổi kiểu dữ liệu hoặc thuộc tính trường, thì việc chèn lấp cũng trở nên quan trọng. Chèn lấp là quá trình điền hoặc cập nhật dữ liệu hiện có trở về trước để căn chỉnh dữ liệu đó với lược đồ hoặc cấu trúc dữ liệu mới. Điều này có nghĩa là dữ liệu hiện có vẫn có thể được truy vấn một cách hiệu quả và chính xác sau khi thay đổi ánh xạ.
Lập chỉ mục lại không chỉ là một nhiệm vụ bảo trì định kỳ mà còn là một công cụ mạnh mẽ để tối ưu hóa hiệu suất tìm kiếm trong Elaticsearch. Ví dụ: lập chỉ mục lại cho phép bạn sửa đổi số lượng phân đoạn trong một chỉ mục. Việc điều chỉnh số lượng phân đoạn hoặc phân chia lại có thể phân phối dữ liệu đồng đều hơn, ngăn khối lượng công việc không đồng đều trên các nút cụ thể để cải thiện hiệu suất tìm kiếm.
Lập chỉ mục lại cũng có thể được sử dụng để hợp nhất các chỉ số lại với nhau. Giả sử bạn có nhiều chỉ mục nhỏ có chung cấu trúc dữ liệu và thường xuyên được truy vấn cùng nhau. Lập chỉ mục lại có thể hợp nhất chúng thành một chỉ mục duy nhất, lớn hơn. Điều này giúp giảm chi phí quản lý nhiều chỉ mục nhỏ, từ đó có thể nâng cao tốc độ tìm kiếm.
Cuối cùng, việc lập chỉ mục lại có thể được sử dụng để cải thiện việc định tuyến. Bằng cách lập chỉ mục lại và áp dụng chiến lược định tuyến một cách hiệu quả, bạn có thể định tuyến truy vấn đến các phân đoạn cụ thể, giảm thiểu số lượng phân đoạn cần tìm kiếm. Cách tiếp cận có mục tiêu này có thể tăng tốc đáng kể các truy vấn tìm kiếm nếu dữ liệu của bạn thường xuyên được tìm kiếm bằng các khóa cụ thể như ID người dùng.
Khi nâng cấp từ Elaticsearch phiên bản 6.X lên 8.0 (phiên bản chính hiện tại) trở lên, bạn có thể cần lập chỉ mục lại bất kỳ chỉ mục nào đã được tạo trong phiên bản 6. Cấu trúc dữ liệu và cơ chế cơ bản của Elaticsearch đã thay đổi đáng kể giữa các phiên bản này, yêu cầu lập chỉ mục lại để có khả năng tương thích và hiệu suất tối ưu .
Quá trình lập chỉ mục lại đảm bảo rằng dữ liệu phù hợp với cấu trúc cập nhật và chức năng mới để đảm bảo bạn có thể di chuyển liền mạch từ cũ sang mới. Elaticsearch khuyên bạn nên sử dụng trợ lý nâng cấp của họ để trợ giúp quá trình này.
Việc lập chỉ mục lại trong Elaticsearch được thực hiện thông qua API Elaticsearch Reindex. API Reindex đóng vai trò là cầu nối giữa chỉ mục hiện tại của bạn và chỉ mục mới mà bạn muốn tạo hoặc sửa đổi. Mục đích chính của nó là cho phép truyền dữ liệu hiệu quả từ chỉ mục này sang chỉ mục khác, trên hết, bạn cũng có thể:
Sao chép có chọn lọc các tài liệu từ chỉ mục nguồn sang chỉ mục đích.
Áp dụng các chuyển đổi dữ liệu phức tạp, chẳng hạn như đổi tên trường hoặc chuyển đổi loại.
Lọc dữ liệu dựa trên các tiêu chí cụ thể.
Kiểm soát quá trình lập chỉ mục bằng các tùy chọn như điều chỉnh và làm mới khoảng thời gian.
Trước khi sử dụng API Reindex, hãy đảm bảo rằng chỉ mục đích nơi bạn muốn di chuyển hoặc chuyển đổi dữ liệu của mình được tạo và định cấu hình đúng cách.
Để kích hoạt lập chỉ mục lại, sau đó bạn cần tạo một yêu cầu POST tới điểm cuối _reindex
, chỉ định các chỉ mục nguồn và đích, cũng như mọi chuyển đổi hoặc bộ lọc mong muốn. Một ví dụ reindex POST yêu cầu có thể trông như sau.
POST /_reindex { "source": { "index": "source_index" }, "dest": { "index": "target_index" }, "script": { "source": "ctx._source.new_field = 'transformed value'" }, "query": { "term": { "category.keyword": "example" } } }
Sau khi yêu cầu của bạn được tạo, bạn có thể gửi yêu cầu tới Elaticsearch, bắt đầu quá trình lập chỉ mục lại. Elaticsearch sẽ bắt đầu sao chép dữ liệu từ chỉ mục nguồn sang chỉ mục đích, theo hướng dẫn đã xác định của bạn.
Sau khi quá trình lập chỉ mục lại hoàn tất, hãy kiểm tra kỹ lưỡng dữ liệu trong chỉ mục mục tiêu để đảm bảo dữ liệu phù hợp với mong đợi của bạn. Ví dụ: bạn có thể so sánh ánh xạ trường giữa chỉ mục nguồn và đích để xác nhận rằng các trường được ánh xạ chính xác trong quá trình lập chỉ mục lại. Bạn cũng có thể truy xuất mẫu tài liệu từ cả chỉ mục nguồn và chỉ mục đích rồi so sánh chúng để xác minh dữ liệu đã được lập chỉ mục lại chính xác.
Khi lập chỉ mục lại trong Elaticsearch, bạn nên làm theo các phương pháp hay nhất này để đảm bảo quy trình lập chỉ mục lại diễn ra suôn sẻ, không bị mất dữ liệu và ít ảnh hưởng đến hoạt động của cụm hiện có.
Trước khi bắt đầu bất kỳ hoạt động lập chỉ mục lại nào, điều quan trọng là phải sao lưu cụm của bạn. Bước phòng ngừa này hoạt động như một mạng lưới an toàn, đưa ra cách hoàn nguyên về trạng thái ban đầu nếu có bất kỳ vấn đề không mong muốn nào phát sinh trong quá trình lập chỉ mục lại.
Chỉ mục nguồn vẫn tồn tại sau khi lập chỉ mục lại, tuy nhiên, nguyên tắc cơ bản là luôn có bản sao dữ liệu đáng tin cậy trước khi thực hiện các thay đổi quan trọng.
Để giảm thiểu rủi ro và thách thức tiềm ẩn trong quá trình lập chỉ mục lại, trước tiên nên thực hiện thao tác trong môi trường tiền sản xuất. Bằng cách đó, bạn có thể xác định và giải quyết mọi vấn đề không lường trước được mà không ảnh hưởng đến hệ thống sản xuất. Sau khi quy trình đã được hoàn thành và xác minh trong môi trường tiền sản xuất, quy trình đó có thể được vận hành một cách an toàn trong môi trường sản xuất.
Điều quan trọng là phải giám sát tài nguyên hệ thống trong quá trình lập chỉ mục lại để tránh gây căng thẳng cho cơ sở hạ tầng của bạn. Việc lập chỉ mục lại có thể tốn nhiều tài nguyên, đặc biệt đối với các tập dữ liệu lớn hơn. Theo dõi chặt chẽ CPU, bộ nhớ, mức sử dụng ổ đĩa và hoạt động mạng có thể giúp tối ưu hóa việc phân bổ tài nguyên, đảm bảo quy trình chạy hiệu quả mà không gây tắc nghẽn hiệu suất. Để kiểm tra việc sử dụng tài nguyên, bạn có thể sử dụng API thống kê nút.
GET /_nodes/stats
Điều này sẽ trả về một phản hồi trông như sau.
{ "_nodes": { "total": 2, "successful": 2, "failed": 0 }, "cluster_name": "my_cluster", "nodes": { "node_id1": { "name": "node_name1", "process": { "cpu": { "percent": 30, } }, "jvm": { "mem": { "heap_used_percent": 40.3, "heap_used_in_bytes": 123456789, "heap_max_in_bytes": 256000000 } } }, "node_id2": { "name": "node_name2", "process": { "cpu": { "percent": 50, } }, "jvm": { "mem": { "heap_used_percent": 60.8, "heap_used_in_bytes": 210987654, "heap_max_in_bytes": 256000000 } } } } }
Nếu bạn thấy việc lập chỉ mục lại quá chuyên sâu, bạn có thể điều tiết quá trình này bằng cách đặt tham số requests_per_second
khi gửi yêu cầu lập chỉ mục lại. Điều này sẽ thêm thời gian ngủ giữa các đợt theo số giây do tham số đặt, để cung cấp khoảng thời gian hồi chiêu giữa các đợt.
Khi quá trình lập chỉ mục lại hoàn tất, bạn nên xác minh dữ liệu trong chỉ mục đích để đảm bảo dữ liệu trông như mong đợi. Quá trình xác thực này phải bao gồm nhiều thử nghiệm khác nhau bao gồm số lượng tài liệu, ánh xạ trường và truy vấn tìm kiếm.
Elaticsearch chắc chắn đã tự khẳng định mình là một giải pháp nổi bật trong không gian phân tích và tìm kiếm NoSQL. Tuy nhiên, đáng để khám phá các giải pháp thay thế cung cấp các cách tiếp cận độc đáo để lập chỉ mục và truy vấn dữ liệu, đặc biệt là giải pháp như Rockset.
Rockset là một giải pháp thay thế dựa trên nền tảng đám mây cho Elaticsearch và cung cấp một góc nhìn khác về lập chỉ mục và truy vấn dữ liệu. Không giống như cách tiếp cận lược đồ khi ghi của Elaticsearch, Rockset cho phép nhập không cần sơ đồ. Dữ liệu có thể được nhập và truy vấn mà không cần định nghĩa lược đồ trả trước, mang lại sự linh hoạt hơn trong việc xử lý các tập dữ liệu không ngừng phát triển mà không cần lập chỉ mục lại.
Trong lĩnh vực quản lý chỉ mục, Rockset được hưởng lợi từ mô hình lập chỉ mục hội tụ của nó, trong đó chỉ mục hàng, chỉ mục cột và chỉ mục tìm kiếm đều được tạo tự động cho dữ liệu khi dữ liệu được nhập vào. Điều này trái ngược với Elaticsearch, nơi các chỉ mục được tạo bởi người dùng và những thay đổi về cấu trúc thường đòi hỏi các thủ tục lập chỉ mục lại tốn thời gian.
Mặc dù Elaticsearch vẫn là một giải pháp mạnh mẽ cho nhiều trường hợp sử dụng khác nhau, nhưng việc khám phá các lựa chọn thay thế như Rockset có thể hữu ích, đặc biệt nếu bạn nhận thấy việc lập chỉ mục lại trong Elaticsearch đang trở thành một hoạt động thường xuyên.
Lập chỉ mục lại là một quy trình cơ bản trong Elaticsearch và rất quan trọng để duy trì hiệu quả và độ chính xác của kết quả tìm kiếm khi cấu trúc dữ liệu phát triển.
Nếu bạn thấy rằng việc lập chỉ mục lại đang trở thành gánh nặng thời gian thường xuyên cho nhóm của mình thì có thể đáng để khám phá các giải pháp thay thế như Rockset. Rockset cung cấp quy trình quản lý chỉ mục hợp lý hơn cho phép các nhà phát triển tập trung vào nhiều hoạt động giá trị gia tăng hơn.