Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将MSSQL同步到Elasticsearch?_C#_Sql Server 2008_Dapper_Nest_<img Src="//i.stack.imgur.com/A3TTx.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch Net - Fatal编程技术网 elasticsearch-net,C#,Sql Server 2008,Dapper,Nest,elasticsearch Net" /> elasticsearch-net,C#,Sql Server 2008,Dapper,Nest,elasticsearch Net" />

C# 如何将MSSQL同步到Elasticsearch?

C# 如何将MSSQL同步到Elasticsearch?,c#,sql-server-2008,dapper,nest,elasticsearch-net,C#,Sql Server 2008,Dapper,Nest,elasticsearch Net,每次我在谷歌上搜索这个,我都会发现“river”方法不受欢迎。如果这是一个有用的信息,我正在使用Dapper 那么,这些天的解决方案是什么呢?你的问题涉及面很广,因此这是指向一些选项的指针 用于查询数据库和分析数据 在文章中: 客户端库 一年多来,我们已经为客户提供了官方图书馆 大多数编程语言中的Elasticsearch。这意味着钩住 并通过现有的代码库获取数据 应该比较简单。这项技术还允许轻松地 在数据进入Elasticsearch之前对其进行咀嚼。一个常见的例子是 已使用ORM将域模型映射

每次我在谷歌上搜索这个,我都会发现“river”方法不受欢迎。如果这是一个有用的信息,我正在使用Dapper


那么,这些天的解决方案是什么呢?

你的问题涉及面很广,因此这是指向一些选项的指针

用于查询数据库和分析数据

在文章中:

客户端库

一年多来,我们已经为客户提供了官方图书馆 大多数编程语言中的Elasticsearch。这意味着钩住 并通过现有的代码库获取数据 应该比较简单。这项技术还允许轻松地 在数据进入Elasticsearch之前对其进行咀嚼。一个常见的例子是 已使用ORM将域模型映射到 数据库,并将域模型挂接和索引回 Elasticsearch易于实现

关于如何在中使用弹性搜索,有大量文档:

这些文件将涉及以下内容:

安装:

这就是你需要发展的

插件

也可以用来代替河流,从河流中开发出各种插件

此外,还可以使用Logstash或类似工具将数据发送到 弹性搜索。例如,Elasticsearch附带的一些河流 现在在 即将发布的Logstash 1.5

额外阅读

虽然这是一种不同的语言和框架,但博客作者和信息可能有助于浏览。他建议在应用程序层执行此操作

从评论中解决问题

SQL Server提供了一个内置的系统来跟踪数据更改,这是一种自动跟踪数据更改的有效方法,无需执行手动方法来检查更改

有两种方法可以实现这一点:

使用:

使用时间戳跟踪数据更改。可以跟踪数据更改的历史记录

变更数据捕获为用户提供历史变更信息 通过捕获DML更改的事实和 已更改的实际数据。通过使用 读取事务日志并具有低优先级的异步进程 对系统的影响

使用:

这样可以减少管理费用,但无法跟踪历史变化。保留最新的更改,但不再后退

更改跟踪捕获表中的行已更改的事实, 但不捕获已更改的数据。这使得 应用程序来确定使用最新版本更改的行 直接从用户表中获取的行数据。所以,, 变更跟踪在历史问题方面更为有限 答案与更改数据捕获相比


你可以使用Logstash来完成这项工作。只需使用logstash JDBC插件来设置logstash管道。请点击此链接:-


还可以在GitHub上查看此回购协议

,因此,我只需要2美分就可以实现此协议。在过去,我通过设置触发器写入作为事件日志的缓冲表来实现这一点。然后我在计时器上有一个无服务器函数(AWS Lambda),它将清除事件日志并将所需的更改推送到ES中。通过这种方式,我不必在触发器中做任何疯狂的事情,甚至不必真正更改我的原始代码。

尽管问题是关于从
MSSQL
-->ElasticSearch同步的,但我觉得跨异构系统同步的基本思想是完全相同的。 你可能需要

  • 定义并创建要同步的数据批
  • 跟踪上次同步的批次,以确定从何处开始,基本上是标记
  • 转换数据
  • 最后运输一批

这篇文章更详细地解释了实现这一目标的所有细节。

我多次看到这篇文章,觉得需要更新答案

为了将数据从mssql实例传送到Elasticsearch,我使用ELK堆栈固有的Logstash。您可以使用jdbc输入插件定义各个管线和配置

下面是一个示例配置文件。这将每2分钟运行一次存储过程,并将数据插入正确的索引中。请记住,提供一些只同步数据的新记录的方法,否则当数据变大时,会出现缩放问题

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}" 

    }

}
输入{
jdbc{
jdbc_connection_string=>“jdbc:sqlserver://${sql_server};数据库=api;用户=;密码=;应用程序名=logstash”
#我们希望作为执行语句的用户
jdbc_user=>nil
id=>“索引名称”
jdbc_driver_library=>“/var/tmp/mssql-jdbc-6.2.2.jre8.jar”
jdbc_驱动程序_类=>“com.microsoft.sqlserver.jdbc.SQLServerDriver”
附表=>“*/2****”
语句=>“exec存储过程”
小写字母列名称=>false
}
}
输出{
弹性搜索{
“id”=>“索引名称”
“主机”=>“elasticsearch:9200”
“索引”=>“索引名称”
“文档id”=>“%{primary\u key}”
}
}

`

您不同步到Elasticsearch。您可以从源代码中提取要搜索的信息,并将其发送给Elastic。river就是这么做的。如中所述,这已被Logstash取代。另一个选择是使用将数据直接发送到Elastic。顺便说一句,所有搜索引擎都是这样工作的,尽管接线没有显示太多。爬虫程序从源中提取数据,索引器处理数据以生成搜索索引,查询处理器使用这些索引加快搜索速度。这些角色可以在多台计算机上运行,以实现负载平衡和scalability@JedatKinports在数据库中使用布尔值是cert
var node = new Uri("http://mynode.example.com:8082/apiKey");  
var config = new ConnectionConfiguration(node);  
var client = new ElasticsearchClient(config);`  
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}" 

    }

}