1

我在 KDB 数据库上创建一个新表作为分开的展开(按日期分开),新表模式有一个名为 CCYY 的列,它有很多重复值。我不确定是否应该将其保存为字符或符号。我的主要目标是使用最少的内存。

结果我应该使用哪一个?在分开的张开设置中将重复值保存为字符数组或符号的好处/坏处是什么?

4

2 回答 2

1

听起来你应该使用符号。

这里有符号/枚举指南:http: //www.timestored.com/kdb-guides/strings-symbols-enumeration#when-to-use报价:

通常,您应该遵循以下准则:

  1. 如果在 where 子句相等比较中使用该列,例如 select from t where sym in AB -> Symbol
  2. 短而经常重复的字符串 -> 符号
  3. 其他长的、不重复的字符串 -> 字符串
于 2014-04-18T06:56:46.077 回答
0

在评估是否对列使用符号时,该列的基数是关键。单个值的长度无关紧要,如果有的话,更长的值作为符号可能会更好,因为它们只会在 sym 文件中存储一次,但会在 char 向量中重复。但是,如果您在磁盘上压缩数据,那么这种考虑几乎没有意义。

如果您的值足够短,请不要忘记使用.Q.j10.Q.x10.Q.j12的可能性.Q.x12。这将比 char 向量使用更少的空间。而且它不依赖于 sym 文件,在复杂的环境中,如果您在 hdbs 之间复制表而 sym 文件不同步,它可以让您不必重新枚举。

如果空间是一个问题,请始终压缩磁盘上的数据。

于 2014-04-21T23:58:02.487 回答