Tôi đã xem Adrien Grand's talk on Lucene's index architecture và một điểm mà anh ta tạo ra là Lucene sử dụng các mảng được sắp xếp để biểu diễn phần từ điển của các chỉ số đảo ngược của nó. Lý do đằng sau việc sử dụng các mảng được sắp xếp thay vì các bảng băm (cấu trúc dữ liệu chỉ mục "cổ điển" ngược) là gì?Tại sao Lucene sử dụng mảng thay vì các bảng băm cho chỉ mục đảo ngược của nó?
Bảng băm cung cấp O (1) chèn và truy cập, mà với tôi có vẻ như nó sẽ giúp rất nhiều với xử lý nhanh các truy vấn và hợp nhất các phân đoạn chỉ mục. Mặt khác, các mảng được sắp xếp chỉ có thể cung cấp truy cập O (logN) và chèn (O), mặc dù sáp nhập 2 mảng được sắp xếp có cùng độ phức tạp như hợp nhất 2 bảng băm. Một trong những nhược điểm duy nhất cho bảng băm mà tôi có thể nghĩ là dấu chân bộ nhớ lớn hơn (điều này thực sự có thể là vấn đề) và ít thân thiện với bộ nhớ cache hơn (mặc dù các hoạt động như truy vấn mảng được sắp xếp yêu cầu tìm kiếm nhị phân, cũng giống như bộ nhớ cache không thân thiện) .
Vậy có chuyện gì? Các nhà phát triển Lucene phải có một lý do rất tốt để sử dụng mảng. Có liên quan gì đến khả năng mở rộng không? Tốc độ đọc đĩa? Cái gì khác hoàn toàn?
câu hỏi tuyệt vời! – Eugene
Nhiều lý do tại sao Lucene không sử dụng bảng băm đã được cung cấp bởi @Ivan trong câu trả lời này: https://stackoverflow.com/a/48053519/1697566 –