Fast Insert Line into Middle of An In-memory Table

Hi Community,

 

We came across one issue in development.

Say we’ve got an in-memory table “tbl”, and want to insert “data” into this table regularly, not by appending, but inserting into specific row with “index”.

 

Currently we tried to do the following:

`tbl set (index#tbl), data, index _ tbl;

 

Question is:

Is there any suggested solution with decent performance as it would run multiple times.

 

Thanks in advance.

Xiaocheng

 

Hi Xiaocheng,

A few questions to add more context here;

  • Assuming this process is an RDB, is there any particular reason you need to insert rows at a specific index?
  • What logic determines the insert index?

For most RBD applications you probably want to avoid sorting until the end of day write down to disk.

If you need to increase performance in querying your RBD process, you could perhaps look at the  grouped attribute, which will keep a hash map of the indices for the new rows.

 

q)tbl:update sym:g#sym from ([]sym:upper 3?4;price:3?10f); q)meta tbl c | t f a -----| ----- sym | s g price| f q)tbl sym price -------------- GMEH 7.125845 IKOK 1.392257 CJEK 2.701876 q)tbl:tbl upsert (`ABCD;10f); q)tbl sym price -------------- GMEH 7.125845 IKOK 1.392257 CJEK 2.701876 ABCD 10 q)meta tbl c | t f a -----| ----- sym | s g price| f

 

Resources:

Hope this helps!

Cheers,

David