首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL存储引擎困境

MySQL存储引擎困境
EN

Stack Overflow用户
提问于 2011-11-26 02:16:30
回答 5查看 1K关注 0票数 7

我想在我的应用程序中使用两个MySQL数据库特性。第一个是全文搜索和事务。

现在,这里的困境是我不能在一个存储引擎中获得这个功能。要么我使用MyIsam (它具有全文搜索功能),要么我使用InnoDB (它支持事务功能)。我不能两者兼得。

我的问题是,在我被迫在两个存储引擎之间做出选择之前,有没有办法在我的应用程序中同时拥有这两个功能。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-11-26 02:34:21

可能的解决方法:

  1. 使用Sphinx或Solr或其他一些外部文本搜索引擎进行文本搜索,并使用InnoDB engine。
  2. 编写自己的搜索代码-并使用InnoDB。这不是一个真正的选择,除非你的搜索需求有限,或者你的预算很大。
  3. 同时使用MyISAM和InnoDB这两个引擎。将希望全文搜索的列保留在MyISAM中,其余的保留在InnoDB中。这将是有风险的,因为MyISAM中的数据将不是事务安全的。
  4. 使用MyISAM和InnoDB这两个引擎。将所有数据保留在InnoDB中,并复制要在MyISAM中进行全文搜索的列。这将需要一些机制(触发器)用于MySQL版本的data engine.
  5. (Option (其中全文搜索将由InnoDB或其他事务性RDBMS支持4),但使用具有“崩溃安全”(但仍不是事务安全)全文索引的MariaDB ( MySQL分支):RDBMS在事务性引擎中具有全文支持,如PostgreSQL。
票数 10
EN

Stack Overflow用户

发布于 2011-11-26 02:28:22

如果需要在MySQL中对单个表执行事务和全文,您有几个选择。但是,从整个讨论中真正值得注意的一点是,数据库从一开始就不擅长全文搜索(尤其是MySQL!)理想情况下,您希望将此工作卸载到更擅长执行此类任务的组件。

选项1:

创建一个需要作为InnoDB执行事务的表,然后创建另一个“镜像”表,即MyISAM,您可以对其执行全文搜索。您可以通过在InnoDB表上使用触发器来保持数据同步。这是一种技巧,但它会起作用的。

选项3:

看看第三方全文引擎,如SphinxLuceneSolr。这样,您就可以专注于设计数据库,使其在查询数据时达到最佳状态,而不是强迫它进行文本搜索。

选项3:

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

希望这篇文章能让你明白一些。

享受吧!

票数 5
EN

Stack Overflow用户

发布于 2011-11-26 04:22:48

MyISAM全文索引可能没有您想象的那么好。它在小数据上还行,但在大数据上就差了。

在MySQL 5.6中,我们可以在InnoDB上使用全文,但它仍然不支持真正的全文搜索引擎所具有的大多数功能。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8272917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档