【问题标题】:Postgres "Materialized View" refresh as source of ElasticSearch document updates?Postgres“物化视图”刷新为 ElasticSearch 文档更新的来源?
【发布时间】:2019-10-11 07:59:05
【问题描述】:

我有一个标准化数据库,在 AWS RDS Postgres 数据库中有几个表,大约有一百万条记录。

我想编写一个物化视图,将其中几个表连接起来,为 ElasticSearch 文档生成一个记录结构。

刷新实体化视图时(我将使用并发选项),我希望将活动推送到 AWS ElasticSearch 作为相应的插入、更新或删除。

我只会每周修改基础表并刷新一次实体化视图。

这会起作用吗?具体来说,物化视图的刷新会被记录为 WAL 中的插入/更新/删除吗?

【问题讨论】:

    标签: postgresql amazon-web-services elasticsearch materialized-views


    【解决方案1】:

    我在我正在从事的一个项目中这样做,到目前为止它运行良好,我使用 logstash 作为一个独立的应用程序,每次我想更新数据时,我都会刷新物化视图并使用 postgres 驱动程序运行 logstash (就我而言,我在服务器上有一份工作,每 2 小时执行一次)。 为此,您需要运行命令行: path/to/logstash/bin/logstash -f path/to/postgres2elasticsearch.conf

    您应该在文件“postgres2elasticsearch.conf”中输入:

    input {
        jdbc {
            jdbc_connection_string => "jdbc:postgresql://${RDS_HOSTNAME}:${RDS_PORT}/${RDS_DB_NAME}"
            jdbc_user => "${RDS_USERNAME}"
            jdbc_password => "${RDS_PASSWORD}"
            jdbc_driver_library => "${DRIVE_PATH}"
            jdbc_driver_class => "org.postgresql.Driver"
            statement => "SELECT * from ${MY_MATERIALIZED_VIEW} order by ${ID_FIELD}"
            jdbc_paging_enabled => true
        }
    }
    output {
        elasticsearch {
            index => "${ES_INDEX}"
            hosts => ["${ES_DATA_HOST}:443"]
        }
    }
    

    查询中的order by 子句很重要,因为logstash 会分批插入数据,如果您不对数据进行排序,则有可能一部分数据重复,而另一部分没有进入elasticsearch完全没有,所以我建议你在物化视图上有一个索引的唯一字段。您需要下载postgres jdbc driver 并将其放在 ${DRIVE_PATH}

    【讨论】:

      猜你喜欢
      • 2018-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-03
      • 2017-06-15
      • 1970-01-01
      • 2015-10-10
      相关资源
      最近更新 更多