Bejelentések

A HotKV bemutatása

Miért építettem a HotKV-t, a nulláról modern C++-ban írt, többszálú, Redis-kompatibilis adattárolót, mit tud ma, és hogyan teljesített a benchmarkunkon.

A HotKV bemutatása: a kulcs-érték tároló, amely forrón fut.

A HotKV egy többszálú, Redis-kompatibilis adattároló, amelyet a nulláról írtam modern C++-ban, azzal a céllal, hogy a modern, sokmagos szerverekből a lehető legtöbb sebességet hozza ki a lehető legalacsonyabb költségen. Boros E. Norbert vagyok, a HotKV Ltd alapítója és vezérigazgatója. Ez a bejegyzés elmagyarázza, miért építettem, mit tud ma, és hogyan mértünk vele.

Röviden. A HotKV a parancsokat egyetlen folyamaton belül, egyszerre sok szálon hajtja végre, és beszéli a RESP2-t és a RESP3-at, a Redis protokollját. A 2026. októberi, 160 vCPU-n futó egypéldányos benchmarkunkban a mért 12 parancsból 11-nél ez érte el a legmagasabb áteresztőképességet, a tizenkettediknél pedig a Dragonfly volt vele egyenlő. A felállás és a korlátai lent vannak leírva.

Miért építettem a HotKV-t

Mindenben, amit építek, fontos a sebesség. Egy weboldalnak, egy eszköznek vagy egy szervernek azonnal válaszolnia kell, és ha nem teszi, tudni akarom, miért. Ez a szokás azóta formálja a munkámat, hogy szoftvert írok.

A C és a C++ évek óta a fő nyelveim. Közel tíz évig dolgoztam játékokhoz készült csalásvédelmi szoftveren, amely játékosok ezreinek számítógépén futott. A memóriát kellett csalóprogramok után kutatnia, miközben a lehető legkevesebb CPU-t és memóriát használta, mert minden ciklus, amelyet elhasznált, a játéktól vett el. Ez a munka megtanított mindent megmérni, a hardver köré tervezni, és az alacsony erőforrás-használatot önálló funkciónak tekinteni.

Emellett a Redist és a Valkey-t sok olyan projektben használtam, amelyhez gyors gyorsítótár kellett: munkamenet-tárolókban, tűzfal által blokkolt IP-címek listáiban, és több száz millió SQL Server-rekord előtti gyorsítótárban. Kiváló eszközök. Ugyanakkor kíváncsivá is tettek, mire lenne képes egy kulcs-érték tároló, ha kezdettől fogva a ma üzemeltetett sokmagos szerverekre tervezték volna.

A HotKV a válasz, amelyre jutottam. A nulláról írtam modern C++-ban, hogy a hardverből a lehető legtöbb sebességet hozzam ki, a lehető legalacsonyabb költségen. Az alábbi benchmark megmutatja, hol tart ma, és arra számítok, hogy van még hová javulni.

Az AI költsége

Volt egy második ok is. Az AI-alkalmazások üzemeltetése drágává vált, nekem is, és abból ítélve, amit a fejlesztők online megosztottak, sokaknak másoknak is. Ennek a költségnek nagy része gyakran onnan ered, hogy olyan kérdéseket küldünk egy modellnek, amelyekre az már válaszolt. Egy gyors tároló, amely felismeri az ismétlődő vagy hasonló kérdést, és a gyorsítótárból válaszol rá, az egyik legközvetlenebb módja ennek a számlának a csökkentésére, ezért az AI-munkaterhelések gyorsítótárazása a HotKV központi része.

Mire való a HotKV

A HotKV Ltd azért létezik, hogy ezt a fajta szoftvert teljesítményesebbé és megfizethetőbbé tegye. A modern szervereknek sok magjuk van, és egy adattárolónak ki kell használnia őket, hogy a lehető legtöbb sebességet kapja a lehető legalacsonyabb költségen.

A második gondolat az, hogy a stack több részét egy helyen tartsuk. Az LLM-ekre építő csapatok gyakran végül gyorsítótárat, vektoradatbázist és az ügynökmemória számára egy helyet üzemeltetnek, rengeteg ragasztókóddal közöttük. Azt szeretném, ha a gyorsítótárazás és a körülötte lévő AI-munka egyetlen motorban élne, közvetlenül az adatai mellett: a modellhívások pontos és szemantikus gyorsítótárazása, vektorkeresés, ügynökmemória és tokenkeretek. Kevesebb üzemeltetendő rendszer kevesebb mozgó alkatrészt és alacsonyabb számlát jelentsen. Az AI oldal felsorolja, mi érhető el ma, a tokenmegtakarítási benchmark pedig megmutatja, mennyit takarított meg a modellhívások gyorsítótárazása a tesztünkben.

A HotKV megtartja a Redis protokollt és az ismert klienskönyvtárakat.

A probléma

Egyetlen parancsvégrehajtó szál szűk keresztmetszetté válhat egy sokmagos gépen. Az egyetlen végrehajtó szál köré épített adattároló általában úgy éri el a gép többi részét, hogy több példányt vagy egy klasztert üzemeltetnek, és ez telepítési döntésekkel és üzemeltetési munkával jár. Azt akartam, hogy a HotKV a másik végéről induljon, a parancsok egy példányon belül egyidejűleg fussanak, így egyetlen folyamat az egész gépet kihasználhatja.

Miben más a HotKV

A HotKV™ C++20-ban íródott, és arra tervezték, hogy a parancsokat egyszerre sok magon hajtsa végre, így egyetlen példány egy egész gépet ki tud használni. A Dragonfly, amelyet lent benchmarkolunk, szintén többszálú megközelítést alkalmaz.

  • Sok mag, egy példány. A parancsok egyidejűleg futnak a gép magjain, így egyetlen példány egy nagy szervert tud kihasználni több kisebb helyett.
  • Ismert kliensek és protokoll. A HotKV támogatja a RESP2-t és a RESP3-at, így az ismert klienskönyvtárak csatlakozhatnak hozzá. A tranzakciók (MULTI/EXEC) és a Lua-szkriptelés támogatottak. A támogatott parancsokat és az esetleges eltéréseket lásd a parancsdokumentációban.

Hogyan épül és hogyan tesztelik

A HotKV-t magam építem, és AI-segítséget használok, ahol az hasznos. Fontosabb annál, hogyan készült egy sor, hogy kiállja-e a próbát, ezért a motort keményen tesztelik. Több mint 2000 automatizált tesztje van, és AddressSanitizerrel, ThreadSanitizerrel és UndefinedBehaviorSanitizerrel is lefordítják. Emellett fuzz-célpontjai vannak a protokollelemzőre, a parancselosztásra, az RDB és az AOF betöltésére, a replikációs folyamra és a klaszterbuszra.

A benchmark felállása, korlátai és a teljes eredmények a Teljesítmény oldalon találhatók, hogy a számokat Ön is megítélhesse.

Benchmark-pillanatkép

Frissítve 2026 októberében: a bejegyzésben eredetileg közzétett számok olyan benchmarkfuttatásokból származtak, amelyekről később kiderült, hogy hibásak (többek között minden terhelésgenerátor ugyanazt a véletlenszám-magot használta), ezért az újjáépített benchmarkunk eredményeire cseréltük őket.

2026. október: HotKV, Redis, Valkey és Dragonfly

Ezt a benchmarkot a HotKV Ltd futtatta. A forrásból épített HotKV-t mértük a Redis 8.10.2, a Valkey 9.1.2 és a Dragonfly 2.0.2 ellen. Minden szerver egyedül futott, egyetlen példányként egy Azure D160alds_v7 (AMD EPYC 9V45) mind a 160 vCPU-ján, kikapcsolt perzisztenciával. Három külön, 64 vCPU-s gép generálta a terhelést a memtier_benchmark-kal: 256 bájtos értékekkel, 30-as pipeline-mélységgel és 5 000 000 előre feltöltött kulccsal. Minden érték három, egyenként 10 másodperces futtatás mediánja.

A HotKV-nak volt a legmagasabb áteresztőképessége a 12 parancs közül 11-nél. A Redishez vagy a Valkey-hez képest azok áteresztőképességének 8,6-szerese és legalább 69,7-szerese között mért, a parancstól és a szervertől függően, a Dragonflyhoz képest e 11 parancson 1,97-szerese és 4,41-szerese között, ezek közül több alsó határ. A PING-en a Dragonfly 0,6 százalékkal volt előrébb. Ezt döntetlennek tekintjük, mert a terhelésgenerátorok közel jártak a saját korlátjukhoz. Egy adatparancson a legmagasabb érték másodpercenként 90,8 millió INCR-művelet volt. Az INCR és a PING kevés adatot mozgat, és a terhelésgenerátorok korlátozzák őket, így a HotKV saját értéke ezeknél magasabb lehet.

ParancsHotKV (millió művelet/mp)HotKV vs. RedisHotKV vs. ValkeyHotKV vs. Dragonfly
SET50,5≥ 14,80x≥ 17,51x≥ 3,36x
GET36,6≥ 32,34x≥ 22,46x≥ 2,73x
MGET4,616,61x8,60x1,97x
SETNX55,3≥ 39,58x≥ 29,73x≥ 3,83x
APPEND25,116,37x19,41x2,83x
INCR90,843,15x47,33x4,41x
LPUSH31,625,34x37,55x2,99x
RPUSH43,8≥ 69,67x≥ 49,83x≥ 3,97x
SADD50,6≥ 24,65x≥ 56,60x≥ 4,20x
HSET29,0≥ 54,05x≥ 37,09x≥ 2,96x
MSET11,3≥ 29,78x≥ 24,26x≥ 3,83x
PING125,2≥ 38,70x≥ 35,98x0,99x (döntetlen)

A táblázat olvasása

Az MGET parancsonként nyolc kulcsot olvas, az MSET pedig négy kulcs-érték párt ír, az áteresztőképesség pedig parancsokat számol. A jelentés hét HotKV-értéket jelöl meg (a GET-et és hat író parancsot), mert elérték a 85%-os hálózathasználati küszöbét, a PING-et pedig azért, mert a terhelésgenerátorok CPU-használata 85% fölött volt. Az ezekre épülő arányok alsó határok, ≥ jellel jelölve. A GET és a PING valódi korlátok. A hat író parancsnál a jelentés hálózathasználati értéke a bejövő és a kimenő forgalmat összeadja, és a kimenő korláthoz hasonlítja, így eltúlozza, mennyire jártak egy korlát közelében. A legnehezebb, a SETNX, a mért bejövő plafon legfeljebb nagyjából 80%-át használta. A ≥ jelet náluk konzervatív konvencióként megtartjuk. A teljes táblázatok, jelölések és módszertani megjegyzések a Teljesítmény oldalon találhatók.

A benchmark hatóköre

  • Build és hangolás. A HotKV-t a tesztelt CPU-ra -march=native kapcsolóval fordították, a többi szerver pedig az alapértelmezett kiadási buildje volt.
  • Szálbeállítások. Minden szerver megkapta a gép összes magját: HotKV --threads 160, Dragonfly 160 proactor-szál, Valkey io-threads 160 és Redis io-threads 128, a maximuma. A Redis és a Valkey a parancsokat egy szálon futtatja, és kevesebb I/O-szállal magasabb áteresztőképességet érhet el, így az értékeik a legjobbjuk alatt lehetnek. Klasztereket vagy több példányt belőlük nem futtattunk.
  • Hatókör. Tizenkét parancs, egy értékméret, egy pipeline-mélység, nincs TLS és nincs perzisztencia. A LPOP és az RPOP nem lett mérve, mert ilyen sebességnél egy romboló olvasás 10 másodpercen belül kiüríti bármely, a memóriába férő listát. A jelentés rögzíti a késleltetést és a memóriahasználatot, de ezeket itt nem hasonlítjuk össze. A szerverek nagyon eltérő mennyiségű munkát végeztek az egyes 10 másodperces futtatásokban, így a memóriaértékek nem összehasonlíthatók. Vegyes munkaterheléseket nem mértünk.
  • Szórás. A Redis több parancsnál nagyon ingadozott a három futtatása között, a HSET-nél a leggyorsabb és a leglassabb futtatás között akár 7,2-szeresen, és a medián ezt elrejti. Ha az egyes versenytársak mediánja helyett a leggyorsabb futtatásukhoz hasonlítunk, a HotKV mind a 11 parancson továbbra is vezetett.

A Redis, a Valkey és a Dragonfly a megfelelő tulajdonosaik védjegyei. Csak a mért szoftver azonosítására említjük őket, és ez nem jelent támogatást, jóváhagyást vagy kapcsolatot.

Mit tartalmaz ma

Az alap parancscsaládok közé tartoznak a sztringek, listák, halmazok, hash-ek, rendezett halmazok, streamek, térinformatikai indexek, bittérképek, a HyperLogLog, a pub/sub és a Lua-szkriptelés. Az AI-modulok és az enterprise funkciók licencelt csomagokon futnak. Az Árak oldal felsorolja, mit tartalmaz az egyes csomag. Az aktuális parancslefedettséget lásd a dokumentációban. A Redis parancskészletén túl:

  • Kulcscímkézés: a kulcsok tetszőleges címkékkel láthatók el, és címke szerint lekérdezhetők (TAG.SET, TAG.MEMBERS és további öt parancs).
  • Nanoszekundumos TTL: a NEXPIRE, az NTTL és a NEXPIREAT nanoszekundumban állítja be és olvassa a lejáratot, így a határidők finomabbak lehetnek egy ezredmásodpercnél. A lejárt kulcsokat háttérbeli söprés és elérésük pillanata szabadítja fel.
  • Opcionális értéktömörítés: egy méretküszöb feletti értékekhez (alapértelmezés szerint 512 bájt), kikapcsolva, amíg be nem kapcsolja.
  • Pillanatképek fork nélkül: a BGSAVE háttérszálon ír elágaztatott folyamat helyett. A pillanatkép nem időponthoz kötött másolat. Minden kulcs olyan állapotban kerül mentésre, amilyenben a pillanatkép elérte. A hozzáfűzéses fájl átírása viszont forkol.
  • Prometheus-metrikák: beépített HTTP-végpont, alapból kikapcsolva, a metrics-port megadásával engedélyezhető, így nincs szükség külső exporterre.

A HotKV beépített vektorkeresést is tartalmaz HNSW-indexekkel (VSIM.CREATEINDEX, VSIM.SET, VSIM.SEARCH). A Redis 8 ellen mértük a Vektorkeresés: HotKV vs. Redis 8 vektorhalmazok, 1-től 100 kliensig cikkben.

Kezdje a HotKV Cloudon, vagy beszéljen az értékesítéssel arról, hogyan futtathatja a HotKV-t a saját szerverein.

Hasznosnak találta?

Cikk megosztása

Folytassa a beszélgetést

Hozzászólások

Kérdése van a módszerről? Más eredményt kapott a saját hardverén? Ossza meg, mit talált. A hozzászólások megjelenés előtt ellenőrzésen esnek át.

Hozzászólás írása

A megjelenítendő neve és a hozzászólása jóváhagyás után nyilvánossá válik. Az e-mail-címét kizárólag a fenti értesítésekhez használjuk, és soha nem jelenik meg. A Cloudflare Turnstile az írás megkezdése után ellenőrzi a spamet. Adatvédelmi részletek.