为 Crate 数据库设置正确的分区
Set the right partitions for Crate Database
我正在为数据库 CrateDB 建模。
我有一个平均值。 400 个客户,每天产生不同数量的时间序列数据。 (介于 5K 和 500K 之间;平均 ~15K)
稍后我应该可以根据 customer_year_month 和 customer_year_calendar_week 进行查询。
这意味着我只会查询间隔:
- 周
- 和月份
现在我问自己如何划分这个table?
我会每个客户和年份。
这有意义吗?
或者按客户、年份和月份划分会更好吗?
所以划分一个table的问题比较复杂,要考虑很多东西。其中:
- 应该运行查询哪些内容?
- 插入数据的方式
- 可用硬件资源
- 集群大小
本质上,每个分区还通过乘以分片计数(根据列值可以将分区视为 "sub-table")产生开销,如果选择不当,这会严重影响性能。
因此,在您的情况下,每天 15k 插入并不算太多,但是插入的分布可能会导致问题,每天增加 500k 插入的客户分区将 运行 比 5k 人更早出现性能问题。因此,我只会使用每周分区。
create table "customer-logging" (
customer_id long,
log string,
ts timestamp,
week as date_trunc('week', ts)
) partitioned by (week) into 8 shards
Please only use 8 shards if you have an appropriate amount of CPU cores ;)
文档:date_trunc(), partitioned tables
理想情况下,您可以尝试几种不同的组合,然后找到最适合您的组合。我们的 sys tables 提供了对分片大小和位置的洞察,因此您可以查看是否有一个特别胖的分片使节点过载 ;)
干杯,克劳斯
我正在为数据库 CrateDB 建模。
我有一个平均值。 400 个客户,每天产生不同数量的时间序列数据。 (介于 5K 和 500K 之间;平均 ~15K)
稍后我应该可以根据 customer_year_month 和 customer_year_calendar_week 进行查询。 这意味着我只会查询间隔:
- 周
- 和月份
现在我问自己如何划分这个table?
我会每个客户和年份。
这有意义吗?
或者按客户、年份和月份划分会更好吗?
所以划分一个table的问题比较复杂,要考虑很多东西。其中:
- 应该运行查询哪些内容?
- 插入数据的方式
- 可用硬件资源
- 集群大小
本质上,每个分区还通过乘以分片计数(根据列值可以将分区视为 "sub-table")产生开销,如果选择不当,这会严重影响性能。 因此,在您的情况下,每天 15k 插入并不算太多,但是插入的分布可能会导致问题,每天增加 500k 插入的客户分区将 运行 比 5k 人更早出现性能问题。因此,我只会使用每周分区。
create table "customer-logging" (
customer_id long,
log string,
ts timestamp,
week as date_trunc('week', ts)
) partitioned by (week) into 8 shards
Please only use 8 shards if you have an appropriate amount of CPU cores ;)
文档:date_trunc(), partitioned tables
理想情况下,您可以尝试几种不同的组合,然后找到最适合您的组合。我们的 sys tables 提供了对分片大小和位置的洞察,因此您可以查看是否有一个特别胖的分片使节点过载 ;)
干杯,克劳斯