创建用于分析时间序列的数据库分区

Create database partitioning for analyzing time-series

我有 100 000 sources/sensors/symbols。我每天从每一个中读取一个值。

我每天用这些 data/values 加载数据库 table。每个值和符号一行,即每天 100 000 行。

查询 1:

因为我想分析所有交易品种的每日数据,所以我按年、月、周、日对数据库进行分区。

查询 2:

但我还想通过读取每个符号最多 24 个月前的数据来分析 trends/statistics 随着时间的推移每个符号。

查询 2 沿着另一个维度(时间轴),我不想查询针对查询 1 优化的多个分区(y、m、w、d)。

你提出什么样的设计方案?

每天 10 万行并不过分。您一年只创建一个分区。 但如果您还想通过仅处理单个分区来优化查询性能 - 假设您按月进行分区。

此外,我们假设一个三节点集群。所以您可能想创建具有 6 个分片的 table,这样每年总共会产生 6*12 个分片。如果您配置了一个副本 - 6*12*2 个分片 - 这看起来不错。

如果您在 where 子句中指定分区 - crate 将自动仅唤醒这些分片。但您仍然可以看到整个数据。

顺便说一句:这里有一个方便的 link 按时间分区:https://crate.io/a/generated-columns-in-crate/