我最近购买了DoFactory框架,试图了解有关设计模式的更多信息。产品很好,但它只专注于交易操作,例如用户更新客户记录或插入客户记录。
我有一个已安排任务的应用,例如通过Web服务在一夜之间创建了一千个客户。我想了解解决这个问题的最佳方法:
选项1
public sub shared InsertCustomerBatch(ByVal list as list(as Customer))
For Each Customer In Customers
'Connect to database
'Insert Customer
Next
end public
选项2
Public Sub InsertCustomer(ByVal list as list(as typeCustomer))
For Each typeCustomer as typeCustomer In list
Customer.Insert(typeCustomer)
End For
End Public
这两个选项显然都有效,但是我认为选项2“更好”,因为它遵循设计原则,即Customer.Insert封装在Customer类中。
然而,在与更高级的开发人员交谈之后,他说选择选项1,但我不明白为什么。选项1“更好”。
答案 0 :(得分:1)
我认为必须证明为什么必须在批处理场景中的每一行打开和关闭连接(选项1)。一个优点可能是隐式提交。但是,在许多LOB应用程序的批处理中通常不需要频繁提交。当然,可能必须做出商业决策来确定数据的敏感性。但是,以合理大小的组提交行(由db log size绑定)是有意义的。
一种方法是将大批量大小分成几个小的逻辑批处理并分别提交每个批处理。另一种方法是使用批量复制在适当的时候在数据库中插入行(请参阅例如:bulk insert data into db。另请注意,默认情况下,除非指定了CHECK_CONSTRAINTS,否则不会检查批量复制操作对表的约束。 / p>
此外,检查连接超时设置可能是好的,以防它可能对长事务处理有影响(不确定那个)。但是,我想在你的情况下,默认值应该可以正常工作。
总之,我建议你使用选项2,如果您的情况需要大量行,可能需要进行一些修改。