Given:Làm thế nào để thiết lập Lucene/Solr cho một ứng dụng web B2B?
- 1 cơ sở dữ liệu cho mỗi khách hàng (kinh doanh của khách hàng)
- 5000 khách hàng
- Khách hàng có từ 2-2.000 người dùng (trung bình là ~ 100 người dùng/khách hàng)
- 100k đến 10 triệu bản ghi cho mỗi cơ sở dữ liệu
- Người dùng cần tìm kiếm các bản ghi đó thường xuyên (đó là cách tốt nhất để điều hướng dữ liệu của họ)
thông tin Có thể có liên quan:
- Một số khách hàng mới mỗi tuần (bất cứ lúc nào trong giờ làm việc)
- Nhiều máy chủ web và máy chủ cơ sở dữ liệu (người dùng có thể đăng nhập thông qua bất kỳ máy chủ web)
- Hãy ở lại thuyết bất khả tri của ngôn ngữ hoặc sql thương hiệu, vì Lucene (và Solr) có một bề rộng của hỗ trợ
Ví dụ:
Joel Spolsky cho biết trong Podcast #11 rằng sản phẩm ứng dụng web được lưu trữ trên máy chủ của mình, FogBugz On-Demand, sử dụng Lucene. Anh ấy có hàng nghìn khách hàng theo yêu cầu. Và mỗi khách hàng đều có cơ sở dữ liệu riêng của họ.
Họ sử dụng index per client and store it in the client's database. Tôi không chắc chắn về các chi tiết. Và tôi không chắc đây có phải là một bản mod nghiêm trọng cho Lucene hay không.
Các Câu hỏi:
Làm thế nào bạn sẽ thiết lập Lucene tìm kiếm để mỗi khách hàng chỉ có thể tìm kiếm trong cơ sở dữ liệu của nó?
Bạn sẽ thiết lập (các) chỉ mục như thế nào?
Bạn lưu trữ chỉ mục ở đâu?
Bạn có cần thêm bộ lọc cho tất cả các truy vấn tìm kiếm không?
Nếu khách hàng bị hủy, bạn sẽ xóa chỉ mục của họ (một phần của) như thế nào? (Điều này có thể tầm thường - không chắc chắn chưa)
Giải pháp có thể:
Hãy một chỉ số cho từng khách hàng (cơ sở dữ liệu)
- Pro: Tìm kiếm nhanh (hơn một-Index- Phần mềm for-all method). Các chỉ số có liên quan đến kích thước của dữ liệu của khách hàng.
- Con: Tôi không chắc chắn điều này đòi hỏi gì, và tôi cũng không biết điều này có nằm ngoài phạm vi của Lucene hay không.
Có chỉ mục duy nhất, khổng lồ với trường database_name. Luôn bao gồm database_name làm bộ lọc.
- Pro: Không chắc chắn. Có lẽ tốt cho hỗ trợ kỹ thuật hoặc thanh toán dept để tìm kiếm tất cả các cơ sở dữ liệu cho thông tin.
- Con: Tìm kiếm chậm hơn (so với phương pháp chỉ mục cho mỗi khách hàng). Bảo mật thiếu sót nếu bộ lọc truy vấn bị xóa.
Một điều cuối cùng:
tôi cũng sẽ chấp nhận một câu trả lời có sử dụng Solr (phần mở rộng của Lucene). Có lẽ nó phù hợp hơn cho vấn đề này. Không chắc.
Jude, tôi đánh giá cao câu trả lời của bạn, nỗ lực của bạn, và đơn giản là bạn đã dành thời gian ra khỏi lịch trình bận rộn của bạn cho việc này. Tôi sẽ giữ lời khuyên của bạn trong tâm trí, cùng với Shalin và @Mikos. Cảm ơn bạn rất nhiều. –
Đối với tất cả-- tôi chấp nhận câu trả lời của @ Blinky bởi vì anh ấy đã ở đó, làm điều đó - với hầu hết các kịch bản chính xác giống như tôi phải đối mặt. @Mikos và Shalin cũng đưa ra những gợi ý tuyệt vời. Và tôi sẽ xem xét tất cả lời khuyên tuyệt vời của họ khi triển khai tìm kiếm trên ứng dụng web của tôi. –