每当我谷歌这一点,我都会发现“河流”方法已被弃用。如果这是一个有用的信息,我正在使用Dapper。
那么这些日子的解决方案是什么?
答案 0 :(得分:11)
你的问题是广义的 - 所以这是指向某些选项的指针。
Elastic search用于查询数据库并分析数据。
在文章Deprecating Rivers中:
客户端库
一年多以来,我们已经有了官方客户端库 大多数编程语言中的Elasticsearch。这意味着挂钩 进入您的应用程序并通过现有代码库获取数据 应该比较简单。这种技术也很容易实现 在数据到达Elasticsearch之前进行数据处理。一个常见的例子是 已经使用ORM将域模型映射到的应用程序 数据库,并将域模型挂钩并索引回 Elasticsearch往往易于实现。
有关如何使用弹性搜索的大量文档:
文档将解决以下问题:
安装package:
PM> Install-Package Elasticsearch.Net
var node = new Uri("http://mynode.example.com:8082/apiKey");
var config = new ConnectionConfiguration(node);
var client = new ElasticsearchClient(config);`
这是你需要开发的。
<强>插件强>
也可以使用Logstash代替Rivers,从中开发了各种插件。
此外,可以使用Logstash或类似工具将数据发送到 Elasticsearch。例如,Elasticsearch带来了一些河流 现在实现为Logstash插件(如CouchDB中的插件) 即将到来的Logstash 1.5。
额外阅读
虽然这是一种不同的语言和框架 - Advanced Search for Your Legacy Application的博客David Pilato和信息可能有助于浏览。他建议在应用层中进行。
解决评论中的问题。
SQL Server提供了一个内置系统来跟踪数据更改,这是一种自动跟踪数据更改的有效方法,无需实施手动方法来检查更改。
有两种方法可以实现这一目标:
使用时间戳跟踪数据更改。可以跟踪数据更改的历史记录。
更改数据捕获为用户提供历史更改信息 表通过捕获DML更改的事实和 已更改的实际数据。使用a捕获更改 读取事务日志并且具有低的异步进程 对系统的影响。
这减少了开销,但没有跟踪历史变化。保留了最新的更改,但没有进一步的回复。
更改跟踪捕获表中的行已更改的事实, 但不捕获已更改的数据。这使得 用于确定使用最新更改的行的应用程序 行数据直接从用户表中获得。因此, 变更跟踪在历史问题上更加有限 答案与更改数据捕获相比。 ... / ...
答案 1 :(得分:2)
您可以使用Logstash来完成这项工作。只需使用logstash JDBC插件即可设置logstash管道。请点击此链接: - Migrate MySQL data to ElasticSearch
同时在GitHub ElasticSearchCRUD
上查看此回购答案 2 :(得分:1)
即使问题是要求同步来自MSSQL
- &gt; ElasticSearch
,我觉得跨异构系统同步的基本思想将完全相同。
你可能需要
本文Continuous data sync across Hetereogeneous Systems - YoursAndMyIdeas解释了更详细地实现这一目标的所有细节。
答案 3 :(得分:1)
我多次看过这篇文章,觉得它需要更新的答案。
为了将数据从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}"
}
}
`
答案 4 :(得分:0)
所以,这只是我的2¢。在过去,我通过设置触发器来写入充当事件日志的缓冲表来完成此操作。然后我在计时器上有一个无服务器功能(AWS Lambda),它将清除事件日志并将所需的更改推送到ES。这样我就不必在触发器中做任何疯狂的事情,或者甚至更改我的原始代码。