Обновление Postgres «Материализованное представление» как источник обновлений документа ElasticSearch? - PullRequest
1 голос
/ 24 мая 2019

У меня есть нормализованная база данных с несколькими таблицами в базе данных AWS RDS Postgres, содержащая около миллиона записей.

Я хотел бы написать Материализованное представление, которое объединит несколько из этих таблиц для создания структуры записи для документов ElasticSearch.

Когда обновляется Материализованное представление (я буду использовать опцию одновременности), я бы хотел, чтобы действие было перенесено в AWS ElasticSearch в качестве вставок, обновлений или удалений соответственно.

Я бы только изменял базовые таблицы и обновлял материализованное представление один раз в неделю.

Будет ли это работать - в частности, будут ли обновления материализованных представлений регистрироваться как вставка / обновление / удаление в WAL?

1 Ответ

1 голос
/ 24 мая 2019

Я делаю это в проекте, над которым я работаю, и пока он работает нормально, я использую logstash как отдельное приложение, и каждый раз, когда я хочу обновить данные, я обновляю материализованное представление и запускаю logstash, используя драйвер postgres.(в моем случае у меня есть работа на сервере, которая делает это каждые 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 будет вставлять данные в пакетном режиме, и если вы не упорядочите данные, возможно, что часть данных будет дублирована, а другая часть вообще не перейдет вasticsearch, поэтому я предлагаю вам иметьиндексируемое уникальное поле на вас материализовано.И вам нужно будет скачать драйвер postgres jdbc и поместить его в $ {DRIVE_PATH}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...