【发布时间】:2021-01-08 09:40:04
【问题描述】:
我正在试用 QuestDb,它有 Symbol column 类型。 据我了解,存储很少更改的小字符串值很有用。在什么时候最好为字符串使用单独的表并使用整数键代替?我的简化架构是 2 个表:
仪器:ISIN、名称
价格:ISIN、PriceValue、日期
仪器是有限的,但随着时间的推移可以增长到 100 万条记录。我应该在价格中使用 ISIN 的符号列还是更好地创建整数仪器 ID 并引用它?
【问题讨论】:
我正在试用 QuestDb,它有 Symbol column 类型。 据我了解,存储很少更改的小字符串值很有用。在什么时候最好为字符串使用单独的表并使用整数键代替?我的简化架构是 2 个表:
仪器:ISIN、名称
价格:ISIN、PriceValue、日期
仪器是有限的,但随着时间的推移可以增长到 100 万条记录。我应该在价格中使用 ISIN 的符号列还是更好地创建整数仪器 ID 并引用它?
【问题讨论】:
内部符号已存储为单独的表。尽管表似乎在内部列显示符号列的字符串值 存储 32 位整数。对于财务情况,ISIN 和其他代码应始终是符号。 符号针对代码查找进行了优化,例如下面的一个选择一天的整个时间序列
select isin, ... from tab where isin = 'GB00BH4HKS39' and ts = '2021-01'
代码聚合:
select isin, sum(volume) from tab where ts = '2021-01'
不使用符号类型的情况是当您的数据集具有太多不同的字段值时。我会量化 “太多”超过 100,000 个值。此时,必须将 String 解析为 Int 的代码的性能开始,反之亦然 逐渐减少。
【讨论】: