我在KDB数据库上创建一个新表作为parted splay(按日期分开),新表模式有一个名为CCYY的列,它有很多重复值。我不确定是否应将其保存为字符或符号。我的主要目标是使用最少的内存。
结果我应该使用哪一个?在重复的展开设置中将重复值保存为char数组或符号有什么好处/缺点?
答案 0 :(得分:1)
听起来你应该使用符号。
这里有符号/枚举指南:http://www.timestored.com/kdb-guides/strings-symbols-enumeration#when-to-use引用:
通常,您应遵循指南:
- 如果该列用于where子句中的相等比较,例如 从
A
B中的sym中选择t - >符号- 短,经常重复的字符串 - >符号
- Else Long,Non-repeated strings - >串
醇>
答案 1 :(得分:0)
在评估是否对列使用符号时,该列的基数是关键。单个值的长度更少,并且如果有的话,更长的值可能更好地作为符号,因为它们将仅在sym文件中存储一次,但在char向量中重复。如果你压缩磁盘上的数据,那么这个考虑就没什么可说的了。
如果您的价值观足够短,请不要忘记使用.Q.j10
,.Q.x10
,.Q.j12
和.Q.x12
的可能性。这将使用比char矢量更少的空间。并且它不依赖于sym文件,在复杂的环境中,如果您在syd文件不同步的hdbs之间复制表,则可以避免重新枚举。
如果需要考虑空间,请始终压缩磁盘上的数据。