我们有一个托管近10000个域的电子邮件服务,以便将邮件标题存储在SQL Server数据库中。
我需要实现一个应用程序来搜索邮件正文中的关键字。消息作为文件存储在NAS存储系统上。
作为一个概念证明,我已经实现了一个基于SQL服务器的搜索系统,我将解析消息并将所有单词与memberid和messageid一起存储在数据库表中。该数据库位于与头数据库不同的服务器上。
该系统的问题在于,我在一个域上处理消息后最终得到了一个包含6亿行的表。显然,这不是一个可扩展的解决方案。
由于标头存储在SQL Server表中,因此我需要将搜索应用程序中的messageID连接到标头表,以显示包含搜索关键字的消息。
有关更好的架构的任何建议吗?使用SQL服务器的更好的替代方案?我们每天收到超过2000万封邮件。 我们是一家在服务器,维护等方面资源有限的小公司。
由于
答案 0 :(得分:4)
看看Hadoop。它是完整的“map-reduce”框架,用于处理受Google启发的大型数据集。它认为(但我可能错了)Rackspace正在使用它来搜索客户的电子邮件。
答案 1 :(得分:3)
lucene.net会对你有所帮助,但无论你如何处理这个问题,都会有很多工作要做。
答案 2 :(得分:2)
考虑不使用SQL。它没有帮助。
GREP和其他用于搜索标题文本的平面文件技术更快,更简单。
答案 3 :(得分:1)
您还可以查看可能对您有用的java lucene内容。作为分布式lucene索引的Katta和可以使用rsync进行索引同步的Solr都可能有用。虽然我不认为要么非常优雅,但在开始实际开发之前,通常最好使用已经构建并已知的工作。如果不了解更多细节,很难提出更具体的建议。
答案 4 :(得分:1)
如果您可以分解您的6亿行,请查看数据库分片。所有行的任何查询都会很慢。至少你可以通过语言分手。如果他们都是英语,那么,找到一些方法来分割基于常见搜索有意义的数据。我只是在这里猜测,但也许域名可以通过TLD(.com,.net,.org等)进行分组。
对于全文搜索,比较SQL Server与Lucene.NET vs cLucene vs MySQL vs PostgreSQL。注意如果您不需要对结果进行排名,全文搜索会更快。如果数据库仍然很慢,请查看性能调优,如果失败,请查看基于Linux的数据库。
答案 5 :(得分:0)
我想知道BigTable(http://en.wikipedia.org/wiki/BigTable)是否会搜索。
答案 6 :(得分:0)
查看SQL Server全文搜索服务/功能。我自己没有使用它,但我曾经读过Stack Overflow使用它。
答案 7 :(得分:0)
三种解决方案:
但说实话,我认为唯一合理的方法是#1