我们正在将数据仓库从Oracle迁移到Redshift。 目前,我们有两个Oracle数据库实例 - 一个DW实例(主要)获取从一天中不同来源加载的数据,另一个DW(辅助)实例从主DW中复制数据。所有报告平台都指向辅助DW实例。我们如何在Redshift中解决这个问题?我们是否需要有两个Redshift实例从另一个实例复制?如果我们只有一个Redshift实例,那么数据加载开销会影响查询性能。是否会出现表锁问题?
感谢您的建议。感谢。
答案 0 :(得分:0)
这实际上取决于您的报告平台需要多快访问全天加载的数据。如果它可以等待,那么在安静的时间批量加载是有意义的。我怀疑您在当前设置中使用复制这一事实,您需要尽快加载和提供数据。
在这种情况下,使用Redshift的工作负载管理(WLM)设置是有意义的。这允许您指定多个工作负载组,并为每个工作负载组分配并发级别和集群资源分配。使用此模型,您可以对资源进行响铃,以确保报告工具和最终用户的查询性能保证一致的资源分配,同时仍将集群的一部分查询队列和资源专用于您的数据负荷。
这也消除了使用两个单独的数据库实例来处理加载和提供数据的需要。
有关Redshift中WLM的更多详细信息,请参阅此处:http://docs.aws.amazon.com/redshift/latest/dg/cm-c-implementing-workload-management.html
答案 1 :(得分:0)
永远不要从同一个实例读写。甚至没有在Redshift。即使一般情况下,任何强制您从同一台机器读写的系统都反映出设计不佳。
由于您正在讨论Amazon Redshift,我可以非常轻松地假设您拥有分析数据。 (具有柱状架构的Redshift针对读取进行了优化而不是写入。因此,如果您碰巧在Redshift上存储事务数据,我建议您重新考虑您的决定。)
在设计任何关于分析数据的基础知识之前,我们应该始终考虑:
当您缩放时,从同一台机器读取和写入将是灾难性的。而不是忘记锁。删除/截断将在表格中保留Exclusive Locks。如果发生某些其他进程用户已经获得此锁定,那么即使该表上的写入也会失败,从而弄乱数据。
上述原因可能足以说明为什么不使用单个仓库来读/写数据。
遵循以下型号,整洁干净,永不干扰,确保您不会遇到一致性和锁定等问题:
+
|
|
| DS 1 +------------+ +------------+
+---------> | | | |
| | AGGREGATES | | reads
DS 2 | DW 1 +----------> | DW 2 | +----------->
+----------> | | | |
| | | |
+----------> +------------+ +------------+
|... DS n
|
+
where DS : Data Source , DW : Data Warehouse
DW 1中的数据迁移 - > DW 2将完全取决于您需要引用的数据频率。