【问题标题】:Best way to store aggregated values存储聚合值的最佳方式
【发布时间】:2012-10-01 00:21:01
【问题描述】:

我们需要存储不同帐户的汇总值,这些汇总值按月/年汇总了各种数字。每次更新数据时都会更新这些数字(通常每 24 小时一次或两次)。

我希望数据是 PIVOT 函数的结果,例如:

Year    Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2011    0   0   0   0   0   0   95  33  34  24  36  52

每个帐户都需要不同的聚合,例如“客户数量”、“订单数量”和“销售价值”,我不确定是否最好向数据添加键或使用单独的表格,例如:

Year    Key        Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2011    CntOrders  0   0   0   0   0   0   95  33  34  24  36  52
2011    CntCust    0   0   0   0   0   0   95  33  34  24  36  52
2011    ValOrders  0   0   0   0   0   0   95  33  34  24  36  52

或者 dbo.CountOfOrders

Year    Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2011    0   0   0   0   0   0   95  33  34  24  36  52

dbo.ValueOfOrders

Year    Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2011    0   0   0   0   0   0   95  33  34  24  36  52

我已经阅读了许多建议使用 NoSQL 和 SQL Server 的帖子,所以我不确定我们应该走哪条路或如何决定。

目前我们无法证明专用多维数据集的合理性,但我想知道将值存储在 NoSQL 数据库中是否更好,或者我们是否应该坚持使用 SQL Server?

【问题讨论】:

  • 为什么不创建“即时”执行此操作的视图?
  • 由于时间限制,我们不能,数据量巨大意味着运行这些查询可能需要几分钟——不仅如此,一旦过了这一点(例如去年),数据就不会'不会改变,但会经常被访问
  • 定期刷新的索引视图怎么样?
  • 根据您的 SQL 产品,您可能能够构建索引 (SQL Server) 或物化 (Oracle) 视图(其他产品可能有类似的方法)。我知道在 SQL Server 中,您无法直接在视图中进行数据透视(但您可以基于执行数据透视的索引视图构建视图 based)。

标签: sql nosql aggregation nosql-aggregation


【解决方案1】:

我会坚持使用 SQL。但是,如果您担心重建此类 PIVOT 表的时间,请不要这样做,因为您不一定要构建具有唯一“键”的表。

使用 key + process datetime 构建它,然后将其附加到主枢轴。因此,在创建增量期间,它将受您的事务时间戳(开始和结束)的限制。应该有很多膨胀。如果有,您可以在周末作业中折叠处理日期。

【讨论】:

  • 谢谢Rob,我们暂时还是用SQL,更新的过程很好,我们知道数据什么时候发生变化,所以可以在那个时候触发。干杯
【解决方案2】:

设置作业以运行将数据插入表中的存储过程。

存储帐户、年、月、值等数据

使用这些表格的视图来报告多个聚合。

一定要坚持使用 SQL。没有理由为这样一个简单的任务增加技术开销。

【讨论】:

  • 谢谢BeachAndBytes,更新不是问题,它更多的是机制,例如以什么格式存储表格。
猜你喜欢
  • 2017-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多