web-dev-qa-db-fra.com

Synchroniser les données postgreSql avec ElasticSearch

Finalement, je veux avoir une solution de recherche évolutive pour les données dans PostgreSql. Ma découverte m'oriente vers l'utilisation de Logstash pour expédier des événements d'écriture de Postgres à ElasticSearch, mais je n'ai pas trouvé de solution utilisable. Les solutions que j'ai trouvées impliquent l'utilisation de jdbc-input pour interroger tous les données de Postgres sur un intervalle, et les événements de suppression ne sont pas capturés.

Je pense que c'est un cas d'utilisation courant, j'espère donc que vous pourrez partager avec moi votre expérience ou me donner quelques conseils pour continuer.

23
Khanetor

Si vous devez également être averti de la suppression et supprimer l'enregistrement respectif dans Elasticsearch, il est vrai que l'entrée jdbc Logstash n'aidera pas. Vous devez utiliser une solution fonctionnant autour du binlog comme suggérée ici

Cependant, si vous souhaitez toujours utiliser l'entrée jdbc Logstash, vous pouvez simplement supprimer les enregistrements dans PostgreSQL, c'est-à-dire créer une nouvelle colonne BOOLEAN afin de marquer vos enregistrements comme deleted. Le même indicateur existerait alors dans Elasticsearch et vous pouvez les exclure de vos recherches avec une simple requête term sur le champ deleted.

Chaque fois que vous devez effectuer un nettoyage, vous pouvez supprimer tous les enregistrements marqués deleted dans PostgreSQL et Elasticsearch.

14
Val

Veuillez consulter Debezium . C'est une plate-forme de capture de données modifiées (CDC), qui vous permet de Steam vos données

J'ai créé un simple dépôt github , qui montre comment cela fonctionne

enter image description here

3
Yegor Zaremba

Vous pouvez également consulter PGSync .

Il est similaire à Debezium mais beaucoup plus facile à mettre en service.

PGSync est un outil de capture de données de changement pour déplacer des données de Postgres vers Elasticsearch. Il vous permet de conserver Postgres comme votre source de vérité et d'exposer des documents structurés dénormalisés dans Elasticsearch.

Vous définissez simplement un schéma JSON décrivant la structure des données dans Elasticsearch.

Voici un exemple de schéma: (vous pouvez également avoir des objets imbriqués)

par exemple

{
    "nodes": [
        {
            "table": "book",
            "columns": [
                "isbn",
                "title",
                "description"
            ]
        }
    ]
}

PGsync génère des requêtes pour votre document à la volée. Pas besoin d'écrire des requêtes comme Logstash. Il prend également en charge et suit les opérations de suppression.

Il utilise à la fois une interrogation et un modèle piloté par les événements pour capturer les modifications apportées à ce jour et notifier les modifications qui se produisent à un moment donné. La synchronisation initiale interroge la base de données pour les modifications depuis la dernière exécution du démon et par la suite la notification d'événement (basée sur les déclencheurs et gérée par le pg-notify) pour les modifications de la base de données.

Il a très peu de frais généraux de développement.

  • Créez un schéma comme décrit ci-dessus
  • pointez pgsync sur votre base de données Postgres et votre cluster Elasticsearch
  • Démarrez le démon.

Vous pouvez facilement créer un document qui inclut plusieurs relations en tant qu'objets imbriqués. PGSync suit toutes les modifications pour vous.

Jetez un œil au repo github pour plus de détails.

Vous pouvez installer le package depuis PyPI

2
taina