- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚构建了我的第一个正确的 q/kdb+ 数据库,其中包含展开和分区表。一切都很好,但我只是注意到我的符号 s
列文件大小异常大。这是我从操作系统和 q 内部可以看到的:
# ls -latr 2017.10.30/ngbarx
total 532
-rw-r--r-- 1 root root 24992 Apr 17 20:53 vunadj
-rw-r--r-- 1 root root 24992 Apr 17 20:53 v
-rw-r--r-- 1 root root 300664 Apr 17 20:53 s
...
q)meta ngbarx
c | t f a
------| -----
date | d
s | s p
v | e
vunadj| e
...
q)get `:2017.10.30/ngbarx/s
`p#`sym$`A`AA`AACG`AADI`AADR`AAIC`AAIC-B`AAL`AAM-A`AAMC`AAME`AAOI`AAON`AAP`AA..
q)-22!get `:2017.10.30/ngbarx/v
24990
q)-22!get `:2017.10.30/ngbarx/s
28678
q)all (get `:2017.10.30/ngbarx/s) in sym
1b
q)count sym
62136
所以比较实类型 v
列和符号类型 s
列,我从 ls 看到符号列的大小超过 10 倍,即使以字节为单位的内部大小相似,并且所有内容似乎都在 sym
文件中正确编码。
这是预期的行为吗?还是我做错了什么可以修复?
UPDATE:我没用压缩,用神奇的函数.Q.dcfgnt
写文件,可以查看here .好吧,一个稍微修改的版本,我注意到这个函数在目录中也保存了一个 date
文件,即使列应该是虚拟的,所以我在 k
(我不是很擅长)并将内部函数 .Q.dpfgnt
更新为此 ...
k){[d;p;f;g;n;t]if[~&/qm'r:+en[d]t;'`unmappable];
{[d;g;t;i;x]@[d;x;g;t[x]i]}[d:par[d;p;n];g;r;<r f]'{x@&~x=`date}(!r);
@[;f;`p#]@[d;`.d;:;f,r@&~f=r:{x@&~x=`date}(!r)];n}
最佳答案
应用 parted 属性不是免费的,需要存储。它通常不会那么昂贵,但是查看 s 的示例输出,它看起来不适合分开,因为它不包含重复值:
q)get `:2017.10.30/ngbarx/s
`p#`sym$`A`AA`AACG`AADI`AADR`AAIC`AAIC-B`AAL`AAM-A`AAMC`AAME`AAOI`AAON`AAP`AA..
请参阅下面为说明问题而创建的表格:
/ no part - 16 distinct syms
t1:([]s:100000?`1;v:100000?2e)
/ part - 16 distinct syms
t2:update `p#s from `s xasc ([]s:100000?`1;v:100000?2e)
/ no part - 99999 distinct syms
t3:([]s:100000?`8;v:100000?2e)
/ part - 99999 distinct syms
t4:update `p#s from `s xasc ([]s:100000?`8;v:100000?2e)
t1 和 t2 之间的大小差异与 parted 属性(804096 -> 804664
)无关。但是,当不同的 syms/parts 的数量变得非常大时,存储成本就非常大。 (804096 -> 4749872
)
ls | xargs ls -latr
t1:
total 1180
-rw-r--r-- 1 matmoore matmoore 12 Apr 19 10:28 .d
-rw-r--r-- 1 matmoore matmoore 804096 Apr 19 10:28 s
-rw-r--r-- 1 matmoore matmoore 400016 Apr 19 10:28 v
drwxr-xr-x 1 matmoore matmoore 4096 Apr 19 10:28 .
drwxr-xr-x 1 matmoore matmoore 4096 Apr 19 10:28 ..
t2:
total 1180
-rw-r--r-- 1 matmoore matmoore 12 Apr 19 10:28 .d
-rw-r--r-- 1 matmoore matmoore 804664 Apr 19 10:28 s
-rw-r--r-- 1 matmoore matmoore 400016 Apr 19 10:28 v
drwxr-xr-x 1 matmoore matmoore 4096 Apr 19 10:28 .
drwxr-xr-x 1 matmoore matmoore 4096 Apr 19 10:28 ..
t3:
total 1180
-rw-r--r-- 1 matmoore matmoore 12 Apr 19 10:28 .d
-rw-r--r-- 1 matmoore matmoore 804096 Apr 19 10:28 s
-rw-r--r-- 1 matmoore matmoore 400016 Apr 19 10:28 v
drwxr-xr-x 1 matmoore matmoore 4096 Apr 19 10:28 .
drwxr-xr-x 1 matmoore matmoore 4096 Apr 19 10:28 ..
t4:
total 5032
-rw-r--r-- 1 matmoore matmoore 12 Apr 19 10:28 .d
drwxr-xr-x 1 matmoore matmoore 4096 Apr 19 10:28 ..
-rw-r--r-- 1 matmoore matmoore 4749872 Apr 19 10:28 s
-rw-r--r-- 1 matmoore matmoore 400016 Apr 19 10:28 v
drwxr-xr-x 1 matmoore matmoore 4096 Apr 19 10:28 .
我还想问这个专栏是否应该是一个符号。如果 62k 是仅创建一个日期的 sym 文件的大小,那么您应该小心您最终会创建一个臃肿的 sym 文件。如果您有 2017.10.30 的完整历史记录并且 sym 文件仍然是 62k,那没关系,但如果您每天添加那么多新符号,sym 文件将很快失控。
关于kdb - 我在分区表中的符号列文件大小异常大——为什么会这样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71905663/
当我们使用 -s 时,主线程将一些工作委托(delegate)给从线程。 我在带有 3 个从属线程的 session 上运行以下代码:q -s 3 select from t where date w
我有一个像这样构建的表: tab: ([]col1:();col2:()) `tab insert (`testsym; "testchararr") 我现在想选择 col2 所在的行具有值 "tes
我有一个包含许多列的表(“ibmqt”),我想添加一个新列,其中包含 bool 值,指示每一行的一列(“bid”)是否大于或等于另一列列(“询问”)。 到目前为止,我最成功的尝试是: ibmqt: u
我想改造以下两行表格生成的: tb: ([] time: 2010.01.01 2010.01.01; side:`Buy`Sell; price:100 101; size:30 50) time
kdb有垂直输出吗?在 ClickHouse 中我可以指定 FORMAT VERTICAL SELECT * FROM foo FORMAT VERTICAL; Row 1: ────── date:
我将销售数据存储在数据库中。 sales_date 字段包含销售发生的日期。我想提取按月分组的数据,以便获得一月、二月等的汇总数据。有没有一种方法可以做到这一点,而不必提取整个数据然后手动执行? 最佳
kdb有垂直输出吗?在 ClickHouse 中我可以指定 FORMAT VERTICAL SELECT * FROM foo FORMAT VERTICAL; Row 1: ────── date:
我将销售数据存储在数据库中。 sales_date 字段包含销售发生的日期。我想提取按月分组的数据,以便获得一月、二月等的汇总数据。有没有一种方法可以做到这一点,而不必提取整个数据然后手动执行? 最佳
我曾多次听到人们谈论 KDB 几乎可以在短时间内处理数百万行数据。为什么这么快?这仅仅是因为数据都组织在内存中吗? 另一件事是有替代方案吗?有大型数据库供应商提供内存数据库吗? 最佳答案 快速 Goo
如何从 kdb 中每行有多个条目的其他 2 列计算一列加权平均值? 例如,给定下表: T:([]sym:`a`b`c;size:(2 8;5 2 10;3 7);price:(1 2;1 1 10;2
我有一个功能 quotes[ticker;startDate;endDate] ,以及一个函数 indexConstituents[index;startDate;endDate]产生以下内容: da
kdb 凡人/众神!! 我有一个日期时间字符串数组,但格式不同 > leads[`firstConversion] "Wed May 20 2020 08:56:54 GMT-0700 (PDT)"
我是 KDB/Q 的新手,对获取两行(不一定相邻)之间的差异有疑问。 我只有一张表,如下所示: q)tickers:`ibm`bac`dis`gs`ibm`gs`dis`bac q)pxs:100 5
q)t:flip `name`iq!(`Dent``Prefect;98 32 34) q)t name iq ---------- Dent 98 32 Prefect
假设我只想插入第一列和其他列为空。最快的方法是什么?并且可能有不同的类型。 假设有 10 列。这是我能想到的: `tab insert (`abcd;`;"";`;"";"";`;`;`;`;`;`)
我试图理解这一点: 100+\ 1 2 3 101 103 106 效果很好。 问题 1: 当我将它括在方括号中时,我得到了一个我没有预料到的错误: (100+\) 1 2 3 'Cannot wri
我在选择以下时间跨度时遇到问题: t:([] date:2#.z.d ; time: 10D21:28:47.425287000 10D12:18:23.287989000 ) date
有什么方法可以输入两个日期,然后会创建一个包括他们自己在内的日期列表? 例如。我要 2017.01.01 2017.01.02 .... 2017.01.10 我现在做的是 2017.01.01 +
我通过 .Q.dpft[] 将一张张开的表格写入磁盘。使用 \l 系统命令加载此表后,我可以从该表中 select,例如,select column_name from splayed_table w
我想在 kdb 表中添加一个新列,它应该基于现有列通过填充非空值来添加,如下所示 q)t:([]a:`a`b`c`d`e`f`g`h;b:1 0n 3 4 0n 6 0n 8;c:0n 2 0n 0n
我是一名优秀的程序员,十分优秀!