我应该使用什么样的模型/模式来处理多个数据源?

时间:2009-02-13 13:34:27

标签: c# asp.net sql

作为电子商务系统的一部分,我需要设计和实现各种各样的黑盒子。这需要接受来自各种内部和外部数据源(即,网站,外联网,雅虎商店,亚马逊xml订阅源等)的客户和订单,并插入/更新后端系统。插入/更新客户和订单数据的API适用于网站并且运行良好。现在我们需要添加处理来自其他数据源的订单的功能。

我一直倾向于提供者模型(每个数据源的一个提供者)并使用它来将数据标准化为sql server表,然后再调用api来实际添加客户并下订单。我应该考虑其他模型或模式吗?你以前处理过这个问题,你是如何解决的?我应该看一下资源(文章,书籍,项目等)吗?

2 个答案:

答案 0 :(得分:1)

您可能会发现ETL(Extract-Transform-Load)工具比您在代码中解决问题更容易。

这些是专为您描述的数据加载工作类型而设计的。

修改

虽然我仍然认为ETL工具最能满足您的需求,但如果您坚持在代码中执行,您应该考虑将ETL作为一种模式来实现。这样做的原因是ETL是从各种来源加载数据的完善的最佳实践。您应该花些时间研究如何实施ETL。

在基本级别,您应该有三个图层,一个提取图层,一个转换图层和一个加载图层。

提取图层应负责从源中检索数据。它不应该担心这一点的数据形状。为了保持图层清洁,您应该只在这里实现“获取”数据的代码。担心在转换层中对其进行整形。

转换图层应负责获取从各种来源提取的数据并将其转换为目标的形状。 ETL工具通过将数据视为管道来非常有效地完成此任务。这些可以拆分和并行化。您可能没有时间或资源来执行此操作。另一种方法是将数据加载到临时表(数据的规范化表示较少)。

加载层获取转换后的数据(在上述情况下来自登台表),并将它们加载到最终目标位置。

这足以将您的图层分开,以便您可以保护自己免受未来的变化。但请记住,您实际上只是在做一个ETL工具将为您开箱即用的东西。

答案 1 :(得分:0)

如前所述,ETL可能是最佳选择,除非您可以标准化订单的方式,如EDI或Web服务。

使用ETL工具将源(电子邮件,FTP文件等)转换为SQL Server中的公共管道,然后使用单独的流程处理管道中的待处理批处理。