我正在为Database CrateDB建模 我有一个平均值。 400个客户,每天产生不同数量的时间序列数据。 (介于5K和500K之间;平均~15K)
稍后我应该能够按customer_year_month和customer_year_calendar_week进行查询。 这意味着我只会查询间隔:
现在我问自己如何分割这张桌子?
我会每个客户和年份
这有意义吗?
或者客户,年份和月份会更好吗?
答案 0 :(得分: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(),partitioned tables
理想情况下,您可以尝试一些不同的组合,找到最适合您的方法。我们的sys tables提供了对分片大小和位置的深入分析,因此您可以看到是否有一个特别胖的分片会使节点过载;)
干杯,克劳斯