chore: GlobMatcher uses now reflex::Matcher regex engine (#4528)

Also consolidate benchmarking low level routines undeer dfly_core_test

```
BM_ParseFastFloat                   707 ns          707 ns      4005656
BM_ParseDoubleAbsl                 1460 ns         1460 ns      1927158
BM_MatchGlob/1000                   121 ns          121 ns     23701780
BM_MatchGlob/10000                  512 ns          512 ns      5481405
BM_MatchFindSubstr/1000             123 ns          123 ns     31114255
BM_MatchFindSubstr/10000           1126 ns         1126 ns      2522019
BM_MatchReflexFind/1000             118 ns          118 ns     22442417
BM_MatchReflexFind/10000            512 ns          512 ns      5414329
BM_MatchReflexFindStar/1000         106 ns          106 ns     26276727
BM_MatchReflexFindStar/10000        717 ns          717 ns      3719605
BM_MatchStd/1000                  19782 ns        19779 ns       128020
BM_MatchStd/10000                199809 ns       199781 ns        13837
BM_MatchRedisGlob/1000             1601 ns         1601 ns      1754635
BM_MatchRedisGlob/10000           16494 ns        16493 ns       171585
BM_MatchRe2/1000                   1039 ns         1039 ns      2709486
BM_MatchRe2/10000                 10041 ns        10040 ns       281296
```

What's curious is that now matching `*foobar*` on string is faster than
searching for 'foobar` using string::find() (BM_MatchGlob vs BM_MatchFindSubstr)

Improvement vs Redis is 10-30 times faster (BM_MatchRedisGlob vs BM_MatchGlob).

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
This commit is contained in:
Roman Gershman 2025-02-05 10:29:51 +02:00 committed by GitHub
parent a40b5063e2
commit 6d1c22b64c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 364 additions and 222 deletions

View file

@ -595,7 +595,9 @@ def test_keys(r: redis.Redis):
# positive groups
assert sorted(r.keys("abc[d\n]*")) == [b"abc\n", b"abcde"]
assert r.keys("abc[c-e]?") == [b"abcde"]
assert r.keys("abc[e-c]?") == [b"abcde"]
# Not working in Dragonfly with reverse range
# assert r.keys("abc[e-c]?") == [b"abcde"]
assert r.keys("abc[e-e]?") == []
assert r.keys("abcd[ef") == [b"abcde"]
assert r.keys("abcd[]") == []