其他分享
首页 > 其他分享> > CDB-简单键表性能

CDB-简单键表性能

作者:互联网

我有下表,大约3m行.我想知道我可以使用哪种方法/属性来发挥最大的性能.我只会在即时比赛中选择完全匹配的比赛.

price_hist_5min_bars:([inst:`$();time:`timestamp$()]price:`float$())

此外,如果表格仅用于报告或正在更改,该方法是否会更改?该表不会即时添加任何行,但我将拥有另一个具有相同结构的日内表,该表每1或5分钟添加一次行.所有建议表示赞赏!

解决方法:

我已经使用示例数据库进行了测试,如果使用`p#属性,我可以得到一些改进:

update `p#inst from `inst`time xasc price_hist_5min_bars

在这种情况下,由于符号是有序的而不是分散的,因此p优于g.

有关更多信息,请参见attributes上的Wiki条目.

编辑

我最近得知,如果可以重组表,则可以提高性能.使用以下示例表:

q)n:10000000
q)t:2!update `p#sym from `sym`time xasc ([]sym:n?-100?`3;time:.z.d+n?1D;price:n?1000f)

我们可以使用select设置基准:

q)\ts:1000 select from t where sym=`bak,time=2017.11.29D23:59:59.520923942
210 1180496

您可以通过将每个交易品种的所有时间和价格值分组,按时间排序来进行重组:

q)show r:select `s#time,price by sym from t
sym| time                                                                                        ..
---| --------------------------------------------------------------------------------------------..
aan| `s#2017.11.29D00:00:00.131421536 2017.11.29D00:00:00.214382261 2017.11.29D00:00:00.914720445..
...

使用此重组数据,我们可以通过以下方式返回价格:

q)r[`bak][`price] r[`bak][`time]?2017.11.29D23:59:59.520923942
948.3733
q)\ts:1000 r[`bak][`price] r[`bak][`time]?2017.11.29D23:59:59.520923942
4 1824

符号组中记录的索引由下式给出:

q)r[`bak][`time]?2017.11.29D23:59:59.520923942
100638

显然,以上示例仅返回和原子,而不返回表.如果您希望有一张桌子,可以尝试如下操作:

q)flip (),/:@[;`sym;:;`bak]flip[r`bak]r[`bak][`time]?2017.11.29D23:59:59.520923942
time                          price    sym
------------------------------------------
2017.11.29D23:59:59.520923942 948.3733 bak
q)\ts:1000 flip (),/:@[;`sym;:;`bak]flip[r`bak]r[`bak][`time]?2017.11.29D23:59:59.520923942
7 2688

但这取决于您希望输出的外观.

标签:kdb,q-lang,c
来源: https://codeday.me/bug/20191110/2014686.html