如何将MSSQL同步到Elasticsearch?
你的问题是广泛的 - 所以这是一个选项的指针。
Elastic search用于查询数据库并分析数据。
客户端库
对于一年多来,我们已经为 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也可以用来代替河流,从各种插件已经被开发。
此外,可以使用Logstash或类似工具将数据发送到 Elasticsearch。例如,一些河流Elasticsearch附带的 现在作为Logstash插件(如CouchDB之一)在 即将推出的Logstash 1.5中实现。
额外阅读
虽然这是一种不同的语言和框架 - 在博客Advanced Search for Your Legacy Application通过David Pilato和信息可能会有所帮助浏览。他建议在应用程序层中执行此操作。
解决评论中的问题。
SQL Server提供了一个内置系统来跟踪数据更改,这是一种自动跟踪数据更改的有效方法,无需实现手动方法来检查更改。
有两大手段来达致这:
数据变化跟踪带有时间戳。数据变化的历史可以被追踪。
变更数据捕获为用户提供 表通过捕获这两种DML进行了更改的事实和已更改 实际数据的历史变化信息。通过使用读取事务日志的 异步进程捕获更改,并对系统产生较低的 影响。
这有更少的开销,但不跟踪的历史变迁。最新的变化被保留,但没有更多的回来。
更改跟踪捕获表中的行已更改的事实,但不捕获已更改的数据。这使得 应用程序可以确定直接从用户表中获取的最新行数据所更改的行。因此, 更改跟踪在历史问题上更受限制,它可以与 答案进行比较,以更改数据捕获。 .../...
如何将MSSQL同步到Elasticsearch?
一个简单的解决方案可能是一个PowerShell
脚本(SQL Agent
工作):
Import-Module 'sqlps' -DisableNameChecking;
Invoke-Sqlcmd `
-ServerInstance "(local)\SQL2016" `
-Database "msdb" `
-Query "SELECT TOP(1) object_id AS id, name, type_desc FROM sys.objects" `
| Select-Object * -ExcludeProperty ItemArray, Table, RowError, RowState, HasErrors -OutVariable sql_results
$id = $sql_results.id
$json_results = ConvertTo-Json -InputObject $sql_results[0] # In this case, input object is an array/table with a single row
Invoke-RestMethod "http://localhost:9200/index007/type007/$id" -Method Put -Body $json_results -ContentType "application/json"
您可以使用Logstash做的工作。只需使用logstash JDBC插件来设置logstash管道。请点击此链接: - Migrate MySQL data to ElasticSearch
也会检出GitHub上ElasticSearchCRUD
对于SQL服务器,检查https://shariefmohatad.wordpress。 com/2016/03/29/ms-sql-config-with-logstash /可以使用JDBC以类似的方式完成 –
此回购所以,只是我的2¢上实现这一点。在过去,我通过设置触发器来写入作为事件日志的缓冲区表来完成此操作。然后,我在计时器上安装了无服务器功能(AWS Lambda),该计时器将清除该事件日志并将所需更改推送到ES中。这样我就不必在触发器中做任何疯狂的事情,或者甚至改变我的原始代码。
尽管问题是要求从MSSQL
- >ElasticSearch
同步,但我觉得跨异构系统同步的基本思想是完全相同的。 您可能需要
- 定义和创建要sync'ed
- 轨道的最后一批,以同步数据的批次来确定从哪里开始,基本上标记
- 转换数据
- 最后运输一批
这篇文章Continuous data sync across Hetereogeneous Systems - YoursAndMyIdeas解释所有细节,以更详细地实现这一点。
你不*同步到Elasticsearch。你*提取你想从你的源搜索的信息并发送给Elastic。河就是这样。这已被Logstash取代,如[https://www.elastic.co/blog/deprecating-rivers](https://www.elastic.co/blog/deprecating-rivers)所述。另一个选择是使用[.NET客户端](https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/index.html)将数据直接发送到Elastic –
顺便说一句,这就是所有的搜索引擎都能正常工作,尽管布线没有那么多。爬行器从数据源中提取数据,索引器对数据进行处理以生成搜索索引,并且查询处理器使用这些索引来加速搜索。这些角色可以在多台机器上运行,以实现负载平衡和可扩展性 –
感谢@PanagiotisKanavos:“您不会同步到Elasticsearch,您可以从源文件中提取想要搜索的信息并将其发送给Elastic。”我只是不知道这样做的标准做法是什么。 – JedatKinports