Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database design “增量”的数据库设计;“出口”;到数据仓库_Database Design_Data Warehouse_Etl - Fatal编程技术网

Database design “增量”的数据库设计;“出口”;到数据仓库

Database design “增量”的数据库设计;“出口”;到数据仓库,database-design,data-warehouse,etl,Database Design,Data Warehouse,Etl,给定一个1 TB的关系数据库,当前位于SQL Server中。数据仓库需要数据库主要部分的“副本”。仓库数据不应超过24小时。关系数据库的大小使得每晚进行全负荷操作是不切实际的。我应该如何设计关系数据库以支持仓库的增量负载 非常小的一部分(您需要捕获当天的变化,还是只需要在每天结束时获取当前状态的快照 如果快照是可接受的,那么您可以在更新时为每一行添加时间戳,以便识别更改。如果您需要所有日内更改,请查看某种更改数据捕获(CDC)解决方案。一些DBMS内置了CDC/日志功能,并且有第三方工具也可以

给定一个1 TB的关系数据库,当前位于SQL Server中。数据仓库需要数据库主要部分的“副本”。仓库数据不应超过24小时。关系数据库的大小使得每晚进行全负荷操作是不切实际的。我应该如何设计关系数据库以支持仓库的增量负载


非常小的一部分(您需要捕获当天的变化,还是只需要在每天结束时获取当前状态的快照


如果快照是可接受的,那么您可以在更新时为每一行添加时间戳,以便识别更改。如果您需要所有日内更改,请查看某种更改数据捕获(CDC)解决方案。一些DBMS内置了CDC/日志功能,并且有第三方工具也可以完成相同的工作。通常,它们会在不直接访问表的情况下删除重做日志,以最大限度地减少源系统上的资源争用。

您需要捕获日内更改还是只需要当前日志的快照在每天结束时陈述


如果快照是可接受的,那么您可以在更新时为每一行添加时间戳,以便识别更改。如果您需要所有日内更改,请查看某种更改数据捕获(CDC)解决方案。一些DBMS内置了CDC/日志功能,还有第三方工具也可以完成同样的工作。通常,它们会在不直接访问表的情况下删除重做日志,以最大限度地减少源系统上的资源争用。

这是一个棘手的领域-通常称为“提取、转换、加载”或者ETL。没有正确的答案,我发现的书也没有一本那么有说服力——拉尔夫·金博尔似乎写了最有用的书

首先,我建议您考虑将时间戳列添加到关系系统中;然后您可以创建夜间查询,以提取比上次成功运行更早的数据。您可能希望创建其他表来存储传输状态-因此源表中的记录在传输表中应有相应的记录;如果该记录不存在,这意味着该记录尚未转出

如果事务数据模型高度规范化,那么管理依赖关系可能会很棘手—必须首先迁移所有外键值,这可能会导致长的依赖关系链

如果性能受到影响,您可能需要考虑使用事务数据库的镜像来运行ETL任务——这是一个全新的复杂性层次


我会先读金宝的书,看看是否有任何想法看起来直接适用。

这是一个棘手的领域——通常被称为“提取、转换、加载”或ETL。没有正确的答案,而且我发现的书都没有那么令人信服的——拉尔夫·金宝似乎写了最有用的

首先,我建议您考虑将时间戳列添加到关系系统中;然后您可以创建夜间查询,以提取比上次成功运行更早的数据。您可能希望创建其他表来存储传输状态-因此源表中的记录在传输表中应有相应的记录;如果该记录不存在,这意味着该记录尚未转出

如果事务数据模型高度规范化,那么管理依赖关系可能会很棘手—必须首先迁移所有外键值,这可能会导致长的依赖关系链

如果性能受到影响,您可能需要考虑使用事务数据库的镜像来运行ETL任务——这是一个全新的复杂性层次


我会先阅读Kimball的书,看看是否有任何想法看起来是直接适用的。

有很多方法可以处理增量拉动。有很多关于各种方法和场景的书,所以我可以给你一个方法的例子

  • 对于插入,使用单调递增键跟踪每次拉动的高水位线。在拉动数据之前,请检查目标表中的最大值,然后从值大于该值的源拉动

  • 对于更新,以“上次修改”时间戳为基础进行增量。在每个批次结束时,您需要记下最新的时间戳,并将其存储在可以为下一批次提取的位置

  • 增量删除比较困难。我建议您为每个可删除表保留一个简单的审核表,以便跟踪删除行的键值。对于每个批,根据前一批的高水位线进行提取,然后在目标系统中采取适用的操作。在某些情况下,如安全港操作,您可以您可以选择从目标系统中物理删除行。您可以选择仅将目标记录标记为非活动。这取决于您设置的规则


当然,这不是唯一的方法。但希望它能为您提供一些适用的上下文。

有很多方法可以处理增量拉取。有很多卷都是针对各种方法和场景编写的,所以我可以给您一个方法示例

  • 对于插入,使用单调递增键跟踪每次拉动的高水位线。在拉动数据之前,请检查目标表中的最大值,然后从值大于该值的源拉动

  • 对于更新,以“上次修改”时间戳为基础进行增量。在每个批次结束时,您需要记下最新的时间戳,并将其存储在可以为下一批次提取的位置

  • 增量中的删除比较困难。我建议您为每个可删除表保留一个简单的审核表,以便跟踪已删除行的键值。Fo