0

我有这个应用程序,其中有一个父子表,客户可以订购产品。整个结构在这里发布非常复杂,但足以说明,有一张Order桌子和一张OrderDetails桌子用于存储订单。目前我们正在做的是表中的INSERT一条记录Order,然后对于客户添加的每个项目,将每个项目循环插入到OrderDetails表中。由于显而易见的原因,该解决方案不可扩展。它适用于 100 个左右的项目,但如果用户超过 1000 个项目,或者一个项目的数量超过 1000 个,就会开始注意到应用程序的无响应性。

我想到了几个解决方案,但我不确定哪一个能很好地扩展。一种是我BulkInsert从我的asp.net应用程序中使用插入到OrderDetails表中。其次是我生成XML然后将其传递给 asql proc并从中提取/插入数据到OrderDetails表中XML,但这具有相关的内存消耗开销XML生成。我知道我可以进行基准测试并亲自查看最适合我的应用程序的策略,但我想知道最常见的策略是什么,并且与其他策略相比会更好地扩展。另外,如果我可以使用另一种技术来代替这两种技术,那将是更好的性能(我知道性能是主观的词,但让我把它缩小到速度)我可以使用它。一般用的最多的是哪个?你在你的应用程序中使用什么?

4

2 回答 2

0

您可以考虑探索在数据库中使用表值参数的选项。您必须创建一个表类型对象,其结构将模仿 OrderDetails 表的结构。用于插入数据的存储过程将接受这种类型的输入参数(这些参数总是只读的)。

在您的服务器端代码中,您可以构造一个包含所有订单详细信息数据的 DataTable 对象,该对象将映射到存储过程的输入参数。确保 DataTable 对象中的列顺序与表值参数中的顺序完全匹配。执行查询后,所有数据将一次性插入。这将使您免于对那里的每一行数据进行循环,并且还可以防止 XML 解析的开销。这种方法虽然将涉及通过网络传递整个对象。

您可以在此处阅读有关它的更多信息:MSDN 表值参数

于 2013-09-17T12:52:18.727 回答
-1

一个订单1000件似乎有点过分了!

在应用程序的业务逻辑中引入每个订单 100 件商品的限制是否可行?

于 2013-09-12T08:22:27.007 回答