我正在开发一个高容量的Web应用程序,其中的一部分是讨论帖子的MySQL数据库,该数据库需要平稳地增长到2000万+行。
我本来打算对表使用MyISAM(用于内置的全文本搜索功能),但是由于单个写入操作而使 整个表 被锁定的想法使我陷入困境。行级锁具有更大的意义(更不用说InnoDB在处理大型表时的其他速度优势)。因此,基于这个原因,我决心使用InnoDB。
问题是… InnoDB没有内置的全文本搜索功能。
我应该使用第三方搜索系统吗?像Lucene(c ++) / Sphinx吗?你们中的任何数据库忍者有任何建议/指导吗? LinkedIn的 zoie(基于Lucene)看起来是目前的最佳选择…是围绕实时功能构建的(这对于我的应用程序来说非常关键。)我有点犹豫,但没有任何见识…
(仅供参考:将在具有高内存绑定的EC2上使用PHP服务前端)
我可以保证MyISAM全文是一个不好的选择-甚至不考虑MyISAM表的各种问题,我已经看到了全文问题,并开始破坏自身并定期使MySQL崩溃。
专用搜索引擎肯定是这里最灵活的选择-将帖子数据存储在MySQL / innodb中,然后将文本导出到搜索引擎。您可以很容易地设置定期的全索引构建/发布,如果需要并想花时间,可以添加实时索引更新。
Lucene和Sphinx和Xapian都是不错的选择,它既美观又轻巧。如果您走Lucene路线,即使您不想与Java搏斗,也不要以为Clucene会更好,尽管我没有资格讨论两者的优缺点。