我正在开发一个大容量的web应用程序,其中一部分是讨论帖子的MySQL数据库,需要平稳地增长到2000多万行.

我本来打算用MyISAM来制作桌子(内置的fulltext search capabilities),但是想到entire table会因为一次写入操作而被锁定,我就想关上快门.行级锁更有意义(更不用说InnoDB在处理大型表时的其他速度优势).因此,出于这个原因,我决定使用InnoDB.

问题是...InnoDB没有内置的全文搜索功能.

我应该使用第三方搜索系统吗?比如Lucene(c++)/Sphinx?你们这些数据库忍者有什么建议/指导吗LinkedIn的zoie(基于Lucene)看起来是目前最好的 Select ...围绕实时功能构建(这对我的应用程序非常关键)我有点犹豫不决,但没有一些洞察力...

(仅供参考:将在EC2上使用高内存设备,使用PHP为前端服务)

推荐答案

我可以保证MyISAM全文版是一个糟糕的 Select ——即使撇开MyISAM表的各种问题不谈,我也看到了全文版的东西出轨,开始self 腐蚀,并定期崩溃MySQL.

一个专用的搜索引擎肯定是这里最灵活的 Select ——将帖子数据存储在MySQL/innodb中,然后将文本导出到搜索引擎中.你可以很容易地建立一个定期的完整索引构建/发布,如果你觉得有必要并且想花时间的话,还可以添加实时索引更新.

Lucene和Sphinx都是不错的 Select ,就像Xapian一样,它既漂亮又轻便.如果你 Select Lucene路由,不要认为Clucene会更好,即使你不想与Java搏斗,尽管我没有资格讨论这两种方法的利弊.

Mysql相关问答推荐

如何在逗号分隔字符串值中使用LEFT函数

如何有效地计算共同的朋友/追随者?

为什么我安装MySQL时不能使用3306端口?

为什么我的带有索引字段和非索引字段的 Select 有时需要很长时间

Hibernate 不创建表'

在 .NET 6 中使用 Dapper Framework 未能成功连接到 MySql

如何对 varchar() 数据值使用聚合窗口函数?

使用Workbench时如何添加mysqldump配置标志

MySQL如何在触发器内部 Select 多行然后插入它们

排序子查询结果并返回每个 ID 的第一行

如何根据 R 中的价格范围将数据从一列复制到新列?

连接两个表.使用连接列作为分组依据,然后根据时间戳 Select 最新行

更新和替换未加引号的 JSON 字符串

Mysql insert with loop out of select 语句

SUBSTRING_INDEX 获取第 n 个值

主键应该始终是无符号的?

PDO:MySQL 服务器已消失

考虑到 NodeJS,MySQL 和 MySQL2 有什么区别

我可以在 PHP 中使用 PDO 创建数据库吗?

SELECT INTO 和未声明的变量错误