我想将一些表从Postgres数据库导入到Elastic搜索中,并且还要使表与 flex 搜索中的数据同步。我看过关于udemy的类(class),还与一位在此问题上有丰富经验的同事进行了交谈,以了解最佳方法是什么。我很惊讶地听到他们两个人的来信,似乎最好的方法是用python,java或其他处理这种导入的语言编写代码并同步它,这使我想到了我的问题。这实际上是处理这种情况的最佳方法吗?似乎会有一个库,插件或某种可以处理将数据导入 flex 搜索并使其与外部数据库保持同步的情况。处理这种情况的最佳方法是什么?
最佳答案
这取决于您的用例。一种常见的做法是在应用程序层上进行处理。基本上,您要做的是将一个数据库的操作复制到另一个数据库。因此,例如,如果您在postgres中保存一个条目,则在elasticsearch中执行相同的操作。
但是,如果执行此操作,则必须有一个排队系统。队列都集成在您的应用程序层中,例如如果elasticsearch中的保存失败,则可以重播该操作。此外,在您的排队系统上,您将实现限制机制,以免压倒 flex 搜索。另一种方法是将事件发送到另一个应用程序(例如logstash等),因此限制和持久性将由该系统而不是您的应用程序处理。
另一种方法是https://www.elastic.co/blog/logstash-jdbc-input-plugin。您使用另一个系统来“轮询”数据库,并将更改发送到elasticsearch。在这种情况下,logstash是理想的选择,因为它是ELK堆栈的一部分,并且具有很好的集成性。也检查这个https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html
另一种方法是使用postgres的NOTIFY机制将事件发送到某个队列,该队列将处理保存Elasticsearch中的更改。
关于postgresql - 将表从Postgres DB同步/导入到elasticsearch的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49425827/