2012-06-06 8 views

risposta

3

Redis utilizza una strategia di hash per memorizzare tutte le chiavi, ogni chiave viene memorizzata utilizzando una funzione di hash. Tutte le funzionalità di Redis in db sulle chiavi ricadono in questa funzione, o qualcosa di simile.

chiave originale viene memorizzato anche di capire colisions futuri tra i tasti diferent, e sì tasti grandi potrebbe essere impatto a handle di memoria e tutti i campi correlati: la frammentazione di memoria, riscontri nella cache/miss, ecc ...

+1

Se qualcuno mi chiede di rispondere come http://stackoverflow.com/a/6373068/501254. Ma qualcuno ha fatto un test http://stackoverflow.com/a/6322977/501254 e sembra interessante. – ozz

+0

Questa risposta è fuorviante, come @ozz menzionato nel commento precedente, anche 300+ caratteri non influenzano le prestazioni. –

1

Mi vengono in mente due problemi con GUID:

Essi non sono sequenziali

io non sono sicuro di Redis, ma molti database (SQL Server, MongoDB) può indicizzare (molto) in modo più efficiente se i valori della chiave primaria sono in qualche modo sequenziali.

Forse Redis è simile?

Esistono algoritmi di generazione GUID alternativi che generano GUID sequenziali per tenere conto di questo problema, ad es.

http://www.developmentalmadness.com/archive/2010/10/13/sequential-guid-algorithm-ndash-improving-the-algorithm.aspx

o SQL Server di Sequential GUID

Sono grandi

Più lunga è la chiave, la più memoria che serve per memorizzare l'indice. Un GUID è di 128 bit. In molti (molti) database, si può anche usare una chiave a 64-bit o 32-bit. Usare un GUID in cui dovrebbe fare un intero a 32 bit significa usare 4x per la memoria degli indici. Poiché molti database hanno indici molto più grandi della memoria fisica, ciò può avere un impatto drammatico sulle prestazioni.

+0

Grazie Eric per un commento, ma redis db ha un'architettura così diversa e ho trovato una risposta un po 'più di ricerca .. Cordiali saluti – ozz

+1

Ci scusiamo per il downvote ma la sua domanda era MOLTO specifica per Redis. non ha incluso REDIS :-) – schmoopy

+0

@schmoopy: un downvote non è appropriato, non ho fornito * disinformazione *.Ho fornito informazioni accurate e ho indicato chiaramente i suoi limiti, nella speranza che sarebbe stato utile. Dalle ** FAQ **: * Soprattutto, sii onesto. Se vedi la disinformazione, votala. Aggiungi commenti che indicano cosa, in particolare, è sbagliato. Fornisci risposte migliori per te. Meglio di tutti: modifica e migliora le domande e le risposte esistenti! * –

8

Questa domanda è vecchia, ma altre risposte sono un po 'fuorvianti. La risposta di Eric è totalmente estranea a Redis. La risposta di Pfreixes si basa su ipotesi personali ed è semplicemente sbagliata.

In effetti, è abbastanza sicuro utilizzare le chiavi GUID (prestazioni) in quanto anche 300+ tasti di caratteri non influenzano significativamente le prestazioni sulle operazioni O (1). Controlla questo benchmark: Does name length impact performance in Redis?.

GUID ha in genere una lunghezza di 32-36 caratteri, se si utilizza la rappresentazione esadecimale. Come notato da Evan Carrol nei commenti, le stringhe di Redis sono binari, quindi puoi usare il valore binario e ridurre la dimensione della chiave fino a 128 bit (16 caratteri). Le chiavi con una tale lunghezza non danneggeranno affatto le prestazioni.

Inoltre, la documentazione suggerisce di utilizzare le funzioni di hashing per davvero grandi tasti: http://redis.io/topics/data-types-intro

+1

UUID hanno una lunghezza di 128 bit, come un md5sum. Non ha niente a che fare con i personaggi. –

Problemi correlati