chúng tôi đang thiết kế kiến trúc tìm kiếm cho ứng dụng web của công ty. Chúng tôi sẽ sử dụng Lucene.net cho việc này. Các chỉ mục sẽ không lớn (khoảng 100.000 tài liệu), nhưng dịch vụ tìm kiếm phải luôn được cập nhật và luôn được cập nhật. Sẽ có các tài liệu mới được thêm vào chỉ mục tất cả thời gian và tìm kiếm đồng thời. Vì chúng ta phải có sẵn sàng cao cho hệ thống tìm kiếm, chúng tôi có 2 máy chủ ứng dụng hiển thị dịch vụ WCF để thực hiện tìm kiếm và lập chỉ mục (bản sao dịch vụ đang chạy trong mỗi máy chủ). Máy chủ sau đó sử dụng API lucene.net để truy cập vào các chỉ mục.Đồng bộ hóa các chỉ mục Lucene.net trên nhiều máy chủ ứng dụng
Vấn đề là, giải pháp nào tốt nhất để giữ cho các chỉ mục đồng bộ hóa mọi lúc? Chúng tôi đã xem xét một vài lựa chọn:
Sử dụng một máy chủ cho chỉ mục và có quyền truy cập máy chủ thứ 2 là chỉ qua SMB: không thể làm bởi vì chúng tôi có một điểm duy nhất của thất bại tình hình;
Lập chỉ mục cho cả hai máy chủ, về cơ bản viết mọi chỉ mục hai lần: có thể hiệu suất tệ hại và khả năng hủy bỏ nếu ví dụ. máy chủ 1 chỉ mục OK và máy chủ 2 chạy ra khỏi không gian đĩa hoặc bất cứ điều gì;
Sử dụng SOLR hoặc KATTA để truy cập vào các chỉ mục: không, chúng tôi không thể có tomcat hoặc chạy tương tự trên máy chủ, chúng tôi chỉ có IIS.
Lưu trữ chỉ mục trong cơ sở dữ liệu: Tôi thấy điều này có thể được thực hiện với phiên bản java của Lucene (mô-đun JdbcDirectory), nhưng tôi không thể tìm thấy bất kỳ điều gì tương tự cho Lucene.net. Ngay cả khi nó có nghĩa là một hit hiệu suất nhỏ, chúng tôi sẽ đi cho tùy chọn này bởi vì nó sẽ giải quyết vấn đề đồng thời và đồng bộ hóa với sự phát triển mininum.
Sử dụng Lucene.net Mô-đun phân phối tìm kiếm phân phối: Tôi không thể gửi liên kết đơn với tài liệu về điều này. Tôi thậm chí không biết bằng cách nhìn vào mã những gì mã này không, nhưng có vẻ như với tôi rằng nó thực sự chia tách chỉ mục trên nhiều máy, mà không phải là những gì chúng ta muốn.
rsync và bạn bè, sao chép chỉ mục qua lại giữa 2 máy chủ: điều này cảm thấy bị hack và dễ bị lỗi, và nếu chỉ số phát triển lớn, có thể mất một thời gian, và trong thời gian này, chúng tôi sẽ trả về dữ liệu bị hỏng hoặc không nhất quán cho khách hàng, vì vậy chúng tôi phải phát triển một số chính sách khóa quảng cáo, mà chúng tôi không muốn.
Tôi hiểu đây là một vấn đề phức tạp, nhưng tôi chắc chắn rất nhiều người đã phải đối mặt với nó trước đây. Bất kỳ trợ giúp được chào đón!
Sean, đây hiện là tùy chọn ứng viên của chúng tôi. Tôi đồng ý với bạn và itsadok rằng nó có vẻ là sự lựa chọn tốt nhất. Tôi cũng đang cố gắng tìm các nguồn cho JdbcDirectory để xem một cổng đến .NET + SQL server có khả thi hay không. Sẽ tiếp tục mở câu hỏi trong một thời gian để xem có cách tiếp cận mới nào không, sẽ chấp nhận câu trả lời này theo cách khác. –
Tôi đã kiểm tra cùng một điều. Nó không có vẻ giá trị nỗ lực như có một bó của DB giao dịch liên quan đến công cụ đó không phải là tầm thường để cổng để. Net. Cũng có những phàn nàn về tốc độ giảm sử dụng các công cụ JDBCDirectory. Nguồn nằm trong dự án Compass - http://svn.compass-project.org/svn/compass/trunk/src/main/src/org/apache/lucene/store/jdbc/ –
Sau khi suy nghĩ, đây là những gì Tôi xem là giải pháp khả thi nhất: khi nhận được yêu cầu lập chỉ mục/deindexing, chèn một hàng vào bảng db được chia sẻ hoạt động như một hàng đợi. Thực hiện một dịch vụ win32 đơn giản chạy trong cả hai máy chủ ứng dụng và thăm dò hàng đợi mỗi X giây, lập chỉ mục nội dung cục bộ. Khi nội dung được lập chỉ mục thành công, dịch vụ sẽ đánh dấu mục đó là đã xử lý, nếu không nó sẽ tiếp tục cố gắng. –