【发布时间】:2017-02-07 00:23:51
【问题描述】:
目标:将 elasticsearch 与 postgres 数据库同步
原因:有时新网络或集群/服务器会中断,因此应记录未来的更新
这篇文章https://qafoo.com/blog/086_how_to_synchronize_a_database_with_elastic_search.html 建议我应该创建一个单独的表updates 来同步elasticsearch 的id,允许从最后一条记录(在elasticsearch 中)选择新数据(从数据库中)。所以我想如果我可以记录 elasticsearch 的失败和成功连接会怎样:如果client ponged 成功返回(返回一个承诺),我可以启动一个函数来与我的数据库同步记录。
这是我的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 是正确的),因为我知道集群正在运行。
问题
syncProcess会在export default client之前运行吗?我不希望在同步时收到任何请求...syncProcess应该只运行一次(因为它被缓存/未导出),不管我importelasticConnect.js多少次。对吗?使用
updates表的方法,而不是只从父/源表中选择数据有什么好处吗?文章的 cmets 说“不要使用时间戳来比较新数据!”。呃……为什么?应该没问题,因为数据库被阻塞了,对吧?
【问题讨论】:
标签: node.js postgresql elasticsearch synchronization elasticsearch.js