相关疑难解决方法(0)

在SQL Server 2005/2008中存储历史数据的最佳方法是什么?

我的简化和人为的例子如下: -

让我们说,我想每天测量和存储所有世界城镇的温度(和其他值).我正在寻找一种存储数据的最佳方式,以便在所有城镇中获得当前温度同样容易,因为它可以在一个城镇中获得历史上的所有温度.

这是一个很容易解决的问题,但我正在寻找最佳解决方案.

我能想到的两个主要选择如下: -

选项1 - 相同的表存储当前和历史记录

将所有当前和归档记录存储在同一个表中.

CREATE TABLE [dbo].[WeatherMeasurement](
  MeasurementID [int] Identity(1,1) NOT Null,
  TownID [int] Not Null,
  Temp [int] NOT Null,
  Date [datetime] NOT Null,
)
Run Code Online (Sandbox Code Playgroud)

这样可以保持一切简单,但获得城镇列表和当前温度的最有效查询是什么?一旦表中有数百万行,这会缩放吗?通过在表中使用某种IsCurrent标志可以获得什么?

选项2 - 将所有存档记录存储在单独的表中

将有一个表来存储当前的实时测量值

CREATE TABLE [dbo].[WeatherMeasurement](
  MeasurementID [int] Identity(1,1) NOT Null,
  TownID [int] Not Null,
  Temp [int] NOT Null,
  Date [datetime] NOT Null,
)
Run Code Online (Sandbox Code Playgroud)

还有一个存储历史存档日期的表(也许是由触发器插入)

CREATE TABLE [dbo].[WeatherMeasurementHistory](
  MeasurementID [int] Identity(1,1) NOT Null,
  TownID [int] Not Null,
  Temp [int] NOT Null,
  Date [datetime] NOT Null,
) …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server performance sql-server-2008

22
推荐指数
2
解决办法
1万
查看次数

从头开始构建OLAP解决方案时,我应该考虑什么?

我正在为一家运行基于MS SQL数据库服务器的软件产品的公司工作,多年来我用PHP开发了20-30个非常先进的报告,直接从数据库中获取数据.这非常成功,人们对此很满意.

但它有一些缺点:

  • 对于新的变化,它可能是非常发展的
  • 用户无法对数据进行多少实验 - 它被锁定到硬编码视图
  • 大报告可能会很慢

我正在考虑逐步采用基于OLAP的方法,可以从Excel或某些基于Web的服务查询.但我想以一种在IT环境中引入最少量新复杂性的方式来实现这一点 - 最少量的不同服务,同步工作等!

我在这方面有一些问题:

1)与工作流程相关:

  • 从"黑匣子SQL服务器"到"OLAP准备就绪"的良好发展路线是什么?
  • 应该设置哪些服务器和服务,以及应该编写哪些脚本?
  • 哪些是最难/最关键/最耗时的部分?

2)ETL:

  • 我想最好为他们的数据仓库和生产SQL提供单独的服务器?
  • 这些如何保持同步(推/拉)?使用哪些技术/语言?
  • 对我来说,SSIS看起来过于复杂,而且图形工作流对我来说并不吸引人 - 我宁愿喜欢基于文本的脚本来完成这项工作.这可行吗?
  • 或者仅使用一个源和一个目的地的图形客户端是否有利?

3)发展:

  • 从CLI工具可以有效维护多少(数据集成,分析服务)?
  • 设置是否可以轻松地在生产和开发之间来回切换?

我对任何涵盖其中一部分的答案感到满意 - 即使它是一个MS环境,我也很想知道其他技术的优势.

sql-server olap ssis data-warehouse business-intelligence

11
推荐指数
1
解决办法
2158
查看次数

如何创建历史事实表?

我的数据仓库中有一些实体:

  1. - 具有属性personId,dateFrom,dateTo和其他可以更改的人,例如姓氏,出生日期等 - 慢慢变化的维度

  2. 文档 - documentId,数字,类型

  3. 地址 - addressId,city,street,house,flat

(人与文件)之间的关系是一对多,(人与地址)是多对多的.

我的目标是创建历史事实表,可以回答以下问题:

  1. 哪些人在规定的日期定义了哪些文件?

2,居民的定义地址在规定的时间间隔内有什么历史?

这不仅适用于DW的设计,但我认为这是DW设计中最难的事情.

例如,布朗小姐的personId = 1,自01/01/2005至02/02/2010以来,documentId = 1且documentId = 2的文档已经存在于addressId = 1的地址,然后移至addressId = 2从2010年2月2日开始生活到当前日期(NULL?).但她自2006年5月4日起将姓氏改为格林夫人,自2007年7月6日起,她的第一份文件记录为documentId = 1至documentId = 3.带有personId = 2的Bl​​ack先生,自2010年2月2日至今日,documentId = 4一直存在于addressId = 1.

对于问题2的查询的预期结果,其中addressId = 1,时间间隔是从01/01/2000到现在,必须如下:

行:

last_name="Brown", documentId=1, dateFrom=01/01/2005, dateTo=04/04/2006

last_name="Brown", documentId=2, dateFrom=01/01/2005, dateTo=04/04/2006

last_name="Green", documentId=1, dateFrom=04/05/2006, dateTo=06/06/2007

last_name="Green", documentId=2, dateFrom=04/05/2006, dateTo=06/06/2007

last_name="Green", documentId=2, dateFrom=06/07/2007, dateTo=02/01/2010

last_name="Green", documentId=3, dateFrom=06/07/2007, dateTo=02/01/2010

last_name="Black", documentId=4, dateFrom=02/03/2010, dateTo=NULL
Run Code Online (Sandbox Code Playgroud)

我有一个想法,用复合键(personId,documentId,addressId,dateFrom)创建事实表,但我不知道如何加载此表,然后使用此结构获得预期的结果.

我会很高兴得到任何帮助!

sql data-warehouse fact-table datahistory

11
推荐指数
1
解决办法
3817
查看次数