跳到主要内容

Databend vs. Snowflake: 数据导入基准测试

概述

我们进行了四项具体的基准测试,以评估 Databend Cloud 与 Snowflake:

  1. TPC-H SF100 数据集加载:侧重于大型数据集(100GB,约 6 亿行)的加载性能和成本。
  2. ClickBench Hits 数据集加载:测试加载宽表数据集(76GB,约 1 亿行,105 列)的效率,重点关注与高列数相关的挑战。
  3. 1 秒时效性:衡量平台在严格的 1 秒时效性要求下摄取数据的能力。
  4. 5 秒时效性:比较平台在 5 秒时效性约束下的数据摄取能力。

平台

  • Snowflake:一个知名的云数据平台,强调可扩展的计算、数据共享。
  • Databend Cloud:一个构建在开源 Databend 项目之上的云原生数仓,专注于可扩展性和成本效益。

基准测试条件

Small-Size 计算集群(16vCPU,AWS us-east-2)上使用来自同一 S3 存储桶的数据进行。

性能和成本比较

性能和成本

  • TPC-H SF100 数据:Databend Cloud 比 Snowflake 节省 67% 的成本
  • ClickBench Hits 数据:Databend Cloud 实现了 91% 的成本降低
  • 1 秒时效性:Databend 加载的数据量是 Snowflake 的 400 倍
  • 5 秒时效性:Databend 加载的数据量是 Snowflake 的 27 倍以上

数据导入基准测试

image

TPC-H SF100 数据集

指标SnowflakeDatabend Cloud描述
总时间695s446s加载数据集的时间。
总成本$0.77$0.25数据加载的成本。
  • 数据量:100GB
  • 行数:约 6 亿

ClickBench Hits 数据集

指标SnowflakeDatabend Cloud描述
总时间51m 17s9m 58s加载数据集的时间。
总成本$3.42$0.30数据加载的成本。
  • 数据量:76GB
  • 行数:约 1 亿
  • 表宽度:105 列

时效性基准测试

image

1 秒时效性基准测试

评估在 1 秒时效性要求内摄取的数据量。

指标SnowflakeDatabend Cloud描述
总时间1s1s加载时间范围。
总行数100 Rows40,000 Rows在 1 秒内成功摄取的数据量。

5 秒时效性基准测试

评估在 5 秒时效性要求内可以摄取的数据量。

指标SnowflakeDatabend Cloud描述
总时间5s5s加载时间范围。
总行数90,000 Rows2,500,000 Rows在 5 秒内成功摄取的数据量。

重现基准测试

您可以按照以下步骤重现基准测试。

基准测试环境

Snowflake 和 Databend Cloud 都在相似的条件下进行了测试:

参数SnowflakeDatabend Cloud
计算集群大小SmallSmall
vCPU1616
价格$4/hour$2/hour
AWS 区域us-east-2us-east-2
存储AWS S3AWS S3

前提条件

数据导入基准测试

可以使用以下步骤重现数据导入基准测试:

TPC-H 数据加载
  1. Snowflake 数据加载

  2. Databend Cloud 数据加载

ClickBench Hits 数据加载
  1. Snowflake 数据加载

  2. Databend Cloud 数据加载

时效性基准测试

可以使用以下步骤重现时效性基准测试的数据生成和摄取:

  1. 在 Databend Cloud 中创建一个 external stage
CREATE STAGE hits_unload_stage
URL = 's3://unload/files/'
CONNECTION = (
ACCESS_KEY_ID = '<your-access-key-id>',
SECRET_ACCESS_KEY = '<your-secret-access-key>'
);
  1. 将数据卸载到 external stage。
CREATE or REPLACE FILE FORMAT tsv_unload_format_gzip
TYPE = TSV,
COMPRESSION = gzip;

COPY INTO @hits_unload_stage
FROM (
SELECT *
FROM hits limit <the-rows-you-want>
)
FILE_FORMAT = (FORMAT_NAME = 'tsv_unload_format_gzip')
DETAILED_OUTPUT = true;
  1. 将数据从 external stage 加载到 hits 表。
COPY INTO hits
FROM @hits_unload_stage
PATTERN = '.*[.]tsv.gz'
FILE_FORMAT = (TYPE = TSV, COMPRESSION=auto);
  1. 从仪表板衡量结果。