mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2026-01-08 06:12:55 +00:00
* feat/change-tsid-gen: perf(metric-engine): replace mur3 with fxhash for faster TSID generation - Switches from mur3::Hasher128 to fxhash::FxHasher for TSID hashing - Pre-computes label-name hash when no nulls are present, avoiding redundant work - Adds fast-path for rows without nulls; falls back to slow path otherwise - Updates Cargo.toml and lockfile to reflect dependency change Signed-off-by: Lei, HUANG <mrsatangel@gmail.com> * feat/change-tsid-gen: fix: only check primary-key labels for null when re-using cached hash - Rename has_null() → has_null_labels() and restrict the check to the primary-key columns so that non-label NULLs do not force a full TSID re-computation. - Update expected hashes in tests to match the new logic. Signed-off-by: Lei, HUANG <mrsatangel@gmail.com> * feat/change-tsid-gen: test: add comprehensive TSID generation tests for label ordering and null handling Signed-off-by: Lei, HUANG <mrsatangel@gmail.com> * feat/change-tsid-gen: bench: add criterion benchmark for TSID generator - Compare original mur3 vs current fxhash fast/slow paths - Test 2, 5, 10 label sets plus null-value slow path - Add mur3 & criterion dev-deps; register bench target Signed-off-by: Lei, HUANG <mrsatangel@gmail.com> * feat/change-tsid-gen: test: stabilize metric-engine tests by fixing non-deterministic row order - Add ORDER BY to SELECTs in TTL tests to ensure consistent output - Update expected __tsid values after hash function change - Swap expected OTLP metric rows to match new ordering Signed-off-by: Lei, HUANG <mrsatangel@gmail.com> * feat/change-tsid-gen: refactor: simplify Default impls and remove redundant code - Replace manual Default for TsidGenerator with derive - Remove unnecessary into_iter() call - Simplify Option::unwrap_or_else to unwrap_or Signed-off-by: Lei, HUANG <mrsatangel@gmail.com> --------- Signed-off-by: Lei, HUANG <mrsatangel@gmail.com>
41 lines
1.0 KiB
SQL
41 lines
1.0 KiB
SQL
CREATE TABLE phy (ts timestamp time index, val double) engine=metric with ("physical_metric_table" = "", ttl = '1 second');
|
|
|
|
CREATE TABLE test_ttl (ts timestamp time index, val double, host string primary key) engine = metric with ("on_physical_table" = "phy");
|
|
|
|
INSERT INTO test_ttl(ts, val, host) VALUES
|
|
(now(), 1, 'host1'),
|
|
(now(), 2, 'host2'),
|
|
(now(), 3, 'host3');
|
|
|
|
SELECT val, host FROM test_ttl ORDER BY host;
|
|
|
|
-- SQLNESS SLEEP 2s
|
|
ADMIN flush_table('phy');
|
|
|
|
ADMIN compact_table('phy');
|
|
|
|
--- should be expired --
|
|
SELECT val, host FROM test_ttl;
|
|
|
|
ALTER TABLE phy SET ttl = '1 day';
|
|
|
|
INSERT INTO test_ttl(ts, val, host) VALUES
|
|
(now(), 1, 'host1'),
|
|
(now(), 2, 'host2'),
|
|
(now(), 3, 'host3');
|
|
|
|
ADMIN flush_table('phy');
|
|
|
|
ADMIN compact_table('phy');
|
|
|
|
--- should not be expired --
|
|
SELECT val, host FROM test_ttl ORDER BY host;
|
|
|
|
-- restart the db, ensure everything is ok
|
|
-- SQLNESS ARG restart=true
|
|
SELECT val, host FROM test_ttl ORDER BY host;
|
|
|
|
DROP TABLE test_ttl;
|
|
|
|
DROP TABLE phy;
|