Mi piace usare nomi dettagliati in Redis, per esempio set-allBooksBelongToUser:$userId
.
Va bene o influisce sulle prestazioni?
Mi piace usare nomi dettagliati in Redis, per esempio set-allBooksBelongToUser:$userId
.
Va bene o influisce sulle prestazioni?
Risposte:
La chiave di cui stai parlando non è poi così lunga.
La chiave di esempio fornita è per un set, i metodi di ricerca set sono O (1). Le operazioni più complesse su un set (SDIFF, SUNION, SINTER) sono O (N). Le probabilità sono che popolando$userId
sia un'operazione più costosa rispetto all'utilizzo di una chiave più lunga.
Redis viene fornito con un'utilità di benchmark chiamata redis-benchmark
, se si modifica il test "GET" in src / redis-benchmark.c in modo che la loro chiave sia solo "pippo", è possibile eseguire il test della chiave breve dopo un make install
:
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);
Ecco la velocità del test GET per 3 corse successive del tasto corto "pippo":
59880.24 requests per second
58139.53 requests per second
58479.53 requests per second
Ecco la velocità del test GET dopo aver modificato nuovamente la sorgente e aver cambiato la chiave in "set-allBooksBelongToUser: 1234567890":
60240.96 requests per second
60606.06 requests per second
58479.53 requests per second
Cambiare la chiave ancora una volta a "ipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumlorem: 1234567890" conferisce a questo:
58479.53 requests per second
58139.53 requests per second
56179.77 requests per second
Quindi anche i tasti davvero molto lunghi non hanno un grande impatto sulla velocità del redis. E questo è su GET, un'operazione O (1). Operazioni più complesse sarebbero ancora meno sensibili a questo.
Penso che avere chiavi che identificano chiaramente quali valori detengono superi di gran lunga le prestazioni minime della velocità che otterresti dalle chiavi abbreviate.
Se volessi andare oltre, c'è anche un -r [keyspacelen]
parametro nell'utilità redis-benchmark che consente di creare chiavi casuali (purché abbiano ': rand:' in esse), potresti semplicemente aumentare la dimensione del prefisso nel testare il codice per la lunghezza desiderata.
A Redis piace tenere tutti i tasti in memoria. Maggiore è la lunghezza media della chiave, minore è la capacità di memorizzazione. Quindi sì, la lunghezza della chiave può influire notevolmente sulle prestazioni, ma probabilmente non significativamente per quanto ti riguarda. Cioè, con un piccolo spazio per i tasti (ad esempio uno che si adatta facilmente alla memoria), una chiave da 128 byte e una chiave da 16 byte non funzioneranno in modo drammatico in modo diverso.
Non posso rispondere a questa domanda con certezza. Tuttavia, posso fare alcune domande al riguardo e offrire alcune osservazioni.
Penso che sia ovvio che chiavi (nomi) e / o valori estremamente lunghi avrebbero un impatto sulle prestazioni complessive se fossero utilizzabili. Questi impatti potrebbero essere sul client, sulla rete o sul server. Quindi la prima domanda da trascinare fuori dalla tua sarebbe:
Quanto possono durare le chiavi e i valori tra Redis e i tuoi clienti?
La ricerca su Redis , la lunghezza e i limiti della chiave mi dà un interessante post sul blog su Redis vs. memcached che potrebbe iniziare a rispondere alla tua domanda. La prima risposta a quel post sul blog sembra essere stata scritta da Salvatore Sanfilipo, creatore di Redis (all'inizio dello scorso autunno: 09/2010), suggerendo che una versione più recente avrebbe mostrato risultati significativamente migliori. Due commenti qui sotto ci collegano al Redis di Salvatore / Memcached Benchmark che è stato pubblicato pochi giorni dopo aver risposto al "blagger" originale (che sembra essere anonimo).
Questo non risponde alle domande (quanto possono essere lunghe le chiavi e in quali punti ci sono impatti rilevabili sulle prestazioni). Tuttavia, ci dà un indizio sull'approccio alla domanda.
Gli autori di entrambi questi articoli hanno scritto il codice e lo hanno testato ... e hanno rappresentato graficamente i risultati.
Potremmo fare ogni sorta di ipotesi. Potremmo guardare il codice e provare a ragionarlo.
Tuttavia, il modo più significativo per affrontare una domanda di questo tipo è scrivere del codice per misurare un modello di utilizzo proposto ... e alcuni altri per testarne un altro (ad esempio un intervallo di lunghezze di chiave che vanno da 8 caratteri a ... come a lungo vorresti ... 8 kilobyte?) ... e misuralo.
Non credo che la lunghezza del nome della variabile influirà sulle prestazioni, la variabile avrà lo stesso posto di qualsiasi variabile prenderà per quel tipo di dati nella misura in cui non stai superando la lunghezza massima del nome.