首页 > 解决方案 > 存储原始数据以进行复杂计算

问题描述

我们有一个 Web 应用程序,用于报告所有数据在关系数据库中的位置。对于大多数报告,我们可以使用引擎提供的内置聚合器功能或通过预先计算和缓存结果来完成所有计算。向用户生成这些报告的性能非常快。

只有两种情况,我们需要运行一个非常复杂的基于反复试验的算法,这种算法无法通过 SQL 完成,也无法在数据库中预先缓存任何东西。还有太多的输入变化,无法缓存结果。该算法还需要同时获取所有数据,因此无法并行划分和执行或以块的形式获取。

因此,我们目前正在通过从数据库中获取原始数据并在 C# 中计算逻辑来准备这些报告。然而,这很慢,因为我们需要将所有目前可以达到 8GB 的​​数据提取到后端。此外,许多繁重的并发请求可能会导致 VM 的可用内存受到限制。

我们已经获取了最少数量的行和列(2 个数字字段和 1 个日期字段)来执行算法,因此我们无法通过减少传输数据的大小来提高性能。因此,我们尝试通过执行以下操作将其加速为 PoC:

我的问题是从架构的角度是否有建议,我们可以将报告加速到接近本地缓存速度的速度,而不受它所造成的限制。如果有帮助,我们会使用 .NET Core 和 SQL Server。

标签: .netdesign-patternsarchitecturein-memory-database

解决方案


也许我们在数据库系统的时间序列分析组件中采用的一种技术流水线会有所帮助。您可以在此处阅读有关该技术的信息(匿名,无需注册):Pipelining Vector-Based Statistical Functions for In-Memory Analytics

我了解您使用的是 SQL Server;这不是我们数据库系统的插件。我阅读了您的问题并认为该技术可能会有所帮助,因为它可以消除缓存所有数据的需要,并保留使用 SQL 的能力(管道是通过在 SQL 语句中嵌套函数构建的)。但是,如果数据不是时间序列,则该技术也可能不适用。


推荐阅读