database - 表中的 sym 列是否起特殊作用?
问题描述
通常在 kdb+ 设置中,我看到这sym
是一列,它对数据的实际情况非常不具描述性;ticker
例如,在金融领域,这通常是您可能想要的物联网/机器人sensor
等。在原型捕获设置中,您将看到date time sym
前三列;数据库分区date
并按time
(“日期”作为名称派生自分区类型,“时间”可以是任何东西,尽管是显而易见的选择)。我的问题是为什么sym
在代码/文学中扮演与其他两个同样突出/重要的角色?
解决方案
sym 列的部分重要性实际上在于数据通常如何存储在磁盘上。虽然分区数据库通常按日期分区,但实际上按符号而不是时间对日期分区内的表进行排序是很常见的。当按sym而不是时间排序时,可以将parted属性应用到sym列,如果按sym过滤,可以大大提高查询历史数据库的速度。
据我了解,使用“符号”一词只是因为它是符号的缩写。它的流行部分只是惯例,但是它也被用作对 kdb 一个特别重要的方面的引用,即 sym 文件。将展开或分区表保存到磁盘时,有必要枚举任何类型为 `symbol. 这将允许 sym 数据以固定长度格式(整数)而不是可变长度符号保存到磁盘。这也有助于在数据按 sym 排序时大幅提高查询速度。枚举的问题在于,有必要保留一个整数对应于什么符号的映射,这是最重要的 sym 文件。
需要注意的另一点是许多 kdb+tick 架构,例如 Kx 提供的 vanilla tick 设置,强制每个表的前两列是 time 和 sym。.u.sub
,由 kdb 进程调用以通过 tickerplant 订阅提要的函数,它允许订阅者通过 sym 过滤他们想要接收的数据,这需要存在一个名为 sym 的列。如果你想要一个没有 sym 列的数据库,你必须对你的架构进行一些修改。
推荐阅读
- python - 从名为“python”的文件夹中导入 python 脚本
- algorithm - 在二叉树中找到最长路径的算法?
- reactjs - 调整 SVG 元素鼠标的大小在边缘失去“抓地力”
- java - Modelnstance 中的网格
- tensorflow - keras中的自定义损失函数涉及巨大的矩阵乘法
- firebase - Firebase:403 PERMISSION_DENIED(FirebaseError:安装):更新SDK(FirebaseInstallationsService)后请求被阻止
- laravel - 处理公用文件夹中的图像文件时 Laravel CORS 问题?
- rider - 关闭并重新打开 IDE 后如何维护项目树状态(折叠和/或展开的项目)?
- javascript - 美国邮政编码自动添加 - 9 位数
- java - 如何避免 RadioGroup 在 RecyclerView 中检查两次