架构:基于集合的数据管道挑战

时间:2009-04-22 16:01:16

标签: c# asp.net sql xml

我正在开发一个数据库驱动的Web应用程序(ASP.NET,SQL 2008),它从各种来源接收结构化XML数据。数据类似于一个集合,通常需要“清理”,因此它以XML格式传递给数据库,并转换为结果集以供显示。

我想捕获生成的“干净”结果,并将它们发送到存档数据库以将它们保存到磁盘。

到目前为止我考虑过的选项是:

  • 将整个“干净”结果集序列化为对象(XML / .NET序列化),并将其发送回存档数据库

    • PRO:易于重复 - 可以在存档计算机上配置/捕获数据库调用,并重新运行它们以识别任何问题
    • CON:版本控制可能很棘手
  • 将清理后的结果存储在表格中,并定期将此表格中的新记录复制到存档计算机

    • PRO:轻松构建 - 快速预定作业
    • CON:难以在存档机器上重新调用;需要保持输入表内容

还有其他选择吗,有没有人有类似情况的经验?

1 个答案:

答案 0 :(得分:1)

我已经成功地使用了这两种情况,我的工作取决于系统。

保存原始Xml:

当我要处理非结构化数据时,或者当我们处理消息传递系统时,我倾向于保存Raw Xml,并且我们想要跟踪消息。例如,我处理的应用程序从已部署的Windows客户端收集消息,我们会将消息转储到关系结构中,然后将它们滚动到仓库中。当我接手该项目时,我们开始存储即将推出的原始xml,因为它确实允许我们重放,并能够准确查看系统中的内容。

关系数据

如果我需要对数据进行任何报告聚合,我会将数据分解并将其存储到常规表中。我知道你可以在数据库中查询xml数据,但我试着避免这种情况。我仍然可以保存原始的原始消息以进行重播和故障排除。

保存二进制对象

我做的最后一件事是保存一个完整的序列化二进制对象。当对象图非常复杂时,我发现这很方便,并且对象之间的关系很重要。它确实有很大的缺点,即版本控制;但是,即使命名空间更改,对象层次更改等,我也已经设置了这个非常强大的版本控制。如果您需要访问SQL中的数据,这不是可行的方法。