Commit 7f37faa
authored
perf(cubesql): Fast path for timespamp parsing for cube results (cube-js#10826)
parse_date_str` previously walked a 7-format `chrono::NaiveDateTime::parse_from_str`
cascade. Cube's canonical wire shape is `%Y-%m-%dT%H:%M:%S%.3f` —
`YYYY-MM-DDTHH:MM:SS.fff`, exactly 23 bytes — and was the 5th attempt in
that cascade, so most rows reparsed the prefix 4 times before matching.
Benchmark on Apple M3 Max (`cargo bench --bench transform_response`,
10k rows, master vs. this commit):
| Shape (10k rows) | Before | After | Δ |
| ------------------------- | --------- | --------- | ------ |
| row / cols=8 / td=1 | 22.48 ms | 15.84 ms | -29.5% |
| columnar / cols=8 / td=1 | 7.76 ms | 3.08 ms | -60.3% |
| row / cols=16 / td=2 | ~43 ms | 36.19 ms | -15.8% |
| columnar / cols=16 / td=2 | ~16 ms | 6.11 ms | -61.8% |
| columnar / cols=16 / td=0 | unchanged | unchanged | noise |1 parent 3226a63 commit 7f37faa
2 files changed
Lines changed: 201 additions & 51 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
5 | | - | |
6 | | - | |
7 | | - | |
8 | | - | |
9 | | - | |
10 | | - | |
11 | | - | |
12 | | - | |
13 | | - | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
14 | 8 | | |
15 | | - | |
| 9 | + | |
16 | 10 | | |
17 | 11 | | |
18 | 12 | | |
19 | 13 | | |
20 | 14 | | |
21 | 15 | | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1086 | 1086 | | |
1087 | 1087 | | |
1088 | 1088 | | |
1089 | | - | |
1090 | | - | |
1091 | | - | |
| 1089 | + | |
1092 | 1090 | | |
1093 | 1091 | | |
1094 | 1092 | | |
1095 | 1093 | | |
1096 | | - | |
| 1094 | + | |
1097 | 1095 | | |
1098 | 1096 | | |
1099 | 1097 | | |
| |||
1114 | 1112 | | |
1115 | 1113 | | |
1116 | 1114 | | |
1117 | | - | |
1118 | | - | |
1119 | | - | |
1120 | | - | |
1121 | | - | |
1122 | | - | |
| 1115 | + | |
1123 | 1116 | | |
1124 | 1117 | | |
1125 | 1118 | | |
| |||
1136 | 1129 | | |
1137 | 1130 | | |
1138 | 1131 | | |
1139 | | - | |
1140 | | - | |
1141 | | - | |
1142 | | - | |
1143 | | - | |
1144 | | - | |
1145 | | - | |
1146 | | - | |
1147 | | - | |
1148 | | - | |
1149 | | - | |
1150 | | - | |
| 1132 | + | |
| 1133 | + | |
1151 | 1134 | | |
1152 | | - | |
| 1135 | + | |
| 1136 | + | |
1153 | 1137 | | |
1154 | 1138 | | |
1155 | 1139 | | |
1156 | 1140 | | |
1157 | 1141 | | |
1158 | | - | |
| 1142 | + | |
1159 | 1143 | | |
1160 | | - | |
1161 | 1144 | | |
1162 | 1145 | | |
1163 | 1146 | | |
| |||
1375 | 1358 | | |
1376 | 1359 | | |
1377 | 1360 | | |
1378 | | - | |
| 1361 | + | |
| 1362 | + | |
| 1363 | + | |
1379 | 1364 | | |
1380 | 1365 | | |
1381 | 1366 | | |
| |||
1441 | 1426 | | |
1442 | 1427 | | |
1443 | 1428 | | |
1444 | | - | |
1445 | | - | |
1446 | | - | |
1447 | | - | |
1448 | | - | |
| 1429 | + | |
| 1430 | + | |
| 1431 | + | |
| 1432 | + | |
| 1433 | + | |
1449 | 1434 | | |
1450 | 1435 | | |
1451 | 1436 | | |
| |||
1498 | 1483 | | |
1499 | 1484 | | |
1500 | 1485 | | |
1501 | | - | |
| 1486 | + | |
1502 | 1487 | | |
1503 | 1488 | | |
1504 | 1489 | | |
| |||
1510 | 1495 | | |
1511 | 1496 | | |
1512 | 1497 | | |
1513 | | - | |
| 1498 | + | |
1514 | 1499 | | |
1515 | 1500 | | |
1516 | 1501 | | |
| |||
1521 | 1506 | | |
1522 | 1507 | | |
1523 | 1508 | | |
| 1509 | + | |
| 1510 | + | |
| 1511 | + | |
| 1512 | + | |
| 1513 | + | |
1524 | 1514 | | |
1525 | 1515 | | |
1526 | 1516 | | |
| |||
1543 | 1533 | | |
1544 | 1534 | | |
1545 | 1535 | | |
| 1536 | + | |
1546 | 1537 | | |
1547 | 1538 | | |
1548 | 1539 | | |
| |||
1565 | 1556 | | |
1566 | 1557 | | |
1567 | 1558 | | |
1568 | | - | |
1569 | | - | |
1570 | | - | |
| 1559 | + | |
1571 | 1560 | | |
1572 | 1561 | | |
1573 | 1562 | | |
| |||
1576 | 1565 | | |
1577 | 1566 | | |
1578 | 1567 | | |
1579 | | - | |
1580 | | - | |
| 1568 | + | |
| 1569 | + | |
1581 | 1570 | | |
1582 | 1571 | | |
1583 | 1572 | | |
| |||
1627 | 1616 | | |
1628 | 1617 | | |
1629 | 1618 | | |
| 1619 | + | |
| 1620 | + | |
| 1621 | + | |
| 1622 | + | |
| 1623 | + | |
| 1624 | + | |
| 1625 | + | |
1630 | 1626 | | |
1631 | | - | |
1632 | | - | |
1633 | | - | |
| 1627 | + | |
| 1628 | + | |
| 1629 | + | |
| 1630 | + | |
1634 | 1631 | | |
1635 | 1632 | | |
0 commit comments