0

我正在为 Database CrateDB 建模。
我有一个平均值。400 个客户,每天产生不同数量的时间序列数据。(介于 5K 和 500K 之间;平均约为 15K)

稍后我应该能够查询每个 customer_year_month 和每个 customer_year_calendar_week。这意味着我只会查询间隔:

  • 星期
  • 和月份

现在我问自己如何分区这个表?

我会按客户和年份进行分配。
这有意义吗?还是按客户、年份和月份划分
会更好?

4

1 回答 1

0

所以分区表的问题是相当复杂的,应该考虑很多事情。其中:

  • 应该运行哪些查询?
  • 插入数据的方式
  • 可用的硬件资源
  • 簇的大小

从本质上讲,每个分区还通过乘以分片计数(一个分区可以被认为是基于列值的“子表”)来产生开销,如果选择不当 - 会严重影响性能。因此,在您的情况下,每天 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

如果您有适当数量的 CPU 内核,请仅使用 8 个分片;)

文档:date_trunc()分区表

理想情况下,您尝试几种不同的组合并找到最适合您的组合。我们的系统表提供了对分片大小和位置的洞察,因此您可以查看是否有一个特别胖的分片使节点过载;)

干杯,克劳斯

于 2016-12-14T15:35:25.897 回答