Tôi có một vấn đề sau: Tôi có một cơ sở dữ liệu chứa hơn 2 triệu hồ sơ. Mỗi bản ghi có một trường chuỗi X và tôi muốn hiển thị danh sách các bản ghi cho trường X chứa một chuỗi nhất định. Mỗi bản ghi có kích thước khoảng 500 byte.
Để làm cho nó cụ thể hơn: trong GUI của ứng dụng của tôi, tôi có một trường văn bản nơi tôi có thể nhập một chuỗi. Phía trên trường văn bản tôi có một bảng hiển thị các bản ghi (N đầu tiên, ví dụ 100) khớp với chuỗi trong trường văn bản. Khi tôi nhập hoặc xóa một ký tự trong trường văn bản, nội dung bảng phải được cập nhật nhanh chóng.
Tôi tự hỏi nếu có một cách hiệu quả để làm điều này bằng cách sử dụng các cấu trúc chỉ mục và / hoặc bộ nhớ đệm phù hợp. Như đã giải thích ở trên, tôi chỉ muốn hiển thị N mục đầu tiên phù hợp với truy vấn. Do đó, đối với N đủ nhỏ, việc tải các mục phù hợp từ cơ sở dữ liệu không phải là vấn đề lớn. Bên cạnh đó, các mục lưu trữ trong bộ nhớ chính có thể giúp truy xuất nhanh hơn.
Tôi nghĩ vấn đề chính là làm thế nào để tìm thấy các mục phù hợp một cách nhanh chóng, được đưa ra chuỗi mẫu. Tôi có thể dựa vào một số cơ sở DBMS không, hoặc tôi phải tự xây dựng một số chỉ mục trong bộ nhớ? Có ý kiến gì không?
CHỈNH SỬA
Tôi đã chạy thử nghiệm đầu tiên. Tôi đã chia các bản ghi thành các tệp văn bản khác nhau (tối đa 200 bản ghi cho mỗi tệp) và đặt các tệp vào các thư mục khác nhau (Tôi đã sử dụng nội dung của một trường dữ liệu để xác định cây thư mục). Tôi kết thúc với khoảng 50000 tệp trong khoảng 40000 thư mục. Tôi đã chạy Lucene để lập chỉ mục các tập tin. Tìm kiếm một chuỗi với chương trình demo Lucene khá nhanh. Việc chia tách và lập chỉ mục mất vài phút: điều này hoàn toàn chấp nhận được đối với tôi vì đây là một tập dữ liệu tĩnh mà tôi muốn truy vấn.
Bước tiếp theo là tích hợp Lucene trong chương trình chính và sử dụng các lần truy cập được Lucene trả về để tải các bản ghi liên quan vào bộ nhớ chính.