【问题标题】:Fire off events from SQL Server to Azure Event Hub触发从 SQL Server 到 Azure 事件中心的事件
【发布时间】:2018-10-15 21:36:01
【问题描述】:

我有一个本地 SQL Server 2008R2。每当有新行或对现有行进行修改时,我需要将行作为事件从多个表发送到可能的 Azure 事件中心。

这是为了在发生任何更改时促进从 sql server 到 azure vent hub 的实时摄取。

请注意以下几点:

  1. 所有表都没有可靠的时间戳或 IDENTITY 列
  2. 未启用 CDC 或更改跟踪
  3. 无法修改架构或创建新的数据库对象(如触发器、存储过程等)

无论如何使用 Azure Functions/Logic Apps 或其他任何其他服务来实现这一点 - 需要考虑以上几点。任何想法,谢谢。

【问题讨论】:

  • “回放整个历史”是什么意思?能够将事件从 SQL 重新发送到 EventHub 的函数/逻辑应用程序?
  • 我认为“回放整个历史”有点分散主要问题的注意力。我要删除它。我基本上希望对 sql server db 中特定表的更改(新/修改行)作为事件中心的事件触发。

标签: sql-server azure azure-functions azure-logic-apps azure-eventhub


【解决方案1】:

您看过数据库审计吗?

您提到了 Azure 事件中心,但没有提到在到达事件中心后数据将去往何处。事件中心不是数据存储,而是将事件放入队列以供以后处理 - 那么您的最终处理是什么,因为这也可能暗示其他可能的解决方案?

【讨论】:

  • 您能否详细说明“您查看过数据库审计”吗?数据由流分析获取,然后传送到下游系统和 Power BI
  • 嗨,马丁,如果您需要提问,只需添加评论而不是发布答案;-) 干杯
  • @Thomas 当时我还是个新手,没有声望点来添加评论。不过现在一切都很好:-)
  • @MartinCairney,当然不用担心,我明白 :-) 只是人们可能会否决你的答案。所以我建议你删除它;-)
【解决方案2】:

只是一个概念,因为解决方案比较大:

就不允许更改数据库架构/配置上的任何内容而言,一种可能的方法是使用计划函数/逻辑应用程序,定期查询您的 SQL Server,然后输出到事件中心。对于这种操作我个人更喜欢Functions,因为我会对处理有更详细的控制。两种服务都应该以一种或另一种方式工作。

查询 SQL Server 的时间间隔完全取决于源数据更改的速度。

因为您不知道源数据何时更改/添加/删除,所以您必须制作一种副本:无论是完整的还是部分的。在任何情况下,您都应该有一些事件的唯一标识符。每次查询源数据时,都必须将结果与之前的结果进行比较,然后决定添加、删除、更改的内容。如果源数据很大,这将非常慢。但是,我想不出另一种方法。但是,如果您经常通过以下方式查询源数据,则可能会有一些改进:

  • 从那些已读取的事件(由其唯一标识符标识)中发生了哪些更改
  • 已从已读取的事件中删除的内容(由其唯一标识符标识)
  • 已添加的内容 - 在已读取的事件中不存在(由其唯一标识符标识)

因此,对于每个查询,您应该传递所有读取事件的标识符。

希望这会有所帮助。

【讨论】:

  • "...仅获取自上次执行以来的数据" - 这就是症结所在。如果您在我的问题中查看我的观点 - 我无法确定自上次执行以来已更改/新的行。
  • 对不起,改变了我的答案。我看不到你有很多选择。我的团队也遇到过类似的问题,我们做了这样的事情
  • 感谢,我知道我没有很多选择。你的想法不错,谢谢。它只是打败了实时摄取。我有 50GB 的数据,并且需要大量资源来识别更改。
猜你喜欢
  • 2019-01-27
  • 2017-10-07
  • 2022-10-06
  • 2021-11-27
  • 2020-06-12
  • 1970-01-01
  • 2020-10-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多