MySQL存储引擎的困境

bur*_*ark 7 php mysql

我想在我的应用程序中使用两个MySQL数据库功能.第一个是FULL-TEXT-SEARCH和TRANSACTIONS.

现在,这里的困境是我无法在一个存储引擎中获得此功能.它要么我使用MyIsam(具有FULL-TEXT-SEARCH功能),要么使用InnoDB(支持TRANSACTION功能).我不能兼得.

我的问题是,无论如何,在我被迫在两个存储引擎之间做出选择之前,我可以在我的应用程序中同时拥有这两个功能.

ype*_*eᵀᴹ 10

可能的解决方法:

  1. 使用Sphinx或Solr或其他一些外部文本搜索引擎进行文本搜索并使用InnoDB引擎.

  2. 编写自己的搜索代码 - 并使用InnoDB.这不是一个真正的选择,除非您的搜索需求有限或您的预算很大.

  3. 使用两个引擎,MyISAM和InnoDB.保留要在MyISAM中进行全文搜索的列,其余的在InnoDB中.这将是有风险的,因为MyISAM中的数据不是交易安全的.

  4. 使用两个引擎,MyISAM和InnoDB.将所有数据保存在InnoDB中,并复制要在MyISAM中进行全文搜索的列.这将需要一些机制(触发器)进行数据复制.

  5. 等待InnoDB或其他事务引擎支持全文搜索的MySQL版本.

  6. (选项4)但是使用具有"崩溃安全"(但仍然不是事务安全)全文索引的MariaDB(一个MySQL分支):什么时候将要事务全文本索引准备好?

  7. 使用其他RDBMS,如PostgreSQL,它在事务引擎中具有全文支持.


Dou*_*oug 5

如果您需要对MySQL中的单个表执行事务和全文,您有几个选择.但实际上,从整个讨论中拿走的重点是数据库不擅长开始全文搜索(特别是MySQL!),理想情况下你想将这项工作卸载到一个更好地执行这种类型的组件上任务.

选项1:

创建一个表,您需要作为InnoDB进行事务处理,然后创建另一个MyisAM"镜像"表,您可以对其进行全文搜索.您可以通过使用InnoDB表上的触发器使数据保持同步.一个黑客,但它会工作.

选项3:

看看像Sphinx,LuceneSolr这样的第三方全文引擎.这样,您可以专注于将数据库设计为查询数据时的最佳状态,而不是强制它进行文本搜索.

选项3:

您可以选择使用同时支持事务和全文搜索的其他数据库服务器,例如SQL Server.

希望这能给你一些清晰度.

请享用!