2012-01-26 29 views
7

Tôi quan tâm đến việc chạy Lucene.NET cho một ứng dụng chạy trong các cụm Windows. Các vấn đề tìm kiếm chính nó là hợp lý nhỏ, nhưng vấn đề không trạng thái/cụm vẫn phải được xử lý.Tùy chọn cho phân cụm Lucene.NET?

Tôi hiểu rằng SOLR xử lý kịch bản của tôi (và hơn thế nữa) nhưng yêu cầu một thùng chứa servlet (và Java) đặt ra một số vấn đề đối với tôi. Tùy thuộc vào sự phức tạp của một phương pháp dựa trên Lucene.NET nó vẫn có thể là một tùy chọn lọ, mặc dù.

câu hỏi của tôi bây giờ là những tùy chọn Tôi có để xử lý các vấn đề về chạy trên nhiều host:

  • Persist trên một lưu trữ chia sẻ, phổ biến đối với tất cả các nút? Lucene.NET sẽ xử lý đồng thời một cách minh bạch? Các máy chủ sẽ sử dụng RAM để lưu vào bộ nhớ đệm và liệu Lucene.NET có xử lý việc vô hiệu hóa tính năng này dựa trên các tệp được cập nhật một cách minh bạch không?

  • Sao chép? Mỗi máy chủ có bản sao riêng của mình về mọi thứ cần thiết. Trên bất kỳ bản cập nhật nào, tất cả các máy chủ đều nhận được một bản sao mới (hoặc khác nếu điều này là đơn giản hợp lý). Các công cụ hiện có cho điều này, hoặc tùy thuộc vào tôi để xử lý?

  • Phân vùng/phân đoạn tải công việc? Mỗi máy chủ chỉ xử lý dữ liệu của riêng nó, cả cho đọc và cập nhật. Công cụ để xử lý điều này, tham gia một phần kết quả vv?

  • Các tùy chọn khác mà tôi có thể đã bỏ lỡ trong lần điều tra ban đầu của mình?

Khi thử nghiệm với phiên bản cục bộ, thư mục Lucene của tôi có thứ tự vài trăm meg. Lâu dài tôi có thể thấy 1-5 GB có lẽ. Nếu tần suất cập nhật là một khó khăn, tôi có thể kiểm soát điều này khá linh hoạt. Số lượt đọc/tìm kiếm đồng thời được mong đợi là rất vừa phải.

+1

Không phải là câu trả lời trực tiếp, nhưng hãy xem elasticsearch (http://www.elasticsearch.org/) - xử lý hầu hết các nhu cầu của bạn khá dễ dàng. – Mikos

+0

Điều gì, nếu có, yêu cầu nào bạn có để giữ cho dữ liệu của bạn được đồng bộ giữa các thành viên cụm sao? Chúng tôi đang ở giữa triển khai cụm quy mô khá lớn của Lucene.NET và tôi có thể cung cấp một số hướng dẫn nếu tôi hiểu tình hình của bạn tốt hơn. –

Trả lời

0

Bạn có thể sử dụng lucene.net với nhiều máy chủ nhưng bạn phải triển khai máy chủ lập chỉ mục.

Tất cả thay đổi bạn thực hiện sẽ được xếp hàng đợi và mọi chỉ mục hiện tại và một lần nữa đều lập chỉ mục các tài liệu đang chờ xử lý. Ngoài ra, bạn nên lập chỉ mục ngay lập tức nếu x mục nằm trong hàng đợi (x phụ thuộc vào cài đặt tài liệu hợp nhất của bạn là 25.000 cho tôi).

Lý do đằng sau bên trên là bạn cần tránh thực hiện các thay đổi nhỏ đối với chỉ mục vì điều này sẽ làm giảm thời gian làm thêm do nhiều tệp nhỏ được tạo. Uou có thể chạy 2 máy chủ lập chỉ mục nhưng chỉ 1 sẽ lập chỉ mục tại một thời điểm do khóa trên chỉ mục, lý do duy nhất để làm điều này là không thành công nếu lần đầu tiên đi xuống, phụ thuộc vào nhu cầu của bạn.

Tôi đã sử dụng chỉ mục 15Gb với 30 triệu bản ghi. Kịch bản tôi đã có với điều này là dưới azure.

  • 1 thợ vai chỉ số thay đổi

  • 2 - 20 vai trò web phục vụ nội dung từng nắm giữ chỉ số.

Thay đổi được đẩy mỗi 15 phút và chỉ mục được hợp nhất với 25.000 thay đổi và mỗi chỉ mục kết hợp chứa 250.000 tài liệu. Mỗi máy chủ web kiểm tra lưu trữ blob để thay đổi mỗi 15 phút và khóa trình đọc chỉ mục sau đó bị vô hiệu hóa nếu các thay đổi được tải xuống. Tài liệu tối đa của bạn cho mỗi tệp về cơ bản là dừng máy chủ web tải xuống nhiều thay đổi trước đó.

Tôi đã sử dụng Lucene.AzureDirectory để bắt đầu nhưng không đáng tin cậy khi phát hiện các đốm màu đã thay đổi trong bộ nhớ blob, vì vậy tôi đã lặp lại các đốm màu và so sánh cục bộ và tải xuống nếu cần.

Bây giờ tôi sẽ thực hiện lại điều gì đó như thế này? câu trả lời là không lớn. Tôi sẽ sử dụng elasticsearch hoặc solr thay vì bạn đang tái phát minh bánh xe.

Các vấn đề liên quan