今天我写了我的第一篇博客,希望将来能发布更多的博客。我称自己为数据爱好者,喜欢分析和理解数据,以便编写解决方案,因为最终,数据对于任何应用程序都是至关重要的。废话不多说,让我们进入今天的主题——克隆两个数据仓库系统:
- 雪花
- BigQuery
我看过很多电影,我记得在《漫威英雄》中洛基同时以多种方式克隆自己!这样的克隆在现实世界中可能是不可能的,但在技术世界中是可能的。例如,将代码克隆到本地机器(git克隆是一个主要的例子)。
那么数据库(DB)呢?为什么不克隆它们呢?我们曾经这样做过,但那实际上是消耗空间的DB的副本。您可能想知道为什么我们需要在不消耗空间的情况下克隆一个DB ?答案有很多。在我们进一步深入研究之前,让我们暂停一下为什么我们要克隆(又名复制)。克隆的主要原因是为了解决生产中的问题;当我们移动应用程序时,我们说哦,“我希望我的开发/测试环境中有这样的数据,这样我就可以覆盖这个场景了,”或者“我们的开发/测试环境中没有这么多数据,我无法发现这些问题!””
克隆也有帮助,举几个例子:
- 通过使用类似于数据副本的产品来增强应用程序和底层数据结构
- 性能调优,这是最关键的,因为开发/测试环境缺乏数据集。
我们曾经克隆(也就是复制生产数据到我们的开发和测试环境并执行我们的测试)单片数据库,如Oracle、DB2和SQL Server on-Prem。我们过去称之为克隆,但如果你仔细观察,我们实际上并不是克隆它们,而是复制它们。复制有很多缺点,包括:
- 数据复制
- 手工工作(或执行活动的一些额外工具)
- 需要复制的天数(如果容量很大)
- 数据与生产不同步
- 额外的存储
我个人处理超大数据库的拷贝,这需要2到4天的时间,不包括后期拷贝设置(分析等)的时间。
我曾经希望我们有一个简单的命令来使用,可以在不占用空间的情况下克隆DB,并在不依赖dba的情况下在几个命令中完成我的工作。瞧当我开始做雪花Pro Core认证,学习和玩雪花的时候,这一点被证明是正确的。
雪花
让我回过头来谈谈雪花。雪花是一种多云数据湖/仓库工具,完全建立在云上,用于云,其架构定义在共享磁盘和无共享数据库架构上。它有3个架构层:
- 云服务:服务的协调器和集合。
- 查询处理:系统的大脑,查询执行使用“虚拟仓库”。
- 数据库存储:以柱状模式物理存储数据。
来源:雪花文档
该工具利用云提供商(AWS/谷歌/Azure)的优势,通过使用:
- 计算引擎(广泛用于查询处理层,他们称之为虚拟仓库)
- 云存储(谷歌为GCS, AWS为S3, Azure为Blob Storage)
- VPC(不同版本的网络和其他安全层)
Snowflake有一个很棒的实用程序叫做克隆(他们称之为零拷贝克隆),它可以在一个简单的命令中无缝克隆一个数据库/表(例如创建或替换克隆销售数据库clone_sales_db;).这个命令将克隆整个数据库(有一定的限制;r请参阅雪花文档了解限制).它的美妙之处在于我们大学时代的学习叫做指针/参考!当你给一个命令克隆一个数据库,它简单地做以下事情:
- 创建新的数据库(云服务中的对象名称)
- 数据库下面的所有对象(注意有一些限制,其中某些对象不会被克隆)都被创建(同样是服务层中的对象名称)
人们会期望数据被复制并保存为“副本“但事实并非如此;Snowflake的聪明之处在于它从克隆对象创建了一个指向源数据库/表的指针/引用,这不仅在复制数据(逻辑上)方面具有巨大的优势,而且节省了存储成本。当用户从克隆对象中查询表时,Cloud服务将简单地从实际源中获取数据,使数据尽可能保持最新。此外,这不会消耗创建克隆的时间——它所花费的时间与创建表的时间一样多。
请看这个例子:
- 假设我创建了一个表,名为"交易,加载了大约200K条记录,这个表的总大小是8.6 MB:
- 观察这个表的元数据:
-
- ID:该表的唯一ID
- CLONE_GROUP_ID:克隆对象的ID(所以它和ID一样)
- 现在,我要创建一个事务的克隆,命名为"Transactions_Clone”。现在,表格将显示相同数量的记录:
- 我们可能想知道它是否“复制”了整个“Transactions”表并复制了它,但它没有。那么我们怎么知道它没有复制呢?见下表的元数据:
- 请注意以下几点
- ID:新表有自己的唯一ID
- CLONE_GROUP_ID:它指向“事务”表的ID。多聪明啊!
- 严格来说,当我查询的时候TRANSACTIONS_CLONE它简单地指的是“数据位置”交易”
- 当我们向master添加数据时,您将不会看到TRANSACTIONS_CLONE!(这是意料之中的)
- 现在,让我们说,我从TRANSACTIONS_CLONE(其中的60个)中删除数据,我将看不到这60个,但其他数据仍将从其原始源中引用”交易”
- 活动字节数仍然是0
- 现在我加载了大约100K条记录到这里,看看记录的数量!,它从最近添加的位置获取新数据,其余来自源。
如果任何用户对表或对象进行了更改,雪花所做的就是从新的指针/引用中获得额外的数据(或删除的数据)。这涉及到仅添加数据的存储成本。当你删除数据时,原始数据是不变的,但它的云服务层保留了被删除和添加的必要信息,使其成为“真正的”零副本。
同样,如果你做了任何结构上的改变,雪花会在它的云服务层处理这些改变,并相应地带来必要的数据。
这提供了一个真正的克隆功能,而不消耗任何空间,您可以在几分钟(如果不是几秒钟)内复制表。同时也提高了开发和测试的速度和效率。
BigQuery
BigQuery是最流行的数据库之一,或者我们应该称之为云数据仓库(Cloud Data Warehouse),它为存储数据提供了丰富的特性,并为数据提供了极高的性能和可伸缩性。这是一个完全托管的数据库,因此您不需要担心存储或使用哪个计算引擎。与Snowflake不同的是,您必须使用Virtual Warehouse(又名计算引擎)来运行查询,如果查询运行得不好,那么您可以使用Higher配置的仓库来让查询运行得更好。
在BigQuery中,您不需要担心这些问题,只需专注于编写查询并执行它。您只需要为检索到的数据付费。
BigQuery类似于Snowflake,但是直到现在,它还没有克隆数据库的能力。在谷歌Next ' 21期间,宣布很快你就可以:
- 快照
- 克隆DB
来源:谷歌Next ' 21 Session
正如上面的幻灯片所示,快照是不可变的,但它是一个有用的功能,你可以用它回到过去而不产生任何费用。这有助于节省成本,因为复制表会导致存储成本。
克隆技术已经被引入(虽然目前还无法实现),但其概念以类似雪花的方式运行(我们仍然需要等待官方宣布,直到那时我们可能需要假设),其中您只会对新的或修改的数据产生费用,而不会对其他数据产生费用。当您的表运行到TB或PB时,这节省了巨大的成本。
这是每个开发人员/测试人员都期待在BigQuery上看到的一个功能,一旦克隆就绪,它将极大地促进团队分析生产问题,而无需去Prod。具体来说,你可以简单地克隆并在开发区域运行你的查询,而不需要任何停机时间。时间是最重要的,每个人都想更快、更聪明地完成工作,并希望最大限度地减少人工工作量。
一旦正式发布,这些功能还会有更多内容。我们将看到它在克隆雪花和亚马逊RDS极光的竞争中表现如何。
在以后的博客中,我将深入研究该工具的技术特性,并探索更多的解决方案。到此为止!