1

假设您有一个包含大量产品/客户/订单的数据库,并且代码库 (java/c#) 包含所有业务逻辑。在夜间,需要分批将数据导出到平面文件,然后通过 ftp 将它们传输到专有系统。

我们应该如何做到这一点“将数据库写入平面文件?最佳实践是什么?

一些想法:

  • 我们可以创建一个存储过程并使用 f.ex ssis 来获取数据吗?如果我们有一个“batch-output-database-table”也许我们可以做到这一点,但如果我们必须在文件写入之前执行逻辑就不行了?

  • 我们可以使用与域的其余部分相同的存储库/业务逻辑来完成托管代码中的所有逻辑吗?(与存储过程解决方案相比,这可能是一个缓慢的过程)

  • 如果域服务的唯一接口是 Web 服务(每个请求可能需要“很长时间”),“最佳实践”会改变吗?

4

2 回答 2

2

我个人更喜欢使用普通(托管)代码来实现提要而不是存储过程,主要是因为:1)通常更容易与其他系统交互(即使它只是共享驱动器)2)很容易记录你的一切如果出现问题,需要并调试 3) 您可以重用用于正常业务逻辑的相同代码(即使您只是引用相同的项目等,它也是有益的) 4) 通常您需要使用来自其他系统的一些信息来丰富数据而这又比托管代码更容易做到。5) 测试托管代码、进行所有单元测试、自动构建等要容易得多。

我不确定为什么它需要比在存储过程中完成所有操作要慢得多。您只需要编写一个好的存储过程来提取您需要的数据,C#/java 应用程序将完成所有的转换、丰富等。

编辑:回答评论:我认为不可能说您是否应该重用现有的存储过程、调整它们或创建新的。我认为这是对性能的影响或所需的更改并不会比我尝试使用一组 proc 大,以避免重复逻辑。但如果差异很大,那么维护额外 proc 的成本可能会低于更改和发布现有的成本。

于 2009-02-24T14:06:15.170 回答
0

使用您已经拥有的存储库代码。做一些性能测试,看看它是否符合性能。要求。如果有显着的性能。可以将问题归结为过多的 DB IO,然后选择 sproc 或实施批量导出存储库。

于 2009-02-27T07:41:31.387 回答