我正在寻找最有效的方法来构建用于存储/处理数据的后端。基本上,数据被发送到服务器,解析然后保存到数据库。然后根据数据库中的其他数据对其进行一些处理,然后通过电子邮件或短信提出警报。
平台是.NET,数据库是SQL Server 2005或2008年。
即
这一切看起来都非常简单,但我正在寻找最好的方法,因为理想的情况是它全部发生在'实时'中,并且可能是每秒100或1000的请求。我想利用SQL 2005/08的一些“新”功能,例如Service Broker,CLR集成,触发器等,我几乎没有经验。
步骤1& 2已经完成。
考虑到排队的交易数量,使用服务经纪人或MSMQ是否明智?鉴于我需要查看边界数据,我在什么时候处理警报数据?我有一些想法,我希望如何处理数据,但不确定使用的最佳技术/方法。
我的想法(从第3步开始)是将数据提交给服务代理,后者又调用CLR程序来处理数据上的“业务逻辑”。或者,我是否使用触发器将数据添加到Service代理以处理数据?服务代理可以直接调用CLR过程吗?是否使用服务经纪人甚至是正确的想法,因为我想处理更多事件而不是轮询的数据?
从我在Service Broker上看到的示例看起来好像你需要有代码来接收数据,我真正想做的就是将数据添加到队列中并自动清空队列(处理警报数据,因为它。)
我可以通过标准存储过程完成所有这些操作,但我想最低限度地使用存储过程,而是使用CLR集成,因为业务逻辑将比示例中复杂得多。
鉴于服务代理处理排队和线程,我认为调用CLR程序处理警报数据并发送短信或电子邮件可能是一个很好的选择?
请告诉我光明!谢谢!
答案 0 :(得分:3)
我可以回答您提出的有关Service Broker的具体问题:
一个更基本的问题是:Service Broker为您提供“标准”方法(将数据保存到数据库,然后每秒轮询一次并批量处理进来的事件)不是什么?
当您需要消息持久性和排序,在SQL Server实例之间进行通信时,或者您可以利用其机制为您完成大部分工作时,Service Broker非常有用。在这种情况下,鉴于您的问题陈述,它听起来不像持久性和排序特别重要。您希望密切关注数据并在违反边界条件时发出警报。除非依赖于处理消息的顺序,否则我认为轮询的批处理过程可以更简单地完成工作,而且不需要Service Broker的设置开销。
答案 1 :(得分:2)
了解复杂事件处理解决方案领域。 OsiSoft(PI系统),Streambase,Oracle等领先产品。微软拥有Streaminsight,虽然这是第一代产品,并不保证交付或支持持久性。
答案 2 :(得分:0)
听起来你可能想看看Streaminsight http://www.microsoft.com/sqlserver/2008/en/us/r2-complex-event.aspx。我不能说我对此知之甚多,但如果你是谷歌Allan Mitchell和Streaminsight,或者看看SQLIS.com,他已经用它做了很多演示视频。