Benchmarks were conducted to ensure performance parity with the reference system. These are the preliminary results, run on AWS EC2 instances.
The test consists of generating minute bars for open, high, low, close, volume, and vwap on a table with 10M, 50M, and 100M trades and a universe of 5,000 securities. The same queries were run on both runtimes sequentially on the same server.
/ o = open, h = high, l = low, c = close, v = volume, vwap = vol weight avg price
select o:first price, h:max price, l:min price, c:last price,
v:sum size, vwap:(sum price*size)%sum size
by ticker, bar:60000000000 xbar sip_timestamp
from trades where date=day, ticker in `AAPL`GOOG`META`MSFT`NVDA`TSLA
Results
Results show elapsed time executing the query with 1 and 4 threads on compressed and uncompressed data stored on local disk. Both runtimes executed against the same data. Latencies are in milliseconds.
- cq_1, cq_4 = elapsed times running queries with 1 and 4 threads
- ref_1, ref_4 = elapsed times on the reference system with 1 and 4 threads
- cq_mult_t1, cq_mult_t4 = ref_X / cq_X (i.e. latency multiplier; higher is faster than reference)
Uncompressed Data
/ Query A - generating minute bars for 6 tickers
instance cores mhz ram_gb query cq_1 ref_1 cq_4 ref_4 cq_mult_t1 cq_mult_t4
--------------------------------------------------------------------------------------------------
m7a.4xlarge 16 2600 61 10m-a-cold-uncomp 343.73 884.76 320.5 352.14 2.574 1.0987
m7a.4xlarge 16 2600 61 10m-a-warm-uncomp 125.12 193.3 94.272 90.216 1.5449 0.95698
m7a.4xlarge 16 2600 61 50m-a-cold-uncomp 2202.1 5367.2 2041.8 4922.3 2.4372 2.4107
m7a.4xlarge 16 2600 61 50m-a-warm-uncomp 657.13 965.9 449.88 421.52 1.4699 0.93695
m7a.4xlarge 16 2600 61 100m-a-cold-uncomp 4414.1 11474 4089.7 11049 2.5995 2.7017
m7a.4xlarge 16 2600 61 100m-a-warm-uncomp 1421.7 1907.3 921.26 798.2 1.3416 0.86641
/ Query B - generating minute bars with no ticker filter (5000 symbols)
instance cores mhz ram_gb query cq_1 ref_1 cq_4 ref_4 cq_mult_t1 cq_mult_t4
--------------------------------------------------------------------------------------------------
m7a.4xlarge 16 2600 61 10m-b-cold-uncomp 1229.3 3088.6 1204.3 2426.5 2.5124 2.0148
m7a.4xlarge 16 2600 61 10m-b-warm-uncomp 475.4 1506.6 467.96 1242.6 3.169 2.6554
m7a.4xlarge 16 2600 61 50m-b-cold-uncomp 7112 14520 6852.1 12925 2.0416 1.8863
m7a.4xlarge 16 2600 61 50m-b-warm-uncomp 1408.1 3613.2 1074.9 2250.1 2.5661 2.0933
m7a.4xlarge 16 2600 61 100m-b-cold-uncomp 14487 29990 13579 26880 2.0701 1.9795
m7a.4xlarge 16 2600 61 100m-b-warm-uncomp 2932 6584.7 2278.5 3740 2.2458 1.6414
The same queries on compressed data on local disk.
/ Query A - generating minute bars for 6 tickers
instance cores mhz ram_gb query cq_1 ref_1 cq_4 ref_4 cq_mult_t1 cq_mult_t4
------------------------------------------------------------------------------------------------
m7a.4xlarge 16 2600 61 10m-a-cold-comp 835.91 773.16 328.63 355.66 0.92493 1.0822
m7a.4xlarge 16 2600 61 10m-a-warm-comp 848.55 586.54 330.89 236.6 0.69123 0.71504
m7a.4xlarge 16 2600 61 50m-a-cold-comp 4123.1 3851.3 1495.1 1615 0.93409 1.0802
m7a.4xlarge 16 2600 61 50m-a-warm-comp 4153.3 2947.7 1580.9 1118 0.70973 0.7072
m7a.4xlarge 16 2600 61 100m-a-cold-comp 8162.2 7559.8 3607.4 3213.5 0.92619 0.89083
m7a.4xlarge 16 2600 61 100m-a-warm-comp 8258.2 5802.1 3089.4 2162.5 0.70259 0.69997
/ Query B - generating minute bars with no ticker filter (5000 symbols)
instance cores mhz ram_gb query cq_1 ref_1 cq_4 ref_4 cq_mult_t1 cq_mult_t4
------------------------------------------------------------------------------------------------
m7a.4xlarge 16 2600 61 10m-b-cold-comp 1011.5 2986 529.19 1855.9 2.9519 3.507
m7a.4xlarge 16 2600 61 10m-b-warm-comp 1032.3 2528.5 513.37 1659.1 2.4495 3.2317
m7a.4xlarge 16 2600 61 50m-b-cold-comp 4845.3 10916 2134.9 6482.3 2.253 3.0364
m7a.4xlarge 16 2600 61 50m-b-warm-comp 4850.6 8834.2 2194.4 4179 1.8212 1.9044
m7a.4xlarge 16 2600 61 100m-b-cold-comp 9707.1 20603 4287.9 13836 2.1225 3.2269
m7a.4xlarge 16 2600 61 100m-b-warm-comp 9625.4 16865 4268 7137.4 1.7522 1.6723