【问题标题】:Is the storage and compute decoupled in modern cloud data warehouses?现代云数据仓库中的存储和计算是否解耦?
【发布时间】:2022-10-24 22:29:44
【问题描述】:
  • 在 Redshift、Snowflake 和 Azure SQL DW 中,我们是否将存储和计算解耦?

    • 如果它们被解耦,是否仍然使用“外部表”或者它们已经消失了?
  • 当计算和存储紧密耦合时,当我们想要扩展时,我们同时扩展了计算和存储。但在幕后,它是一个虚拟机,我们扩展了计算和虚拟机磁盘吗?你们可能对此有一些读物吗?

非常感谢,我现在很困惑,如果有人能跳出来解释,那将是一件幸事!

【问题讨论】:

    标签: amazon-redshift data-warehouse


    【解决方案1】:

    您有理由感到困惑,因为在很多地方都应用了沉重的营销层。让我们从一些事实开始:

    所有数据库都需要本地磁盘才能运行。此磁盘可以存储表的永久版本(经典的本地存储表,并且需要存储本地工作数据集以供数据库操作。即使在本地磁盘上没有永久存储表的情况下,本地磁盘的大小也是至关重要,因为这允许处理和缓存从远程存储中获取的日期。

    永久表的远程存储有两种“风格”——定义的外部表和透明的远程表。虽然这些风格的工作方式以及每个不同的数据库如何优化它们存在很多差异,但它们都将表的永久版本存储在远离数据库计算系统的磁盘上。

    远程永久存储有利有弊。 “解耦”是远程永久存储最常被提及的优势。这只是意味着您不能用存储“冷”数据来填满本地磁盘,因为在这种情况下,只有“正在使用”的数据存储在本地磁盘上。需要明确的是,如果工作数据集太大,即使使用远程永久存储,您也可以填充(或减少)本地磁盘。远程永久存储的缺点是数据是远程的。跨网络访问一些灵活的存储解决方案意味着获取数据需要更多时间(所有数据库系统都有自己的方法在尽可能多的情况下隐藏它)。这也意味着数据的一致性控制也是跨网络的(在某些方面)并且也会产生影响。

    外部表和透明远程表都是远程永久存储,但有区别。外部表与全资表所在的一致性结构不同(无论是本地的还是远程的)。透明远程只是意味着数据库正在使用远程表“好像”它是本地拥有的。

    VM 不会改变本地磁盘的情况。一定数量的磁盘分配给框中的每个VM,并且一定数量的本地磁盘分配给每个VM。磁盘仍然是本地的,只是只有一部分物理磁盘可以被任何一个 VM 寻址。

    所以离开事实并转向意见。虽然市场营销会告诉您为什么一种类型的数据库存储在所有情况下都比另一种更好,但事实并非如此。每个都有优点和缺点,哪个最适合您将取决于您的需求。仅提供一种数据组织的数据库提供商会告诉您,这是最好的选择,而且适合某些人。

    对于那些对数据访问速度至关重要且缓存不起作用的应用程序,本地表存储总是更快。但是,这意味着 DBA 将需要进行工作以保持磁盘上的数据得到优化,并且适合可用的本地存储(对于所需的计算大小)。这是真正的工作,需要时间和精力。您在远程移动中获得的是这项工作的减少,但它是以数据库成本、硬件成本和/或性能的某种组合为代价的。有时值得权衡,有时则不值得。

    【讨论】:

    • 感谢@Bill 的精彩回答!您提到“所有数据库都需要本地磁盘才能运行。”,我理解。您是否知道传统 DWH 的这种紧密耦合扩展是如何工作的?我不明白为什么我们不能只增加计算而不增加存储?为什么这么说呢?为什么我们不能简单地只添加计算,或者在扩展时只添加存储?例如,RA3 节点之前的 Redshift,为什么会耦合?这不是线性的,就像如果我将存储量增加 10 倍,计算不一定会增加 10 倍?
    • 这就是云计算的本质。他们支持的“预包装”计算机尺寸只有这么多。 Redshift 在 RA3 节点之前有一定程度的解耦。有更多计算与磁盘(dc2 系列)的节点和更多磁盘与计算(ds2 系列)的节点。不解耦,但您可以优化一种或另一种方式。如果这是您拥有虚拟机的全资数据中心,您可以按照自己的意愿进行配置。 AWS 刚刚选择了他们认为对各种客户有意义的磁盘和计算组合。
    • 至于将存储扩展 10 倍,是的,理论上,如果您留在同一类节点中,计算将增加 10 倍。您将获得 10 倍的 CPU、内存和 IO 带宽以及 10 倍的存储,但由于集群/多线程效应,真正的性能不会线性扩展。对于表现良好的 SQL 和数据组织,性能可以扩展接近 10 倍。对于非常糟糕的数据模型和 SQL,我已经看到将计算从 DC2 节点减少到更少的 DS2 节点,由于集群中的节点更少(网络跃点更少)而显着提高了性能。这一切都取决于。
    【解决方案2】:

    当谈到分离(或解耦)云计算与云存储的概念时,这些概念可能会变得有些混乱。简而言之,真正的解耦通常需要对象级存储,而不是更快的传统块存储(传统上是本地存储,也称为本地存储)。主要原因是对象存储是扁平的,没有层次结构,因此随着您添加的数据量线性扩展。因此,它最终也变得更便宜,因为它非常分散、冗余,并且易于重新分配和复制。

    这一点都很重要,因为为了将存储与云中的计算或任何大型分布式计算范式分离,您需要在计算节点之间分片(拆分)数据(存储)......所以当您的存储线性增长时,对象存储是平坦的——允许这种情况发生而不会对性能造成任何损失——而您可以(实际上)立即“重新控制”您的计算节点,以便它们可以在您扩大或缩小计算或承受网络时再次均匀分布工作负载/节点故障。

    【讨论】:

      猜你喜欢
      • 2011-10-10
      • 1970-01-01
      • 2017-01-04
      • 2012-06-04
      • 2018-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多