【问题标题】:What model/pattern should I use for handling multiple data sources?我应该使用什么模型/模式来处理多个数据源?
【发布时间】:2009-02-13 13:34:26
【问题描述】:

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

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

【问题讨论】:

    标签: c# asp.net sql


    【解决方案1】:

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

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

    编辑

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

    在基本层面上,你应该有三层,一个提取层、一个转换层和一个加载层。

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

    transformation 层应该负责从各种来源提取数据并将其转换为目标的形状。 ETL 工具通过将数据视为管道来非常有效地做到这一点。这些可以拆分和并行化。您可能没有时间或资源来执行此操作。另一种方法可能是将数据加载到临时表中(数据的标准化程度较低)。

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

    这充分分离了您的层,以便您可以保护自己免受未来变化的影响。但是请记住,您实际上只是在做 ETL 工具可以为您做的事情。

    【讨论】:

    【解决方案2】:

    如前所述,ETL 可能是要走的路,除非您可以标准化前面的订单进入方式,例如 EDI 或 Web 服务。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多