我正在编写一个Web应用程序,该应用程序从连接光伏电池的逆变器获取数据。我从CSV文件读取数据。CSV文件每隔20秒就会获得一行,其中包含相应时间点的数据(该行包含以下数据:时间戳、当前性能、能量)。
CSV文件在应用程序启动时(在控制器中调用索引操作时)保存到数据库中。
由于数据库现在包含的数据间隔为20s,因此数据库的大小正在快速增加。由于我在Web应用程序中使用图表来显示光伏系统一年中提供的能量,因此我必须汇总20s的数据,这也需要计算能力。我在索引操作中也是这样做的。
因此,每当用户打开页面时,数据就会更新。例如,如果我从一个视图切换到另一个视图,然后再切换回来,则会在关联的控制器中再次调用索引操作。因此,再次加载页面需要时间。因此,我的应用程序变慢了。
我需要做些什么来解决这样的问题?
1条答案
按热度按时间ccgok5k51#
那好吧
在我们的IT行业中,我们经常遇到术语“数据仓库”。
这意味着(在大多数情况下)我们有大量的交易数据。想想也许是人们在亚马逊购物产生的非常高的交易率。巨大的交易数量。
但是,如果我们想报告这些数据,假设我们想按小时计算销售额,或者甚至只按每天的需求计算。
我们并不存储数据“房子”的每一笔交易,而是存储总和,以及数据仓库系统开发人员在给定“选定”时间段内的总和。
因此,您可能不需要捕获每个20秒的数据点。(也许您需要这样做????)
所以,正如我所说,每20秒,你会得到一个数据点。假设一年有3100万秒,那么这意味着你每年将有150万个数据点。
然而,也许你并不需要这么高的分辨率,如果你以1分钟的间隔对数据求和,那么你现在每年只有525,000个数据点(如果你按月报告,那么每月只有43,000个数据点)。
然而,也许5分钟的分辨率更适合您的需要。在该分辨率下,那么一整年的数据就只剩下105,120个数据点了。
因此,对于一个月的数据的图表或显示,我们只有8,760个数据点。
因此,如果我们必须(例如)显示一个月的图表,那么我们只提取了8,700个点的数据,这对现在的任何数据库系统来说都不是一个大的查询。
因此,您可能希望将这些数据看作是一些“微型”数据仓库项目,在其中您确实会放松一些数据“粒度”,但同样地,它仍然足以满足您的报告需求。
您选择的时间段或“间隔”将基于您的要求或需要。
那么,上述情况说明了什么呢?
您需要一个例程来读取csv,然后按照您选择的“时间段”对数据进行分组,然后对现有数据点求和,并为新数据点追加数据。
结果,这不仅将大大减少数据的数据行的数量,而且当然还将显著地加速对这样的数据的报告和绘图。
因此,您可以轻松地将数据从每年约150万行减少到每年100,000行。使用日期索引,然后报告此类数据(无论是每日、每周还是每月)变得更加易于管理,并且您将数据减少到原来的1/10。因此,您在数据库中有了更大的空间,减少了很多数据,并且在数据存储10年后,您将只有大约100万行数据-即使对于免费的“Express”版本的SQL Server也不算多。
此外,由于您无法控制“设备”何时触发向该csv添加数据,我会考虑在读取文件之前对其进行重命名,因此在某些读取过程中(以及完成后删除),您将减少在csv读取+删除操作过程中丢失数据的可能性。