当前位置: 首页 > 面试题库 >

Elasticsearch是否复制其他系统数据?

桓深
2023-03-14
问题内容

假设我想使用elasticsearch在网站上实施通用搜索。顶部的搜索栏将有望在整个网站上找到各种资源。确保文档(通过tika上载/索引),但也包括客户,帐户,其他人等内容。

由于架构原因,大多数非文档资料(客户,帐户)将存在于关系数据库中。

实施此搜索时,选项1将是创建所有内容的文档版本,然后仅使用elasticsearch运行搜索的所有方面,而完全不依赖关系数据库来查找不同类型的对象。

选项2是仅将Elasticsearch用于为文档建立索引,这意味着具有一般的“站点搜索”功能,您必须将多个搜索分配到多个系统,然后汇总结果再返回。

选项#1似乎要优越得多,但是缺点是它要求本质上elasticsearch在生产关系数据库中拥有很多东西的副本,并且随着情况的变化,这些副本应该保持新鲜。

使这些商店保持同步的最佳选择是什么?我是否认为对于一般搜索而言,选项1更好?有选项3吗?


问题答案:

在跨多个数据存储进行搜索时,您已经列出了两个主要选项,即在一个中央数据存储中进行搜索(选项1)或在所有数据存储中进行搜索并汇总结果(选项2)。

尽管选项#2有两个主要缺点,但这两个选项都可以使用:

  1. 为了将搜索“分支”到多个数据存储并汇总您返回的结果,将需要在应用程序中开发大量逻辑。
  2. 每个数据存储的响应时间可能有所不同,因此,您必须等待最慢的数据存储响应才能向用户显示搜索结果(除非您通过使用不同的异步技术(例如Ajax)来规避此问题,websocket等)

如果您想提供更好和更可靠的搜索体验,则选项1无疑会赢得我的投票(实际上,我大部分时间都采用这种方式)。正确地说,此选项的主要缺点是您需要使Elasticsearch与其他主数据存储区中的更改保持同步

由于您的其他数据存储将是关系数据库,因此您有几种不同的选择可以使它们与Elasticsearch保持同步,即:

  • 使用Logstash JDBC输入
  • 使用JDBC导入器 工具

前两个选项效果很好,但有一个主要缺点,即它们不捕获表上的DELETE,它们仅捕获INSERT和UPDATE。这意味着,如果您曾经删除用户,帐户等,则将无法得知必须删除Elasticsearch中的相应文档。当然,除非您决定在每个导入会话之前删除Elasticsearch索引。

为了减轻这种情况,您可以使用另一个基于MySQL binlog的工具,从而可以捕获每个事件。用Go

语言编写了一种,用Java语言编写了一种,用Python 语言编写了一种。



 类似资料:
  • 主要内容:实例,实例,实例,实例仿真控制:$finish, $stop 系统任务 调用格式 任务描述 退出仿真 $finish( type ) ; 结束仿真,参数 type 可选择退出仿真时是否打印信息 type=0: 直接退出不打印 type=1: 打印仿真时间和该语句所在的位置行信息 type=2: 打印仿真时间、位置、存储器和 CPU 时间的使用情况 暂停仿真 $stop( type ) ; 暂停仿真,用法格式与 $fin

  • 我指的是克隆。这里有一个简化的示例:我有对象,一些是正方形,一些是长方体,它们都是Object2D。每个都有一个唯一的id。 在这个系统中,我不需要对象副本的典型含义。当对象按值传递、按值返回和。。。在这个系统中,每个对象都是唯一的,因此我们不需要典型的复制构造函数。两个方块的id至少不同。因此,我正在使用复制构造函数进行克隆。在克隆过程中,我将深度复制除id之外的树结构。 这里我克隆了一个长方体

  • 如果您想使用Maven,Gradle或Ant以外的构建工具,您可能需要开发自己的插件。 可执行jar需要遵循特定的格式,并且某些条目需要以未压缩的形式编写(有关详细信息,请参阅附录中的“可执行jar格式”部分)。 Spring Boot Maven和Gradle插件都使用spring-boot-loader-tools来实际生成jar。 如果需要,您可以直接使用此库。 8.4.1 重新打包Arch

  • 你会觉得将 Git 作为其他版本控制系统的客户端,或者在数据无损的情况下将几乎任何一个现有的仓库导入到 Git,都是一件很惬意的事。 在下一章,我们将要讲解 Git 的原始内部数据,如果需要的话你就可以加工每一个字节。

  • 我有一个df1,看起来像这样: 第二个df2看起来像这样: 我想检查df1中的所有父ID是否都存在于df2中。如果没有,我想在新的df中提取它们,例如: 我相信可以使用连接,但我不确定如何使用

  • 我有一个表,它有一个主键,这个主键是用table Generator生成的: @tablegenerator(name=“resourceidgenerator”,table=“sequence”,pkColumnName=“name”,pkColumnValue=“resource_type_id”,valueColumnName=“nextid”,allocationSize=1),它工作得很