2012-06-06 12 views

Odpowiedz

3

Redis używa strategii mieszania do przechowywania wszystkich kluczy, każdy klucz jest przechowywany za pomocą funkcji mieszania. Wszystkie wersje programu Redis db o klucze wchodzą w tę funkcję - lub coś podobnego.

oryginalny klucz jest również zapisane, aby dowiedzieć się przyszłe colisions między klawiszami zróżnicowanego i tak duże klawisze mogą być wpływ na rękojeści pamięci i wszystkich powiązanych dziedzinach: fragmentacji pamięci, hity cache/pomyłek, itp ...

+1

Jeśli ktoś mnie prosi, odpowiadam jako http://stackoverflow.com/a/6373068/501254. Ale ktoś wykonał test http://stackoverflow.com/a/6322977/501254 i wydaje się interesujący. – ozz

+0

Ta odpowiedź jest myląca, jak wspomniałem w powyższym komentarzu, nawet ponad 300 klawiszy znaków nie ma wpływu na wydajność. –

1

mogę myśleć o dwóch kwestiach z GUID:

Nie są sekwencyjne

nie jestem pewien o Redis, ale wiele baz danych (SQL Server, MongoDB) może indeksować (dużo) bardziej wydajnie, jeśli wartości klucza głównego są nieco sekwencyjne.

Być może Redis jest podobny?

Istnieją alternatywne algorytmy generowania GUID, które generują sekwencyjne identyfikatory GUID w celu uwzględnienia tego problemu, np.

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

lub SQL Server Sequential GUID

Są duże

Im dłuższy klucz, tym więcej pamięci zajmuje przechowywać indeksu. Identyfikator GUID ma 128 bitów. W wielu (większości) bazach danych można również użyć klucza 64-bitowego lub 32-bitowego. Używanie identyfikatora GUID, w którym byłaby 32-bitowa liczba całkowita, oznacza użycie 4x pamięci dla indeksów. Ponieważ wiele baz danych ma wskaźniki znacznie większe niż pamięć fizyczna, może to mieć dramatyczny wpływ na wydajność.

+0

Dziękuję Ericowi za komentarz, ale redis db ma tak odmienną architekturę i znalazłem odpowiedź na trochę więcej badań .. Z pozdrowieniami – ozz

+1

Przepraszamy za spadek, ale jego pytanie było BARDZO specyficzne dla Redis. Dobra odpowiedź, jeśli jego pytanie nie zawierało REDIS :-) – schmoopy

+0

@schmoopy: Downvote nie jest odpowiedni. Nie dostarczyłem * dezinformacji *.Przekazałem dokładne informacje i jasno określiłem ich granice, mając nadzieję, że będzie to pomocne. Od ** FAQ **: * Przede wszystkim bądźmy szczerzy. Jeśli widzisz dezinformację, zagłosuj na nią. Dodaj komentarze wskazujące, co konkretnie jest złe. Udziel lepszych odpowiedzi własnych. Najlepszy ze wszystkich - edytuj i ulepszaj istniejące pytania i odpowiedzi! * –

8

To pytanie jest stare, ale inne odpowiedzi są nieco mylące. Odpowiedź Erica jest całkowicie niezwiązana z Redis. Odpowiedź Pfreixesa opiera się na osobistych założeniach i jest po prostu błędna.

W rzeczywistości to dość bezpieczne w użyciu GUID klucze (performance-wise) ponieważ nawet 300+ klucze znakowe nie wpływają znacząco na wydajność O (1) operacji. Sprawdź ten benchmark: Does name length impact performance in Redis?.

GUID ma zazwyczaj długość 32-36 znaków, jeśli używasz reprezentacji w postaci szesnastkowej. Jak zauważył Evan Carrol w komentarzach, ciągi Redis są binarnie bezpieczne, więc możesz użyć wartości binarnej i zmniejszyć rozmiar klucza do 128 bitów (16 znaków). Klucze o takiej długości nie zaszkodzą w ogóle wydajności.

Również dokumentacja sugeruje, aby korzystać z funkcji hashowania dla naprawdę dużych klawiszy: http://redis.io/topics/data-types-intro

+1

UUID ma długość 128 bitów, podobnie jak suma md5. Nie ma to nic wspólnego z postaciami. –

Powiązane problemy