我有一张桌子,每秒钟会有大约100个新行。这没有问题,因为插入非常快,部分原因是表中没有索引。
我无法在表格中进行耗时的查询,因为它可能会阻止或减慢表格中行的插入速度。
我想在我的应用程序中获取表中插入的所有数据的实时或几乎实时的订阅源。如果有的话,将这些信息输入我的应用程序将会是一个好方法。
让我通过讲一个不太好的方法来澄清我的意思。每一秒我都可以每秒执行一次,每次调整日期比较。
select * from MyTable where Date > '2015-12-22 22:50'
日期没有编入索引以确保快速插入,即使它被编入索引,我也担心它的表现不够好。
所以相反,我希望通过某种方式来插入并获取插入内容,而不必查看它。
答案 0 :(得分:2)
如果你不想通过民意调查做到这一点,那么就有一个不错的解决方案。 该解决方案分为两部分。
第1部分:SqlDependency
Create a SqlDependency
on your database,SqlServer将通过SqlNotification
通知您更新。现在SqlDependency
的问题在于它只能告诉你某些事情已经改变,而不是改变了什么。这个问题的解决方案是第2部分。第1部分在下图中描述(其中SqlNotifier
是由我创建的类)。
第2部分:更改跟踪
有一个名为Change Tracking的非常好的功能,可以为您提供添加或删除的确切行。下图显示了一个类SqlReceiver
(由我创建)。工作原理是:您的应用程序和Sql数据库都会跟踪它们所在的版本号。例如,当您通过第1部分中描述的SqlNotifier
从Sql Server收到通知时(请参阅顶部的红色箭头)在图表中,您的应用程序将发送它当前所在的版本(v100)(中间的红色箭头)。数据库将其与自身的版本(v105)和数据库进行比较,该版本将完全发送在版本100和105之间已更改的行(底部红色箭头)。问题解决了。
如果您之前阅读过,我提到只有通过更改跟踪才能获得添加和删除的行。如果您需要已更新的数据,则必须使用Change Data Capture以及更改跟踪来实现目标。