
KX 新版本为符号列引入自适应编码
来源标题:Encoding in L
KX 数据库新版对符号列采用自适应编码,按数据分布自动选择紧凑表示。相邻编码的列每值仅占 2 比特,压缩到 25%;分散编码的列则原样保存,压缩率为 0%。每个符号列文件独立自包含,无需数据库根目录下的共享文件。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
l>m:5000000
l>near:m?"abcd" / 四个相邻编码
l>spread:m?"zrac" / 四个编码,从 a 到 z 分散
l>sym_near:$'near / 与符号相同的值 l>sym_spread:$'spread
l>int_spread:short$"zrac"?spread / 分散编码映射为 0 到 3 的小整数 l>.z.compnear / 1b 1250096 5000000 25%:每个值 2 比特
l>.z.compspread / 0b 5000000 5000000 100%:原样保留 l>.z.compsym_near / 1b 1250176 40000000
l>.z.compsym_spread / 1b 1250176 40000000 与 sym_near 大小相同 l>.z.compint_spread / 1b 1250096 10000000 与 near 字节数相同
磁盘上的符号
在 l 数据库中,每个符号列文件都是自包含的,因此数据库根目录下没有需要创建、备份、增长或与表保持同步的共享文件。这意味着写入符号时任何问题的影响范围都局限在各自列内。每个符号列文件都包含读取它所需的全部内容:
符号列加载为普通的符号向量(类型 11)。下面是一个用普通 set 写入符号列的表:
l>:db/2026.04.01/t/ set ([] sym:AAPLMSFTAAPLGOOG; px:1 2 3 4.) l>key :db / 仅显示 2026.04.01 分区
l>key :db/2026.04.01/t / .dpxsym:符号列是一个自包含文件
l>\l db
l>select from t where date=2026.04.01 / 符号以普通符号形式返回
l>type exec sym from t where date=2026.04.01 / 11h
符号的读取同样是惰性的:get 和 count 只做文件映射。读取值时会发生什么取决于列的存储方式。对于打包到 lane 中的列,首次读取任何值都会驻留该列所有不同的字符串;在一项针对包含 1,000,000 个不同符号的列的单独测试中,仅索引 3 行就驻留了全部 1,000,000 个。对于符号不超过 8 个字符且直接存储的列,只有你触及的值才会被驻留:索引 3 行驻留 3 个,= 扫描不驻留任何值,而 distinct 会将它们全部驻留。
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。