首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >雪花和rockset之间的更新有何不同。是否批量更新?

雪花和rockset之间的更新有何不同。是否批量更新?
EN

Stack Overflow用户
提问于 2019-05-21 05:59:18
回答 1查看 0关注 0票数 0

雪花中单个行更新的效率如何。我们可以使用雪花作为事务DB吗?

EN

回答 1

Stack Overflow用户

发布于 2019-05-21 15:44:01

Snowflake是一个批量更新系统,并且针对附加新数据记录进行了优化,而Rockset是一个就地更新系统,并且针对添加新记录以及覆盖现有数据记录进行了优化。Snowflake更新针对数据仓库工作负载进行了优化,而Rockset针对Operational Analytics进行了优化。

许多雪花集群使用中央FoundationDB数据库来存储有关组织的所有这些集群的元数据。元数据集群维护从表名到表中的S3文件集的映射。每个S3文件包含几千条记录,通常是几兆字节(例如64-100 MB)。S3文件中的数据是柱状压缩的。Columnar压缩的优点是文件大小较小,可以在S3和雪花服务之间实现高效,快速的数据传输,缺点是现有记录的更新不能就地发生,因为您无法更新部分柱状压缩数据在S3文件中。Snowflake使用S3文件的copy-on-write模式来支持更新。让我们用两个雪花簇A和B的场景来解释这个。

当在集群A上发生对表的单个记录的更新时,雪花软件读取后备S3文件,在内存中更新它,然后将整个64 MB文件刷新到新的S3对象中(实质上是写入时的拷贝)整个S3文件)。然后,它使用新元数据更新FoundationDB。群集B通过FoundationDB获取此更新,并重新读取新的S3对象并开始提供新数据。写入将在几秒钟内显示在群集B中。

到目前为止,您必须明白,上述系统的挑战是覆盖量。通过为每个单独的更新写入/读取整个S3对象(每个S3文件的写时复制而不是每个单独的记录),更新从一个集群传播到另一个集群。这意味着如果更新100字节记录,这将导致群集B从S3读取64 MB数据(假设S3对象为64 MB)。

因此,如果您的更新少于每秒几次,那么雪花就能正常工作。或者,如果您将所有更新批量处理5到10分钟,然后通过单个更新将它们插入雪花中,那将非常有用。但任何更高的更新率都会导致问题。

另一方面,Rockset使用名为RocksDB-Cloud Rockset 的可变键值存储将单个记录切割成一组键值,并将这些键值中的每一个插入到RocksDB-Cloud中。RocksDB-Cloud是RocksDB的云版本,使用针对快速更新进行优化的LSM树,这意味着可以更新单个记录,而无需对整个S3文件进行写时复制。Rockset集合每秒可以支持几千次覆盖。请参阅RocksDB性能基准测试中标题为“随机写入”的部分。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100006768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档