# Why kdb does not support sorting dynamically(like java TreeMap, sql

**URL:** <https://forum.kx.com/t/why-kdb-does-not-support-sorting-dynamically-like-java-treemap-sql/12033>\
**Category:** Community Support\
**Tags:** kdb-and-q\
**Created:** [July 10, 2020, 3:17pm UTC](https://forum.kx.com/t/why-kdb-does-not-support-sorting-dynamically-like-java-treemap-sql/12033 "2020-07-10T15:17:00Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![NDTM\_idea](https://avatars.discourse-cdn.com/v4/letter/n/ee7513/32.png) [@NDTM\_idea](https://forum.kx.com/u/NDTM_idea)\
**Post date:** [July 10, 2020, 3:17pm UTC](https://forum.kx.com/t/why-kdb-does-not-support-sorting-dynamically-like-java-treemap-sql/12033/1 "2020-07-10T15:17:00Z")

</div>

I want to use kdb to maintain my order book, I need to keep this order book always sorted.&nbsp;

At this now, I always resort (`xasc,xdesc`)&nbsp; my table after I change my table(insert/update/delete),

but I found this way is very slow when my data group to 10k rows.

---

<div class="post-metadata">

**Author:** ![dotsch1](https://avatars.discourse-cdn.com/v4/letter/d/a4c791/32.png) [@dotsch1](https://forum.kx.com/u/dotsch1)\
**Post date:** [July 17, 2020, 12:20pm UTC](https://forum.kx.com/t/why-kdb-does-not-support-sorting-dynamically-like-java-treemap-sql/12033/2 "2020-07-17T12:20:00Z")

</div>

Maybe this can help: You can have a raw table and a sorted view on it. The view will sort it on demand iff the raw table changes.&nbsp;

András

---

<div class="post-metadata">

**Author:** ![sandy\_bradley](https://avatars.discourse-cdn.com/v4/letter/s/ec9cab/32.png) [@sandy\_bradley](https://forum.kx.com/u/sandy_bradley)\
**Post date:** [July 17, 2020, 12:58pm UTC](https://forum.kx.com/t/why-kdb-does-not-support-sorting-dynamically-like-java-treemap-sql/12033/3 "2020-07-17T12:58:00Z")

</div>

Maybe you can save a local state for the current updates so that you don’t have to sort a table with other data.

msg.l2update:{

&nbsp;&nbsp;/\*&nbsp;handle&nbsp;level2&nbsp;update&nbsp;messages&nbsp;\*/

&nbsp;&nbsp;x:“SSZ\*”$x;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//cast&nbsp;dictionary&nbsp;to&nbsp;relevant&nbsp;types

&nbsp;&nbsp;s:.Q.id&nbsp;x`product\_id;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//extract&nbsp;sym,&nbsp;remove&nbsp;bad&nbsp;chars

&nbsp;&nbsp;c:“SFF”$/:x`changes;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//extract&nbsp;and&nbsp;cast&nbsp;changes

&nbsp;&nbsp;{.[`.gdax.askst`.gdax.bidst&nbsp;y[0]=`buy;(x;y&nbsp;1);:;y&nbsp;2]}[s]'[c];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//update&nbsp;state&nbsp;dict(s)

&nbsp;&nbsp;sort.state[s];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//sort&nbsp;state&nbsp;dicts

&nbsp;&nbsp;rec.book[x`time;s];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//record&nbsp;current&nbsp;state&nbsp;of&nbsp;book

&nbsp;}

sort.state:{[s]

&nbsp;&nbsp;/\*&nbsp;sort&nbsp;state&nbsp;dictionaries&nbsp;&&nbsp;drop&nbsp;empty&nbsp;levels&nbsp;\*/

&nbsp;&nbsp;@[;s;{(where&nbsp;0=x)\_x}]'[`.gdax.bidst`.gdax.askst];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//drop&nbsp;all&nbsp;zeros

&nbsp;&nbsp;@[`.gdax.askst;s;{stdepth&nbsp;sublist&nbsp;asc[key&nbsp;x]#x}];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//sort&nbsp;asks&nbsp;ascending

&nbsp;&nbsp;@[`.gdax.bidst;s;{stdepth&nbsp;sublist&nbsp;desc[key&nbsp;x]#x}];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//sort&nbsp;bids&nbsp;descending

&nbsp;}

depth:5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//depth&nbsp;to&nbsp;maintain&nbsp;in&nbsp;book&nbsp;table

stdepth:100\*depth&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//depth&nbsp;to&nbsp;maintain&nbsp;in&nbsp;state&nbsp;dicts

exchange:&nbsp;“Gdax”

bidst:(`u#enlist`)!enlist(`float$())!`float$()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//bid&nbsp;state&nbsp;dict

askst:(`u#enlist`)!enlist(`float$())!`float$()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//ask&nbsp;state&nbsp;dict

lb:(`u#enlist`)!enlist(`bids`bsizes`asks`asizes!())&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//last&nbsp;book&nbsp;state

/\*&nbsp;Redefine&nbsp;publish&nbsp;function&nbsp;to&nbsp;pass&nbsp;to&nbsp;TP&nbsp;for&nbsp;real&nbsp;FH&nbsp;\*/

publish:upsert&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//define&nbsp;publish&nbsp;function&nbsp;to&nbsp;upsert&nbsp;for&nbsp;example&nbsp;FH

rec.book:{[t;s]

&nbsp;&nbsp;/\*&nbsp;determine&nbsp;if&nbsp;book&nbsp;record&nbsp;needs&nbsp;published&nbsp;&&nbsp;publish&nbsp;if&nbsp;so&nbsp;\*/

&nbsp;&nbsp;bk:&nbsp;`bids`bsizes!depth&nbsp;sublist’(key;value)@:bidst[s];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//get&nbsp;current&nbsp;bid&nbsp;book&nbsp;up&nbsp;to&nbsp;depth

&nbsp;&nbsp;bk,:`asks`asizes!depth&nbsp;sublist’(key;value)@:askst[s];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//get&nbsp;current&nbsp;ask&nbsp;book&nbsp;up&nbsp;to&nbsp;depth

&nbsp;&nbsp;if[not&nbsp;bk~lb[s];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//compare&nbsp;to&nbsp;last&nbsp;book

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;publish[`book;@[bk;`ex`sym`time;:;(`Gdax;s;“p”$t)]];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//publish&nbsp;record&nbsp;if&nbsp;changed

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lb[s]:bk;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//record&nbsp;state&nbsp;of&nbsp;last&nbsp;book

&nbsp;&nbsp;&nbsp;];

&nbsp;}

---

<div class="post-metadata">

**Author:** ![carfield1](https://avatars.discourse-cdn.com/v4/letter/c/ba8739/32.png) [@carfield1](https://forum.kx.com/u/carfield1)\
**Post date:** [July 17, 2020, 3:08pm UTC](https://forum.kx.com/t/why-kdb-does-not-support-sorting-dynamically-like-java-treemap-sql/12033/4 "2020-07-17T15:08:00Z")

</div>

Probably because it is time-series DB?

---

<div class="post-metadata">

**Author:** ![sturm](https://avatars.discourse-cdn.com/v4/letter/s/a183cd/32.png) [@sturm](https://forum.kx.com/u/sturm)\
**Post date:** [July 18, 2020, 4:45am UTC](https://forum.kx.com/t/why-kdb-does-not-support-sorting-dynamically-like-java-treemap-sql/12033/5 "2020-07-18T04:45:00Z")

</div>

On Fri, Jul 17, 2020 at 10:08 AM Carfield Yim wrote:\>\> Probably because it is time-series DB?I think the question is, “Why doesn’t Q support mutable trees, so wecan have things like always sorted dictionaries, etc?”
