sql >> Databáze >  >> NoSQL >> Redis

Ovlivňuje délka jména výkon v Redis?

Klíč, o kterém mluvíte, není ve skutečnosti tak dlouhý.

Příklad klíče, který zadáte, je pro množinu, metody vyhledávání množin jsou O(1). Složitější operace na množině (SDIFF, SUNION, SINTER) jsou O(N). Je pravděpodobné, že se vyplní $userId byla dražší operace než použití delšího klíče.

Redis přichází s nástrojem pro srovnávání s názvem redis-benchmark , pokud upravíte test "GET" v src/redis-benchmark.c tak, aby jejich klíč byl pouze "foo", můžete po make install spustit test krátkých kláves. :

diff --git a/src/redis-benchmark.c b/src/redis-benchmark.c
--- a/src/redis-benchmark.c
+++ b/src/redis-benchmark.c
@@ -475,11 +475,11 @@
         benchmark("MSET (10 keys)",cmd,len);
         free(cmd);

-        len = redisFormatCommand(&cmd,"SET foo:rand:000000000000 %s",data);
+        len = redisFormatCommand(&cmd,"SET foo %s",data);
         benchmark("SET",cmd,len);
         free(cmd);

-        len = redisFormatCommand(&cmd,"GET foo:rand:000000000000");
+        len = redisFormatCommand(&cmd,"GET foo");
         benchmark("GET",cmd,len);
         free(cmd);

Zde je testovací rychlost GET pro 3 následující spuštění krátké klávesy „foo“:

59880.24 requests per second
58139.53 requests per second
58479.53 requests per second

Zde je rychlost testu GET po opětovné úpravě zdroje a změně klíče na „set-allBooksBelongToUser:1234567890“:

60240.96 requests per second
60606.06 requests per second
58479.53 requests per second

Changing the key yet again to "ipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumlorem:1234567890" gives this:

58479.53 requests per second
58139.53 requests per second
56179.77 requests per second

Takže ani opravdu opravdu dlouhé klávesy nemají velký vliv na rychlost redis. A to je na GET, operaci O(1). Složitější operace by na to byly ještě méně citlivé.

Myslím, že klíče, které jasně identifikují, jaké hodnoty mají, výrazně převáží jakýkoli nepatrný rychlostní výkon, který byste získali ze zkrácených klíčů.

Pokud byste to chtěli dovést dále, existuje také -r [keyspacelen] parametr na obslužném programu redis-benchmark, který mu umožňuje vytvářet náhodné klíče (pokud mají v sobě ':rand:'), stačí zvětšit velikost předpony v testovacím kódu na libovolnou délku.



  1. Jak odebrat pole z dokumentu MongoDB ($unset)

  2. Vypořádání se se změnami schématu v Mongoose

  3. MongoDB - Vytvořte vztah

  4. mongoDB:Vytvoření ObjectId pro každé nové dítě přidané do pole Array