了解用量
欢迎使用 GreptimeCloud,本文档将介绍 GreptimeCloud 的用量计算算法。您可以前往 GreptimeCloud 控制台 监控服务的使用情况。
容量单位
所有对 GreptimeCloud 的请求都是以容量单位来衡量的,容量单位反映了请求的大小和复杂程度。写容量单位和读容量单位的计算方法不同,详情请见下文。
WCU (Write Capacity Unit)
每个写入数据到表的 API 调用都是一个写请求。WCU 是根据一次请求中插入行的总大小来计算的。一个标准的 WCU 可以写入不超过 1 KB 的行数据。对于大于 1 KB 的数据,需要额外的 WCU。
WCU 的容量可能会在未来发生变化。
每个请求的大小根据以下步骤计算:
- 获取表结构中每个列的数据类型的大小。你可以在 数据类型 文档中找到有关每个数据类型大小的详细信息。
- 计算请求中所有列的大小之和。如果请求中不存在某列,则其大小取决于该列的默认值。如果默认值为 null,则大小为 0;否则,它是该列数据类型的大小。
- 行数据的总和乘以要写入的行 数。
这是一个具有以下表结构的 WCU 计算示例:
+-------------+----------------------+------+------+---------------------+---------------+
| Column | Type | Key | Null | Default | Semantic Type |
+-------------+----------------------+------+------+---------------------+---------------+
| host | String | PRI | YES | | TAG |
| idc | String | PRI | YES | | TAG |
| cpu_util | Float64 | | YES | | FIELD |
| memory_util | Float64 | | YES | | FIELD |
| disk_util | Float64 | | YES | | FIELD |
| ts | TimestampMillisecond | PRI | NO | current_timestamp() | TIMESTAMP |
+-------------+----------------------+------+------+---------------------+---------------+
你有一个这样的写请求:
INSERT INTO system_metrics VALUES ("host1", "a", 11.8, 10.3, 10.3, 1667446797450);
根据表结构中数据类型的大小,每行数据的大小为 38 字节(5+1+8+8+8+8),根据计算算法,此请求的 WCU 为 1。为了减少 WCU,可以使用批量的 INSERT
语句在单个语句中插入多行数据,而不是每行数据都发送一个单独的请求。例如:
INSERT INTO system_metrics
VALUES
("host1", "idc_a", 11.8, 10.3, 10.3, 1667446797450),
("host1", "idc_a", 80.1, 70.3, 90.0, 1667446797550),
# ...... 22 rows
("host1", "idc_b", 90.0, 39.9, 60.6, 1667446798250);
该请求的大小为 950 字节(38 x 25)。此请求的 WCU 为 1。如果你在单个语句中插入 40 行数据,则大小为 1520 字节(38 x 40),此请求的 WCU 为 2。
RCU (Read Capacity Unit)
从表中读取数据的每个 API 调用都是一个读请求,RCU 是一个请求中消耗的服务器资源。它取决于以下几个因素:
- 该请求消耗的 CPU 时间
- 该请求扫描的数据大小
一个标准的读容量单位可以消耗不超过 1ms 的 CPU 时间或扫描不超过 1KB 的数据。对于大于 1ms 的 CPU 时间或 1KB 的扫描数据,需要额外的 RCU。
RCU 的容量可能会在未来发生变化。
假设有一个读请求,消耗了 2.5ms 的 CPU 时间并扫描了 2KB 的数据,所有这些消耗加起来总共需要 5 个 RCU:
- 2.5ms CPU 时间消耗的 3 个 RCU
- 扫描的 2KB 数据消耗的 2 个 RCU
为了降低 RCU,可以仔细设计表结构和查询请求。以下是一些建议:
- 使用索引以支持在 GreptimeDB 中高效地执行查询。如果没有索引,GreptimeDB 必须扫描整个表来处理查询。如果索引与查询匹配,GreptimeDB 可以使用索引来限制扫描的数据。请考虑使用具有高区分度的列作为主键,并在
WHERE
子句中使用它。 - 选择使用匹配结果较少的查询。例如,时间索引字段和高区分度的标签字段上的相等匹配可以有效地限制扫描的数据大小。请注意,不等运算符
!=
无法做到有效查询,因为它总是会扫描所有数据。
存储容量
GreptimeCloud 将数据存储在云端对象存储中,例如 S3,并测量你在数据库中保存的总数据大小。
数据保留
根据定价计划,GreptimeCloud 可能会为你的数据启用默认保留策略,超过保留期限的数据会被删除。
Tech Preview 计划
Tech Preview 计划为用户提供以下免费额度以尝试 GreptimeCloud:
- 写容量单位(WCU):每个服务 800 WCU/s。
- 存储容量:每个服务 10GB。
- 帐户限制:每个团队 3 个服务。
- 数据保留策略:默认保留最近三个月写入的数据。
该计划可能会在未来发生变化。如果你对此有任何疑问,请联系 feedback@greptime.cloud。