Có một vài chủ đề nổi xung quanh chủ đề, nhưng tôi nghĩ rằng trường hợp sử dụng của tôi hơi khác.Tìm kiếm toàn văn trên Google App Engine (Java)
Những gì tôi muốn làm:
- Full phần tìm kiếm văn bản cho ứng dụng GAE/J tôi
- Kích thước chỉ là nhỏ: 25-50 MB hoặc lâu hơn
- Tôi không cần cập nhật trực tiếp tới chỉ mục, lập chỉ mục lại định kỳ là tốt
- Điều này là để hoàn thành tự động và tương tự, vì vậy cần phải cực nhanh (Tôi nhận thấy rằng việc triển khai chỉ số đảo ngược trong Datastore giới thiệu độ trễ đáng kể)
Chiến lược của tôi cho đến nay (chỉ cần lên kế hoạch, đã không cố gắng thực hiện bất cứ điều gì chưa):
- Sử dụng Lucene với RAMDirectory
- Một công việc cron kỳ lập chỉ mục, serializes nó vào Datastore, lưu trữ một bản cập nhật id (hoặc timestamp)
- Tìm kiếm servlet tải chỉ số khi khởi động và tạo ra RAMDirectory
- trên mỗi yêu cầu servlet kiểm tra bản cập nhật id hiện tại và tải lại các chỉ số khi cần thiết
Điều chính tôi đang mờ là làm thế nào để đồng bộ hóa dữ liệu trong bộ nhớ giữa các trường hợp - sẽ làm việc này, hoặc tôi thiếu cái gì?
Ngoài ra, tôi có thể đẩy nó bao xa trước khi bắt đầu gặp sự cố khi sử dụng bộ nhớ? Tôi không thể tìm thấy bất cứ điều gì về hạn ngạch RAM cho GAE. (Chỉ mục này nhỏ, nhưng tôi có thể nghĩ nhiều thứ hơn tôi muốn thêm)
Và, tất nhiên, có suy nghĩ nào về cách tiếp cận tốt hơn không?
Memory tách biệt giữa các trường GAE, do đó, một thư mục RAM thẳng lên sẽ không được chia sẻ giữa chúng. Bạn sẽ phải khởi tạo nó cho mỗi cá thể khi khởi động. Điều này có thể không quá tệ đối với các máy chủ dự phòng và yêu cầu khởi động mới. –
Vâng, vâng, đó là một phần của những gì tôi đã nêu ở trên ... – Dmitri