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

在与数据库的连接上同步Elasticsearch-NodeJS

潘安平
2023-03-14
问题内容

目的 :将elasticsearch 与postgres数据库同步
为什么 :有时newtwork或集群/服务器中断,因此应记录将来的更新

本文https://qafoo.com/blog/086_how_to_synchronize_a_database_with_elastic_search.html建议我应该创建一个单独的表updates来同步elasticsearch的表id,从而允许从上一个记录(在elasticsearch中)选择新数据(从数据库中)。因此,我想如果可以记录client
elasticsearch 的失败和成功的连接该 怎么办 :如果成功 响应 (返回了承诺),我可以启动一个函数来与数据库同步记录。

这是我的 elasticConnect.js

import elasticsearch from 'elasticsearch'
import syncProcess from './sync'

const client = new elasticsearch.Client({
  host:  'localhost:9200',
  log: 'trace'
});


client.ping({
   requestTimeout: Infinity,
   hello: "elasticsearch!"
})
.then(() => syncProcess) // successful connection 
.catch(err => console.error(err))


 export default client

这样,我什至不必担心运行cron作业(如果问题 1 是正确的),因为我知道集群正在运行。

问题

  1. syncProcess跑之前export default client?同步时,我不希望收到任何请求

  2. syncProcess不管我有多少次,它应该只运行一次(因为它已缓存/未导出)import elasticConnect.js。正确?

  3. 将方法与updates表一起使用,而不是仅从父/源表中选择数据,有什么好处?

  4. 文章的评论中说:“ 不要使用时间戳来比较新数据! ”。因为数据库正在阻塞,所以应该没事吧?


问题答案:

对于1:因为这是不syncProcess存在在导出客户端时将要运行的保证。
对于2:有了上述问题中与我联系的解决方案,这将得到解决。

对于3:由于您不知道哪些记录已消失,所以更新表也将捕获记录删除,而仅从数据库中选择不会删除。

对于4:您链接到的文章后面的第二条评论提供了答案(提示:时间戳记并非严格单调)。



 类似资料:
  • 问题内容: 我正在考虑使用日常脚本来执行以下操作,以解决ES服务器上更新存在问题的任何情况(我还没有高可用性设置,即使如此,它仍然可能是在数据库和ES之间复制数据的情况下的良好做法)。在把这个脚本放在一起之前,我想我会检查一下是否要以正确的方式进行操作,以及是否应该使用任何库或技术。 该脚本将简单地从数据库中检索所有ID,并从ElasticSearch中检索所有ID,其中(当前时间的快照,因为它是

  • 我们已经创建了一个能建立数据库连接的函数 connect_db ,但它本身并 不是很有用。总是创建或关闭数据库连接是相当低效的,所以我们会让连接 保持更长时间。因为数据库连接封装了事务,我们也需要确保同一时刻只有 一个请求使用这个连接。那么,如何用 Flask 优雅地实现呢? 这该是应用环境上场的时候了。那么,让我们开始吧。 Flask 提供了两种环境(Context):应用环境(Applicat

  • 5.8.1.1 Elasticsearch 安装 安装 logstash ElasticSearch中 logstash安装和logstash-input-jdbc插件 安装 logstash-input-jdbc插件 logstash-plugin install logstash-input-jdbc # 在有网点环境下安装,将安装插件后的 logstash 拷贝到内网环境即可使用。 编辑

  • 我是ElasticSearch的新手... 非常喜欢API(特别是ElasticsearchTemplate&支持单元测试)... 使用ElasticSearch 5.5.0(以下链接内联了完整的代码,也可以作为可下载的zip文件提供)执行此示例: https://www.mkyong.com/spring-boot/spring-boot--data-elasticsearch-example/

  • 问题内容: 问题答案: 检查一下 数据库名称 ip 用户名和密码是否正确,尝试使用客户端连接一下,是否可以连上

  • 问题内容: 直到现在,每当查询数据库时,我都会打开与数据库的新连接。如何实现打开连接后就可以重用的属性? 完成此操作后,请告诉我是否可以泄漏资源。 问题答案: 基本上,您需要JDBC连接池,通常需要实现接口。看看dbcp和c3p0。您的容器/服务器可能已经提供了连接池的实现。 每次 打开 连接时使用连接池时,实际上是从该连接中取出一个连接(如果池为空则 打开 一个连接)。当 关闭 连接时,它实际上