2010-02-22 55 views
4

大家下午好,Web服务或Windows服务或SQL CLR集成?

我有点茫然,面临一些紧迫的期限,所以希望有人能提供一些建议。

我的起点将是SQL Server数据库中的一个表格,其中两个字段是从gps单元获得的x,y坐标。我将负责对这些位置进行地理编码(获取实际街道地址),并将结果写入成功表或错误表中。我正在封装实际进行地理编码过程的类库(C#),但对于将所有内容绑定在一起的最佳方法非常困惑。

理想情况下,我想从SQL Server发送数据集/数据表到某种类型的服务,其中所有记录将进行地理编码,并且每条记录的结果/失败将被写回适当的表中。由于数据库和DLL将驻留在同一台服务器上,我不明白我为什么要使用Web服务。因此,我的其余调查指向了Windows服务或SQL CLR集成。我的主要问题是:

  1. 其中一种方法比其他方法更合适吗?
  2. 这种方法是否可以接受(根据最佳实践)?

任何提示,意见,建议将不胜感激。

在附注中,如果它不是很明显,我是一个相对新手的程序员。作为一名程序员,这个网站一直是我成长过程中宝贵的工具,我非常感谢那些花时间阅读帖子并提供专家建议的人。

回答

3

您的地理编码代码可能会连接到地理编码服务,这就排除了SQL CLR集成。在技​​术上可行的是,从SQL CLR内部获取外部资源,特别是Web服务是您可以犯的最大错误。在几天的时间内,由于CLR线程劫持,您的服务器将被冻结在工作人员饥饿状态,并有保证。

最好的方法是使用ETL策略。将坐标转储到暂存表中,然后开始ETL过程并将所有坐标转换为地理编码,并将结果写入成功和错误表。 ETL方法通常用于批处理,中断和恢复等。 ETL可以是一个启动应用程序的SQL工作,一个SSIS包,有很多方法可以做到这一点,重要的是将工作分离到临时表以及提供暂停/恢复语义。您现在拥有的dll代码(我认为这是一个地理编码Web服务客户端代理代码)可能是您项目的0.001%。

过程是否需要作为Web服务公开,与ETL过程完全正交,应该由客户端连接需求和技术来驱动。换句话说,如果客户端代码preffer使用WS上传坐标,只要您考虑大型数据集并且只要为结果提供分离的,异步的和排队的语义即可。

+0

为什么使用SQL Server CLR会导致线程匮乏?如果服务是一个单身人士,并在完成后妥善处理它的资源,那么它仍然被认为是一个坏主意? – 2011-03-30 00:55:17