我有一个客户端门户项目(我开发的第一个项目,所以基本的最佳实践就是我在这里寻找的,没什么特别的)即将发布。
报告中使用的主要记录类型的简化如下:
CREATE TABLE [dbo].[conversions](
[conversion_id] [nvarchar](128) primary key NOT NULL,
[click_id] [int] NULL,
[conversion_date] [datetime] NOT NULL,
[last_updated] [datetime] NULL,
[click_date] [datetime] NULL,
[affiliate_affiliate_id] [int] NOT NULL,
[advertiser_advertiser_id] [int] NOT NULL,
[offer_offer_id] [int] NOT NULL,
[creative_creative_id] [int] NOT NULL,
[conversion_type] [nvarchar](max) NULL)
CREATE TABLE [dbo].[clicks](
[click_id] [int] primary key NOT NULL,
[click_date] [datetime] NOT NULL,
[affiliate_affiliate_id] [int] NOT NULL,
[advertiser_advertiser_id] [int] NOT NULL,
[offer_offer_id] [int] NOT NULL,
[campaign_id] [int] NOT NULL,
[creative_creative_id] [int] NOT NULL,
[ip_address] [nvarchar](max) NULL,
[user_agent] [nvarchar](max) NULL,
[referrer_url] [nvarchar](max) NULL,
[region_region_code] [nvarchar](max) NULL,
[total_clicks] [int] NOT NULL)
我的具体问题是:鉴于每个表中有数百万行,如果您知道可以请求的所有可能报告,那么使用什么机制来按需快速提供摘要报告?
起点,性能方面,为最繁忙的客户对价值 18 个月的数据进行原始查询在我的仪表板上产生 3 到 5 秒的延迟,最坏的情况是具有自定义日期范围的摘要报告超过 10 秒跨越所有行。
我知道我可以在第一次点击后缓存它们,但我希望在第一次点击时表现出色。
我的感觉是这是这种性质的应用程序的一个基本方面,并且有大量这样的应用程序,那么是否有一种已经深思熟虑的方法来预先计算已经进行分组和聚合的表?那么如何让它们保持最新状态?您是否使用预先强制计算的 SQL 代理和自定义控制台应用程序?
任何一般的指针将不胜感激..