我正在寻找最有效的方式来构建存储/处理数据的后端。基本上,数据发送到服务器,解析然后保存到数据库。然后根据数据库中的其他数据完成一些处理,然后通过电子邮件或短信引发警报。Sql服务代理,CLR集成,触发后端问题
该平台是.NET和数据库是SQL Server 2005或2008年可能
即
- 温度传感器向服务器发送4个字节的数据。
- 服务器将数据转换为实数值,例如20.
- 然后将该值保存到SQL服务器数据库。
- 然后根据表中设置了该传感器边界的行检查该值,即0-50
- 如果在边界之外引发警报。 (通过短信或电子邮件发送)
这一切似乎都很直接,但我正在寻找最好的方法来做到这一点,因为理想的情况是这一切都发生在'实时'可能是每秒100或1000的请求。我想利用SQL 2005/08的一些'新'功能,如Service Broker,CLR集成,触发器等,我几乎没有经验。
步骤1 & 2已经完成。
考虑用于排队的事务数量,使用Service Broker还是MSMQ是明智的选择?鉴于我需要查看边界数据,在什么时候处理警报数据?我有一些想法,我希望如何处理数据,但不确定使用的最佳技术/方法。
我的想法是(从步骤3开始)将数据提交给服务代理,服务代理又调用CLR过程来处理数据上的“业务逻辑”。或者,我是否使用触发器将数据添加到Service Broker以处理数据呢?服务代理可以直接调用CLR过程吗?考虑到我想处理更多事件驱动的数据而不是轮询,是否正在使用服务代理?
从我在Service Broker上看到的例子看起来好像您需要有代码来接收数据,而我真正想要做的就是将数据添加到队列中并自动清空队列(处理警报数据如此)。
我可以通过一个标准的存储过程来完成所有这些工作,但我希望最小限度地使用存储过程,而不是使用CLR集成,因为业务逻辑将比示例中复杂得多。
鉴于服务代理处理排队和线程,我认为它可能是一个很好的候选人调用CLR过程来处理警报数据并发送短信或电子邮件?
请给我看看灯!谢谢!
问题并未说明是否需要消息持久性,订购和服务器间通信。 @Matt如果服务器不可用,那么消息是否丢失很重要?如果它确实需要消息持久性。如果你在5分钟之前得到10分钟前的消息是一个问题?如果是这样你需要订购。你打算在多个SQL服务器上运行这个吗?如果是这样的话,内部服务器通信可能会有用 –
嗨。好点。我必须考虑这些问题。是的,如果信息丢失,这很重要,但我认为我已经从源头上解决了这个问题。在我的例子中,传感器数据来自数据记录器中的一个记录,该记录已经保存在FIFO中。如果记录未传送,则不会从FIFO中删除并稍后再发送。在这个阶段,我不认为排序是重要的,因为有效载荷将有一个“创建记录”日期戳。我想说,首先它可能会是一台服务器,但随着项目规模的增加,未来肯定会更多。 – Matt