Về cơ bản cho nhiệm vụ này, bạn có thể sử dụng hiệu quả bất kỳ cơ sở dữ liệu SQL nào với sự hỗ trợ tốt của các chỉ mục dựa trên cây B + (MySQL sẽ bộ bạn cần hoàn hảo).
Tạo 3 bảng:
- Bảng tài liệu, cột: id / document
- Bảng N-gram: n_gram_id / n_gram
- Ánh xạ giữa n-gram và tài liệu: document_id / n_gram_id
Tạo các chỉ mục trên bảng N-gram / chuỗi n_gram và Bảng ánh xạ / n_gram_id, các khóa chính cũng sẽ được lập chỉ mục theo mặc định.
Hoạt động của bạn sẽ hiệu quả:
- Chèn tài liệu: chỉ cần trích xuất tất cả n-gram và chèn vào bảng tài liệu và bảng N-gram
- Tra cứu in_gram sẽ nhanh chóng với sự hỗ trợ của chỉ mục
- Truy vấn cho tất cả n-gram có chứa một n-gram phụ: trong 2 bước - chỉ cần truy vấn dựa trên chỉ mục tất cả n-gram có chứa tiểu n-gram từ bảng 2. Sau đó - lấy tất cả các tài liệu tương ứng cho mỗi n-gram này.
Bạn thậm chí không cần sử dụng các phép nối để đạt được tất cả các hoạt động này vì vậy các chỉ mục sẽ giúp ích rất nhiều. Ngoài ra, nếu dữ liệu sẽ không được kết hợp trong một máy - bạn có thể triển khai chương trình shending, như lưu trữ n_gram được bắt đầu từ một máy chủ và oz trên máy khác hoặc sơ đồ phù hợp khác.
Ngoài ra, bạn có thể sử dụng MongoDB, nhưng tôi không chắc chính xác bạn cần thực hiện sơ đồ lập chỉ mục như thế nào. Đối với MongoDB, bạn sẽ nhận được chương trình shending miễn phí vì nó đã được tích hợp sẵn.