【发布时间】:2011-10-31 21:01:42
【问题描述】:
我将从 Excel 中构建一些添加功能,以实现 让用户从 Excel 执行临时报告。
显而易见的方法是通过针对 ODBC 数据源的 SQL 语句, 但我担心它不能很好地扩展到一个巨大的表(即:对包含 50 千兆数据的表执行 SUM 或 COUNT 会导致性能问题)
我一直在考虑使用某种缓存技术,基本上是在 RAM 中查询 数据:http://www.yellowfinbi.com/wp_inmemory.pdf 这在 RAM 中的成本可能很高,而且我不太确定实现起来有多么困难。
我的约束如下:
我应该能够从 Excel 查询任何类型的数据源(SQL Server、MySql)
临时报告将从 Excel 执行(通过我的加载项)
应尽快将查询结果发送回 Excel 单元格
我不想构建 Datawarehouse 或 Olap 多维数据集,而是查询数据源
对算法、实现技术(In-Ram 报告?)有什么建议,以便以最优化的方式从 Excel 中执行临时查询? (除了优化的 SQL 代码!)
【问题讨论】:
-
我怀疑 RDBMS 实现者已经投入大量精力来提高 RDBMS 中这些聚合操作的性能(这可能取决于实际系统和配置)。如果将数据拉入 Excel(可能是 RAM)可以做得更好(尤其是如果您没有 50GB 的 RAM),我会感到惊讶。您是否倾向于对至少可以缓存的特定子集执行这些查询?
-
在 RDBMS 和您的 Excel 插件之间传输数据所需的时间(如果数量如您所说的那样大),即使不包括聚合值的计算和/或存储到 RAM 也会无疑也超过了在 RDBMS 本身内执行此操作所需的时间,然后才传输聚合结果。
-
您对 ODBC/SQL 的关注不在于可用性吗(对于不了解 SQL 的 Excel 用户,或者您似乎正在寻找与不同类型的 SQL 服务器兼容的东西),而不是可扩展性?
-
您会遇到困难,因为“我不想构建 DW 或 OLAP”与“尽可能快地处理 50 千兆数据”不一致。您不能将 50 GB 的原始数据拉到客户端并期望任何速度。您希望获得任何体面性能的唯一方法是构建一些服务器端/数据库端来预聚合和/或过滤以将其筛选到更小的数量。
-
PowerPivot 是我所知道的最接近您想要的东西,但是对于如此大量的数据,它仍然会很慢,因为它将在客户端构建多维数据集并且需要大量ram 的数量。
标签: sql excel optimization reporting