Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用ElasticSeach作为部分my DB的主要源_Mysql_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Mysql,elasticsearch" /> elasticsearch,Mysql,elasticsearch" />

Mysql 使用ElasticSeach作为部分my DB的主要源

Mysql 使用ElasticSeach作为部分my DB的主要源,mysql,elasticsearch,Mysql,elasticsearch,我已经看到了许多与此主题类似的问题(讨论了ElasticSearch版本6如何克服其作为主要数据存储的许多限制),但我仍然不清楚以下几点: 我正在创建一个在线购物网站,我正在使用MySQL作为我的数据库 这是my DB的简化版(用户可以在网站上发布产品进行销售) 我正在学习,我想用它来搜索我的网站上的产品。我不需要搜索用户和ProductReview—只搜索产品表 我可以想出两种解决方案来实现这一点: 定期将产品表从MySQL复制到ES 在MySQL中保存用户和ProductReview,在E

我已经看到了许多与此主题类似的问题(讨论了ElasticSearch版本6如何克服其作为主要数据存储的许多限制),但我仍然不清楚以下几点:

我正在创建一个在线购物网站,我正在使用MySQL作为我的数据库

这是my DB的简化版(用户可以在网站上发布产品进行销售)

我正在学习,我想用它来搜索我的网站上的产品。我不需要搜索用户和ProductReview—只搜索产品表

我可以想出两种解决方案来实现这一点:

  • 定期将产品表从MySQL复制到ES
  • 在MySQL中保存用户和ProductReview,在ES中保存产品
  • 据我所知,如果我使用选项1,那么我可以使用它将ES与MySQL同步:这是一个好的解决方案吗

    我更倾向于使用选项2,因为它更容易,而且我不需要担心数据同步。我对该选项的担忧是:

    • ES作为数据的主要来源是否可靠
    • 在某个时候,如果我必须修改产品表结构,我是否能够在不删除和重新创建产品索引的情况下进行修改
    • 对于MySQL,我通常会备份Prod DB并在测试DB上恢复它。。。是否仍然可以使用ES从Prod到测试执行备份和恢复

    我没有ES/NoSQL方面的经验,希望得到任何建议。

    首先让我说明Elasticsearch不是严格意义上的数据库,最好不要这样使用。然而,没有什么能阻止你这么做(很多人都在这么做),据Elastic的好朋友说,他们永远不会努力尝试让ES成为一个真正的数据库。ES的主要目标是成为一个快速可靠的搜索和分析引擎

    如果可以的话,你应该始终保持另一个主要的真相来源,从中你可以很容易地(重新)构建你的ES指数,如果事情变得不好的话

    在您的情况下,选项1似乎是一种选择,因为您只想让用户搜索您的产品,所以在ES中同步其他表没有任何意义

    选项2听起来很吸引人,但前提是您决定只使用ES,如果您想依赖事务(ES没有事务支持),则不应该使用ES。您需要知道的另一件事是,如果您只有ES中的数据,并且您的索引由于某种原因(在升级过程中,ES中出现错误,代码中出现错误等)而损坏,那么您的数据将丢失,您的业务将受到影响

    因此,要更准确地回答您的问题:

  • 如果你在游戏中投入足够的努力和金钱,ES可以作为真相的主要来源。然而,你可能还没有数百万的产品和用户,所以拥有一个至少有三个节点的HA集群来搜索几千个产品和几个字段似乎不是一个好的花费

  • 当您的products表发生更改时,很容易将表重新索引为ES(甚至in),如果您有几千个产品,它可以运行得足够快,您不必担心它。如果由于某种原因同步失败,您可以再次运行该进程,而不会浪费太多时间。使用,您可以在不影响用户的情况下完成此操作

  • ES还提供了快照/恢复功能,因此您可以通过一次REST调用获取PROD的快照并将其安装到测试集群中


  • 让我首先说明Elasticsearch不是一个严格意义上的数据库,最好不要这样使用。然而,没有什么能阻止你这么做(很多人都在这么做),据Elastic的好朋友说,他们永远不会努力尝试让ES成为一个真正的数据库。ES的主要目标是成为一个快速可靠的搜索和分析引擎

    如果可以的话,你应该始终保持另一个主要的真相来源,从中你可以很容易地(重新)构建你的ES指数,如果事情变得不好的话

    在您的情况下,选项1似乎是一种选择,因为您只想让用户搜索您的产品,所以在ES中同步其他表没有任何意义

    选项2听起来很吸引人,但前提是您决定只使用ES,如果您想依赖事务(ES没有事务支持),则不应该使用ES。您需要知道的另一件事是,如果您只有ES中的数据,并且您的索引由于某种原因(在升级过程中,ES中出现错误,代码中出现错误等)而损坏,那么您的数据将丢失,您的业务将受到影响

    因此,要更准确地回答您的问题:

  • 如果你在游戏中投入足够的努力和金钱,ES可以作为真相的主要来源。然而,你可能还没有数百万的产品和用户,所以拥有一个至少有三个节点的HA集群来搜索几千个产品和几个字段似乎不是一个好的花费

  • 当您的products表发生更改时,很容易将表重新索引为ES(甚至in),如果您有几千个产品,它可以运行得足够快,您不必担心它。如果由于某种原因同步失败,您可以再次运行该进程,而不会浪费太多时间。使用,您可以在不影响用户的情况下完成此操作

  • ES还提供了快照/恢复功能,因此您可以通过一次REST调用获取PROD的快照并将其安装到测试集群中


  • 有很多方法可以解决这个问题。。。这就是我最后做的:


    我选择了选项1并构建了一个同步器,定期将我的产品复制到Elasticsearch。其实很简单。。。我实现了这里解释的方法:使用

    有很多方法可以解决这个问题。。。这是什么