table 中的 sym 列是否起着特殊的作用?

Does the sym column in a table play a special role?

我经常在 kdb+ 设置中看到 sym 是一个列,它对数据的实际内容非常没有描述性;在财务中,这通常是 ticker,例如,在 IoT/robotics 中,您可能需要 sensor 等。在原型捕获设置中,您将看到 date time sym 作为前三列;数据库按 date 分区并按 time 排序(“日期”作为名称派生自分区类型,“时间”可以是任何东西,尽管这是显而易见的选择)。我的问题是为什么 sym 与 code/literature 中的其他两个扮演类似 prominent/important 的角色?

sym 列的部分重要性实际上在于数据通常如何存储在磁盘上。虽然分区数据库通常按日期分开,但实际上很常见的是按符号而不是时间对日期分区中的 table 进行排序。当按 sym 而不是时间排序时,可以将 parted 属性应用于 sym 列,如果按 sym 过滤,这将大大提高历史数据库的查询速度。

据我了解,使用 'sym' 一词只是因为它是符号的缩写。它的流行部分只是惯例,但它也被用作对 kdb 一个特别重要的方面的引用,即 sym 文件。将展开的或分区的 table 保存到磁盘时,有必要枚举任何类型为“符号”的数据。这将允许符号数据以固定长度格式(整数)而不是可变长度符号保存到磁盘。当数据按 sym 排序时,这也有助于大幅提高查询速度。枚举的问题是有必要保留一个整数对应于什么符号的映射,这是所有重要的sym文件。

另一点需要注意的是,许多 kdb+tick 架构,例如 Kx 提供的 vanilla tick 设置,强制每个 table 的前两列是 time 和 sym。 .u.sub,由 kdb 进程调用以通过 tickerplant 订阅提要的函数,允许订阅者过滤他们想要通过 sym 接收的数据,这需要存在名为 sym 的列。如果你想要一个没有符号列的数据库,你必须对你的体系结构进行一些修改。