Trước hết chúng ta phải xác định một "viết" hoạt động. Thao tác ghi sẽ phản đối khóa khi bạn bắt đầu thao tác ghi và sẽ tiếp tục cho đến khi bạn đóng đối tượng đang thực hiện tác vụ. Chẳng hạn như tạo một IndexWriter và lập chỉ mục một tài liệu sẽ làm cho ghi để đối tượng một khóa và nó sẽ giữ khóa này cho đến khi bạn đóng IndexWriter.
Bây giờ chúng ta có thể nói về khóa một chút. Khóa này là đối tượng là khóa dựa trên tệp. Giống như mythz đã đề cập trước đó, có một tập tin gọi là 'write.lock' được tạo ra. Khi khóa ghi được phản đối, nó là độc quyền! Khóa này làm cho tất cả các hoạt động sửa đổi chỉ mục (IndexWriter và một số phương thức từ IndexReader) phải chờ cho đến khi khóa được gỡ bỏ.
Nhìn chung, bạn có nhiều lần đọc trên chỉ mục. Bạn thậm chí có thể đọc và viết cùng một lúc, không có vấn đề gì. Nhưng có một vấn đề khi có nhiều nhà văn. Nếu một sợi đang chờ khóa quá lâu, nó sẽ hết thời gian chờ.
1) Giải pháp # 1 Operations Direct
Nếu bạn chắc chắn rằng các hoạt động lập chỉ mục của bạn là ngắn và nhanh chóng, bạn có thể chỉ cần sử dụng các chỉ số tương tự cùng một lúc. Nếu không, bạn sẽ phải suy nghĩ về cách bạn muốn tổ chức các hoạt động lập chỉ mục của các ứng dụng.
2) Giải pháp # 2 Web Service
Vì bạn đang làm việc với một giải pháp web nó có thể là có thể tạo ra một dịch vụ web. Khi triển khai dịch vụ web này, tôi sẽ dành một chuỗi công nhân để lập chỉ mục. Tôi sẽ tạo ra một hàng đợi công việc để chứa công việc và nếu hàng đợi chứa nhiều công việc để làm, nó sẽ lấy tất cả chúng và làm chúng thành hàng loạt. Điều này sẽ giải quyết tất cả các vấn đề.
3) tạo ra chỉ số khác, sau đó sáp nhập
Nếu ứng dụng giao diện điều khiển không làm việc nặng về chỉ số bạn có thể nhìn vào có ứng dụng giao diện điều khiển bạn có thể tạo ra một chỉ số riêng biệt trong việc áp dụng giao diện điều khiển và sau đó hợp nhất các chỉ mục tại một số thời gian được lập lịch an toàn bằng cách sử dụng IndexWriter.AddIndexes.
từ đây bạn có thể thực hiện việc này theo hai cách, bạn có thể hợp nhất với chỉ mục trực tiếp. Hoặc bạn có thể hợp nhất để tạo chỉ mục thứ 3 và sau đó khi chỉ mục này sẵn sàng thay thế chỉ mục gốc. Bạn phải cẩn thận trong những gì bạn làm ở đây cũng như để đảm bảo rằng bạn sẽ không khóa một cái gì đó trong sử dụng nặng và gây ra một thời gian chờ cho các hoạt động viết khác.
4) Index & Tìm kiếm nhiều chỉ số
Cá nhân tôi nghĩ mọi người cần phải tách biệt các chỉ số của họ ra. Điều này giúp phân chia trách nhiệm của các chương trình và giảm thiểu thời gian xuống và duy trì việc có một điểm duy nhất cho tất cả các chỉ mục. Ví dụ: nếu ứng dụng bảng điều khiển của bạn chỉ chịu trách nhiệm cho việc thêm vào một số trường nhất định hoặc bạn đang mở rộng chỉ mục, bạn có thể xem xét các chỉ mục riêng biệt, nhưng duy trì danh tính bằng cách sử dụng trường ID trong mỗi tài liệu. Bây giờ với điều này bạn có thể tận dụng lợi thế của việc xây dựng trong hỗ trợ cho việc tìm kiếm nhiều chỉ mục bằng cách sử dụng lớp MultiSercher. Hoặc nếu bạn muốn có cũng là một lớp ParallelMultiSearch tốt đẹp có thể tìm kiếm cả hai chỉ mục cùng một lúc.
5) Nhìn vào Solr
Cái gì khác có thể giúp vấn đề của bạn duy trì một nơi duy nhất để bạn có chỉ mục, bạn có thể thay đổi chương trình của bạn để làm việc với một máy chủ Solr. http://lucene.apache.org/solr/ cũng có thư viện SOLRNET http://code.google.com/p/solrnet/ tốt đẹp có thể hữu ích trong trường hợp này. Mặc dù tôi không có kinh nghiệm với solr nhưng tôi dưới ấn tượng rằng nó sẽ giúp bạn quản lý tình hình như thế này. Ngoài ra, nó còn có các lợi ích khác như đánh dấu nhấn và tìm kiếm các mục có liên quan bằng cách tìm các mục "MoreLikeThis", hoặc cung cấp kiểm tra chính tả.
Tôi chắc chắn có nhiều phương pháp khác nhưng đây là tất cả những phương pháp mà tôi có thể nghĩ đến. Nhìn chung, giải pháp của bạn phụ thuộc vào số lượng người đang viết và cách cập nhật chỉ mục tìm kiếm bạn cần. Nhìn chung, nếu bạn có thể trì hoãn một số hoạt động cho lần sau và thực hiện một số thao tác theo lô trong mọi tình huống sẽ mang lại cho bạn hiệu suất cao nhất. Đề nghị của tôi là để hiểu những gì bạn có thể làm việc với và đi từ đó. chúc may mắn
Ồ. Cảm ơn. Tôi đã suy nghĩ của một giải pháp đó là bằng cách nào đó liên quan đến 2_. Trong khi chờ đợi tôi có câu hỏi khác: "Có bao nhiêu chỉ mục có thể hỗ trợ ParallelMultiSearch hoặc MultiSercher"? –