问题描述
我们有一个ETL进程,它必须从远程数据库 (Oracle 12c) 获取数据。由于某些原因,我们无法直接访问ETL进程的远程表。
我们正在考虑两种选择:
备选方案1。在本地数据库上,将dblink创建到远程数据库,使用dblink创建视图,并在这些视图上授予ETL进程的select特权。
备选方案2。在本地数据库上创建物化视图,ETL进程将从中获取数据。
ETL运行时间计算:
选项1: ETL运行时间 (ETL使用dblink从视图中获取数据到远程数据库)
选项2: 刷新实体化视图ETL运行时间 (我们不能使用快速刷新,因为它需要源上的日志,并且我们将无法/不允许在源上创建日志)
这两种选择中哪一种会更快?为什么?
谢谢你的回复。
我们正在考虑两种选择:
备选方案1。在本地数据库上,将dblink创建到远程数据库,使用dblink创建视图,并在这些视图上授予ETL进程的select特权。
备选方案2。在本地数据库上创建物化视图,ETL进程将从中获取数据。
ETL运行时间计算:
选项1: ETL运行时间 (ETL使用dblink从视图中获取数据到远程数据库)
选项2: 刷新实体化视图ETL运行时间 (我们不能使用快速刷新,因为它需要源上的日志,并且我们将无法/不允许在源上创建日志)
这两种选择中哪一种会更快?为什么?
谢谢你的回复。
专家解答
这个问题只有一个真正的答案:
'\ _(ツ)_/''
它会更快地出来取决于你的确切查询,数据,它是如何编码的,等等。
但假设:
-你完全刷新了物化视图
-他们返回源的 “所有” 数据
-查询仅访问远程数据库中的表
我希望选项1更快。因为选项2必须做相同的工作来查询源并通过网络发送数据。然后在此之上构建本地MV,然后针对此运行另一组查询。
但是,如果MVs仅选择数据的一个子集,我想在某些情况下可能会更好。
所以别猜了!测试。
构建两种方法的原型。然后对它们进行分析/跟踪,看看哪个效果更好。
当然,如果您能够获得构建快速可刷新的mv的权限,我希望选项2更快。这是因为您可以安排与ETL进程分开的定期刷新。这将使本地MV保持最新状态,从而使网络脱离方程式。
'\ _(ツ)_/''
它会更快地出来取决于你的确切查询,数据,它是如何编码的,等等。
但假设:
-你完全刷新了物化视图
-他们返回源的 “所有” 数据
-查询仅访问远程数据库中的表
我希望选项1更快。因为选项2必须做相同的工作来查询源并通过网络发送数据。然后在此之上构建本地MV,然后针对此运行另一组查询。
但是,如果MVs仅选择数据的一个子集,我想在某些情况下可能会更好。
所以别猜了!测试。
构建两种方法的原型。然后对它们进行分析/跟踪,看看哪个效果更好。
当然,如果您能够获得构建快速可刷新的mv的权限,我希望选项2更快。这是因为您可以安排与ETL进程分开的定期刷新。这将使本地MV保持最新状态,从而使网络脱离方程式。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




