我正在为数据库cratedb建模。
我有一个平均。每天有400名客户和每天产生不同数量的时间序列数据。(在5k至500k之间; AVG。〜15K)
以后我应该能够查询每个customer_year_month和customer_year_calendar_week。这意味着我只会查询间隔:
- 周
- 和月份
现在我在问自己如何划分这张桌子?
我将每个客户和年份。
这有意义吗?
或者客户,每年和月份>?
,因此分区表的问题非常复杂,应该考虑很多事情。等:
- 应该运行哪些查询?
- 插入数据的方式
- 可用的硬件资源
- 群集大小
本质上,每个分区还通过乘以碎片计数(可以根据列值视为"子桌")来创建开销,如果选择不正确,则可以很大程度上阻碍性能。因此,在您的情况下,每天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片;)
docs:date_trunc(),分区表
理想情况下,您尝试一些不同的组合,并找到最适合您的组合。我们的系统桌提供了对碎片尺寸和位置的见解,因此您可以查看是否有一个特别胖的碎片超载节点;)
;)欢呼,claus