鉴于:
- 每个客户 1 个数据库(商业客户)
- 5000个客户
- 客户有 2 到 2000 个用户(平均约为 100 个用户/客户)
- 每个数据库 100k 到 1000 万条记录
- 用户需要经常搜索这些记录(这是导航数据的最佳方式)
可能相关信息:
- 每周有几个新客户(工作时间内的任何时间)
- 多个网络服务器和数据库服务器(用户可以通过任何网络服务器登录)
- 让我们对语言或 sql 品牌保持不可知论,因为 Lucene(和 Solr)有广泛的支持
例如:
Joel Spolsky 在Podcast #11中说,他的托管网络应用产品 FogBugz On-Demand 使用了 Lucene。他有成千上万的按需客户。每个客户都有自己的数据库。
他们为每个客户端使用一个索引并将其存储在客户端的数据库中。我不确定细节。而且我不确定这是否是对 Lucene 的严重修改。
问题:
您将如何设置 Lucene 搜索,以便每个客户端只能在其数据库中搜索?
您将如何设置索引?
您将索引存储在哪里?
您是否需要为所有搜索查询添加过滤器?
如果客户取消,您将如何删除他们的(部分)索引?(这可能是微不足道的——还不确定)
可能的解决方案:
为每个客户端(数据库)建立一个索引
- 优点:搜索速度更快(比一个索引方法)。索引与客户端数据的大小有关。
- Con:我不确定这意味着什么,也不知道这是否超出了 Lucene 的范围。
拥有一个带有 database_name 字段的巨大索引。始终包含 database_name 作为过滤器。
- 临:不确定。也许对技术支持或计费部门搜索所有数据库信息有好处。
- 缺点:搜索速度较慢(比 index-per-client 方法)。如果查询过滤器被删除,安全性有缺陷。
最后一件事:
我也会接受使用Solr(Lucene 的扩展)的答案。也许它更适合这个问题。没有把握。