【问题标题】:Querying data at runtime of its insertion: can we make use of caching?在插入运行时查询数据:我们可以使用缓存吗?
【发布时间】:2009-04-15 01:01:23
【问题描述】:

我们正在构建一个应用程序,该应用程序需要每天在每个表中插入大约 150 万行数据。我们有 16 张桌子。 我们会跟踪 3 天的历史数据,包括当天的数据。

应用程序是使用 C# 完成的;在服务器端,我们运行一个在市场时段(4.5 小时)填充数据表的 exe,我们每 5 秒更新 16 个表。

在客户端,应用程序获取需要最近插入的数据(在过去 5 秒内)和可能是今天或之前的历史点的用户查询,并以某种方式绘制它们。

我们遇到了一些严重的性能问题,因为一个查询可能需要 1 秒或更长时间,这太长了。问题是,对于在运行时插入的今天的数据,我们是否可以利用缓存而不是每次从今天的数据中获取某些内容时都去数据库?这样会更有效率吗?如果是这样,我们该怎么做? P.S 一天的数据大约是 300 MB,我们有足够的 RAM

【问题讨论】:

    标签: c# database


    【解决方案1】:

    保留数据的副本以及用于检索数据的日期时间。下一次,只检索新数据,这样可以最大限度地减少通过网络发送的数据量。

    如果操作中运行的所有查询都达到 1 秒,那么您看到的问题可能是 UI 冻结。如果是这种情况,请不要在 UI 线程上执行此操作。

    更新(基于 cmets):您在控件的事件处理程序中运行的代码在 UI 线程中运行,这就是导致 UI 冻结的原因。没有一种方法可以在单独的线程中运行它,我建议BackGroundWorker 用于这种情况。看看最后社区提供的例子。

    【讨论】:

    • 感谢回答。经过优化,查询时间为0秒。但是,我们正在通过 512 VPN 连接进行查询,并且 UI 冻结。我没有得到你真正提出来解决这个问题的方法!你能详细说明一下吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 2019-02-23
    • 2021-01-17
    • 1970-01-01
    • 2019-05-22
    • 1970-01-01
    相关资源
    最近更新 更多