我有一个 http 处理程序,我将每个请求存储到内存中的并发队列集合中。一段时间后,我将集合批量插入到数据库中。
这是个坏主意吗?因为体积大,这似乎是 IMO 更好的方法。
我确实看到了一些差异(命中数与数据库中存储的元素数),由于线程,当我刷新并发集合时,我锁定它并批量插入其内容,然后清空集合。然后从集合中删除锁。
有更好的做法吗?或者你做过类似的事情吗?
最佳答案
抱歉,但我会说这是个坏主意。存在以下问题:
- 如果应用程序池在数据写入数据库之前回收,您将丢失数据
- 将所有数据保存在同一个集合中会导致需要在插入数据、将数据写入磁盘和清除集合时锁定该集合。这可能会导致整个网站在批量插入期间暂停。
- 您的代码将因额外的步骤而变得更加复杂。解决线程问题很困难
我们编写的 Web 应用程序可以在峰值负载时每秒向 SQL Server 数据库写入 1000 行。
首先尝试编写尽可能简单的应用程序,然后对其进行性能测试。
插入数据库的速度很大程度上取决于您的硬件,但您也可以在程序中执行一些操作:
- 表上只有一个索引(聚集)。 key 自动编号。
- 确保尽快释放与数据库的连接。
关于c# - 将数据保存在内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7132175/