插入SQL Server数据库的最佳方法

时间:2015-04-24 14:29:08

标签: sql-server

我的问题更多的是设计问题而不是代码。我试图将INSERT股票交易进入SQL Server。

交易可以每秒多次进行,我同时接收15种股票的交易,因此可能会在同一秒内进行大量交易。我的问题是INSERT的最佳方法是什么?

  1. 在交易时段开始时打开一个连接,并在收到交易时不断插入交易,这会减慢我的应用程序的速度吗?交易时间是12小时,SQL Server是否允许连接持续这么长时间?

  2. 在内存中收集交易,每x分钟执行BulkInsert次?我宁愿不在记忆中保留任何交易,因为这样会减慢速度并耗尽大量的内存...有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

您没有准确描述每秒插入的行数。一台好机器上的SQL Server(无论这意味着什么)可以轻松处理每秒数百个顺序插入,当然这取决于机器正在做什么以及机器/硬盘(SSDS?)/可用内存量有多快。所以你问的是,有人可以在一周内从纽约开车到加利福尼亚吗?

如果您发现您的机器每秒无法处理数十或数十万个插入,您可以尝试将行插入到一个窄表(尽可能少的窄列)中,而不是键。我已经看到SQL Server成功处理了大量插入到这样的表中。我会在一天结束时将数据复制到另一个我运行所有处理的聚簇表中。

最后,您可能希望查看Service Broker,它可以使用消息传递来异步处理非常大的卷。

活动连接不会超时。

答案 1 :(得分:0)

简短的回答(由于你的问题,而且相当模糊)是"它取决于"。它依赖的是你用来构建客户端应用程序的内容。

如果它是一个使用PHP / ASP构建的Web应用程序,那么多个插入就不会有任何问题。由于其设计方式,SQL Server本质上支持这一点,大多数RDBMS模型也是如此。当然,批量插入将减少压力,它是一个操作,而不是多个数据线程,但是15个股票......你仍然在谈论一些小的时间操作的东西&& #39;旨在处理大数据。

我可能会建议你有一个中间人"听"对于数据,并在事务进行时打开与数据库的连接。在PHP中,我们通常称之为" long-polling",这是一个无处不在的术语,用于任何数据交换,即推送"往来于服务器。网上有大量的文档可以帮助你解决这个问题,包括一个维基百科页面(如果你有这种东西的话)。