web-dev-qa-db-fra.com

Comment synchroniser MSSQL avec Elasticsearch?

Chaque fois que je fais une recherche sur Google, je trouve l'approche "rivière" qui est déconseillée. J'utilise Dapper s'il s'agit d'une information utile.

Alors, quelle est la solution pour cela ces jours-ci?

8
JedatKinports

Votre question est large - il s'agit donc d'un pointeur vers certaines options.

Elastic search est utilisé pour interroger la base de données et analyser les données.

Dans l'article Deprecating Rivers

Bibliothèques clientes

Depuis plus d'un an, nous avons des bibliothèques clientes officielles pour Elasticsearch dans la plupart des langages de programmation. Cela signifie que l'accrochage dans votre application et obtenir des données via une base de code existante devrait être relativement simple. Cette technique permet également de facilement transmettre les données avant qu’elles ne parviennent à Elasticsearch. Un exemple courant est un application qui utilisait déjà un ORM pour mapper le modèle de domaine sur un base de données, puis relier et indexer le modèle de domaine à Elasticsearch a tendance à être simple à mettre en œuvre.

Il existe une documentation complète sur l'utilisation de la recherche élastique dans:

Elasticsearch.Net .

La documentation abordera les points suivants:

Installez le package :

PM> Install-Package Elasticsearch.Net

Lien

var node = new Uri("http://mynode.example.com:8082/apiKey");  
var config = new ConnectionConfiguration(node);  
var client = new ElasticsearchClient(config);`  

Sécurité

_ { Pooling and Failover } _

_ { Demandes de construction } _

C'est ce que vous devrez développer.

Traitement de la réponse

La gestion des erreurs

Plugins

Logstash peut également être utilisé à la place de Rivers, à partir duquel divers plugins ont été développés.

En outre, Logstash, ou des outils similaires, peuvent être utilisés pour envoyer des données dans Elasticsearch. Par exemple, certaines des rivières Elasticsearch sont venues avec sont maintenant implémentés en tant que plugins Logstash (comme celui de CouchDB) dans le fichier à venir Logstash 1.5.

Lecture supplémentaire

Bien qu'il s'agisse d'un langage et d'un cadre différents - le blog Recherche avancée pour votre application héritée par David Pilato et des informations peuvent être utiles à parcourir. Il recommande de le faire dans la couche d'application.

Pour résoudre les problèmes des commentaires.

Les modifications de données peuvent être suivies .

SQL Server fournit un système intégré pour suivre les modifications de données, un moyen efficace de suivre automatiquement les modifications apportées aux données sans avoir à implémenter des méthodes manuelles pour vérifier les modifications.

Il existe deux moyens pour y parvenir:

Utilisation de Change Data Capture :

Les modifications de données sont suivies avec des horodatages. L'historique des modifications de données peut être suivi. 

La capture de données modifiées fournit des informations historiques sur les modifications pour un utilisateur tableau en prenant en compte le fait que des modifications de DML ont été apportées et le données réelles qui ont été modifiées. Les modifications sont capturées à l'aide d'un fichier processus asynchrone qui lit le journal des transactions et a un faible impact sur le système.

Utilisation de Change Tracking :

Cela entraîne moins de frais généraux, mais ne tient pas compte des changements historiques. Les dernières modifications sont conservées, mais pas plus en arrière.

Le suivi des modifications capture le fait que les lignes d'une table ont été modifiées, mais ne capture pas les données qui ont été modifiées. Cela permet applications pour déterminer les lignes modifiées avec le dernier les données de ligne sont obtenues directement à partir des tables utilisateur. Donc, le suivi des changements est plus limité dans les questions historiques qu’il peut répondre par rapport à changer la capture de données. .../...

10
Yvette Colomb

Vous pouvez utiliser Logstash pour faire le travail. Utilisez simplement le plugin JDBC logstash pour configurer un pipeline logstash. Suivez ce lien: - Migrez les données MySQL vers ElasticSearch

Consultez également ce dépôt sur GitHub ElasticSearchCRUD

2
Sharthak Ghosh

Même si la question concerne la synchronisation de MSSQL -> ElasticSearch, j’estime que l’idée de base de la synchronisation entre systèmes hétérogènes sera tout à fait la même. 

  • Définir et créer des lots de données à synchroniser
  • Suivre le dernier lot synchronisé afin de déterminer par où commencer, essentiellement des marqueurs
  • Transformer les données
  • Transporter un lot enfin

Cet article Synchronisation continue des données sur des systèmes hétérogènes - YoursAndMyIdeas explique tous les détails pour y parvenir plus en détail.

1
Sunil Singhal

J'ai rencontré ce message plusieurs fois et je pense qu'il faut une réponse à jour.

Pour envoyer des données d'une instance mssql à Elasticsearch, j'utilise Logstash, qui est inhérent à la pile ELK. Vous définissez des lignes de conduite et des configurations individuelles à l’aide du plug-in d’entrée jdbc. 

Voici un exemple de fichier de configuration. Cela exécute une procédure stockée toutes les 2 minutes et insère les données dans le bon index. N'oubliez pas de fournir une méthode pour synchroniser uniquement les nouveaux enregistrements de données, sinon vous aurez un problème de mise à l'échelle lorsque les données deviennent volumineuses. 

input {  
    jdbc {
        jdbc_connection_string => "jdbc:sqlserver://${sql_server};database=api;user=<username>;password=<password>;applicationname=logstash"
        # The user we want to execute our statement as
        jdbc_user => nil
        id => "index_name"
        jdbc_driver_library => "/var/tmp/mssql-jdbc-6.2.2.jre8.jar"
        jdbc_driver_class => "com.Microsoft.sqlserver.jdbc.SQLServerDriver"
        schedule => "*/2 * * * *"
        statement => "exec stored_procedure"
        lowercase_column_names => false

    }

}


output {
    elasticsearch {
        "id" => "index_name"
        "hosts" => "elasticsearch:9200"
        "index" => "index_name"
        "document_id" => "%{primary_key}" 

    }

}

`

0
Jeff Beagley

Donc, juste mes 2 ¢ sur la mise en œuvre de cela. Auparavant, je le faisais en configurant un déclencheur pour écrire dans une table de mémoire tampon faisant office de journal des événements. Ensuite, j'ai eu une fonction sans serveur (AWS Lambda) sur une minuterie qui effacerait le journal des événements et transmettrait les modifications nécessaires dans ES. De cette façon, je n'ai rien eu à faire de fou dans la gâchette ni vraiment changé mon code d'origine.

0
John Jones