0

我有一个应用程序正在接收要存储在数据库中的大量数据。我当前的策略是在每条记录准备好时触发异步调用 (BeginExecuteNonQuery)。我正在使用异步调用来确保应用程序的其余部分顺利运行。

我遇到的问题是,随着数据量的增加,最终我会尝试在连接仍在使用时触发命令。我可以看到两种可能的选择:

  1. 自己缓冲待处理的数据,直到现有命令完成。
  2. 根据需要打开多个连接。

我不确定这些选项中哪一个是最好的,或者实际上是否有更好的方法。选项 1 可能会导致我的缓冲区越来越大,而选项 2 可能是非常糟糕的形式 - 我只是不知道。

任何帮助,将不胜感激。

4

2 回答 2

3

根据您的锁定策略,可能值得使用多个连接,但肯定不是“没有上限”的数字。因此,这里使用的一个好的策略/模式是“线程池”,N 个专用线程中的每一个都保持一个连接并在请求到来时接收写入请求,并且线程完成它正在执行的前一个请求。通过在现实的实验/原型设置中对各种可能性进行基准测试,最好凭经验确定池中的线程数以获得最佳性能。

如果“缓冲区”队列(您的主线程在其中排队写入请求并且池中的专用线程将它们拾取)增长超过某个阈值,则意味着您获取数据的速度比您可能写出来的速度要快,所以,除非你能获得更多资源,否则你只需要删除一些传入的数据——也许通过随机抽样策略来避免对未来的统计分析产生偏见。只需计算在每个时间段(例如每分钟左右)内您正在编写多少以及由于资源短缺而不得不放弃多少,这样您就可以在未来的数据挖掘探索中使用“分层抽样”技术.

于 2009-06-11T00:20:57.890 回答
0

谢谢亚历克斯 - 所以你会建议一种混合方法,假设如果所有连接都在使用中我仍然需要缓冲更新?

(我是原发帖人,不知不觉就弄了两个账号)

于 2009-06-11T00:25:08.773 回答