为 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 提供了对分片大小和位置的洞察,因此您可以查看是否有一个特别胖的分片使节点过载 ;)

干杯,克劳斯