我一直是MYSQL用户,从未尝试过Postgres。
但是当数据集庞大时,MYSQL在全文搜索上有瓶颈。
答案 0 :(得分:10)
几年前我在大型数据集上运行基准测试并发现:
很慢。另一个缺点是它强迫MyISAM对你造成很多问题。一旦索引达到一定大小,索引更新也会非常慢:当您插入新行时,会重新生成索引的大部分内容,有时会为了插入论坛帖子而重写几百兆的索引。换句话说,对于一个有几MB帖子的小型论坛来说没问题,但维基百科没有使用它的原因......
比MySQL全文快10到100倍,功能强大得多,插入/更新的要点很快,锁没有问题,换句话说,这是一个非常不错的解决方案。
然而,由于MVCC,当数据集大于RAM时搜索速度变慢,postgres需要通过命中堆来检查行的可见性。请注意,这可能会在将来的版本中更改。如果您的查询返回10行,没问题。但是,如果要SELECT WHERE(全文查询)ORDER BY date LIMIT 10并且fulltext匹配10.000行,则可能会变得非常慢。仍然比MySQL快,但不是你想要的性能。
Xapian不必遵循与数据库相同的限制,因此它可以进行更多的优化。例如,它是单作者多读者并发模型,因此您需要某种更新队列来在后台更新索引。它也有自己的磁盘格式。结果是,即使数据集比RAM大得多,它也非常快,特别是在匹配大量行,排序和返回最相关的复杂查询时。
索引也很大,它可能包含很多重复的东西。结果是它不需要寻找东西。
基本上,一旦Postgres开始进入IO寻求墙,MySQL就已经死了,而且Xapian一直在快速发展。
但它并没有很好地集成在数据库中,因此使用起来更多。只有拥有庞大的数据集才值得。如果这是你的情况,试试吧,这太棒了。如果你的数据集适合RAM,那么postgres只会减少麻烦。此外,如果您想要整合全文和数据库查询,那么集成就变得很重要。
答案 1 :(得分:3)
虽然你不太可能在Postgres上找到一个比mysql更大的好处,但是如果不能测试就不会受到伤害。但是,使用Sphinx或Lucene等问题可以更好地解决您的主要问题 - 全文搜索问题。我在工作中使用了Sphinx,发现它远远优于mysql的内置全文搜索功能。它也很容易集成到现有系统中。
另请参阅php mysql fulltext search: lucene, sphinx, or?我原来的问题(包括参考资料)有关不同的全文搜索选项
答案 2 :(得分:3)
如前所述,它在数据集,工作负载和设置方式之间存在很大差异。
例如,基于GIN的全文索引搜索速度非常快,但插入/更新速度非常慢。基于GIST的索引搜索速度较慢(但速度相当快),但插入/更新的速度要快得多。
如果您不需要数据库功能,我也可能会考虑使用sphinx或lucene来获得原始性能。 PostgreSQL中集成全文搜索的最大优点是它只是 - 集成。它有交易支持。恢复支持。快照支持。所有那些对数据库至关重要的事情。但是,如果您不需要数据库功能,那么降低这些要求的解决方案可能会更快。
答案 3 :(得分:0)
你知道这只有一个答案;那就是你只需要用你自己的数据集来尝试它。
如果存在显着差异,我个人会感到惊讶,我怀疑这种事情的性能受到IO带宽的限制。