假设您拥有一个包含大量产品/客户/订单的数据库,而代码库(java / c#)包含所有业务逻辑。在夜间,需要几个批次将数据导出到平面文件,然后将它们ftp到专有系统。
我们应该怎样做“将数据库写入平面文件?最佳做法是什么?”
一些想法:
我们可以创建一个存储过程并使用f.ex ssis来获取数据吗?也许我们可以这样做,如果我们有一个“批输出数据库表”,但如果我们必须在写入文件之前做逻辑呢?
我们可以使用与域的其余部分相同的存储库/业务逻辑来执行托管代码中的所有逻辑吗? (与存储过程解决方案相比,这可能是一个缓慢的过程)
如果域服务的唯一接口是Web服务(每个请求可能需要“很长时间”),那么“最佳实践”会改变吗?
答案 0 :(得分:2)
我个人更喜欢使用普通(托管)代码来实现feed而不是存储过程,主要是因为: 1)与其他系统接口通常更容易(即使它只是共享驱动器) 2)如果出现问题,很容易记录您需要的所有内容并进行调试 3)您可以重复使用用于正常业务逻辑的相同代码(即使您只是引用相同的项目,它也是有益的,等等) 4)通常,您需要使用来自其他系统的某些信息来丰富数据,并且从托管代码中再次这样做更容易。 5)更容易测试托管代码,进行所有单元测试,自动构建等。
我不确定为什么它需要比在存储过程中完成所有操作要慢得多。您只需编写一个良好的存储过程来提取所需的数据,C#/ java应用程序将完成所有转换,丰富等工作。
编辑:回答评论: 我不认为你是否应该重用现有的存储过程,调整它们或创建新的过程。我认为这是性能损失或所需的更改并不比我尝试使用一组过程大,以避免重复逻辑。但如果差异很大,那么维持额外触发的成本可能会低于改变和释放现有触发的成本。
答案 1 :(得分:0)
使用您已经获得的存储库代码。做一些性能测试,看看它是否符合性能。要求。如果有显着的性能。问题可以归结为过多的DB IO,然后转到sproc或实现批量导出存储库。