2012-10-05 13 views
20

Myśl, którą próbuję wprowadzić, to tabela identyfikatorów. Zasadniczo ma on strukturę (user_id, lecturer_id), której user_id odnosi się do klucza podstawowego w mojej tabeli User, a lecturer_id odnosi się do klucza głównego mojej tabeli Lecturer.Znajdź klucz według wartości

Próbuję zaimplementować to na czerwono, ale jeśli ustawię klucz jako główny identyfikator użytkownika, gdy spróbuję uruchomić zapytanie takie jak pobierz wszystkie rekordy z wykładowcą id = 5, ponieważ wykładowca nie jest kluczem, ale wartość Nie będę w stanie osiągnąć tego w czasie O (1).

W jaki sposób mogę utworzyć strukturę podobną do tabeli identyfikatorów, o której wspomniałem powyżej, lub czy Redis tego nie obsługuje?

+0

Niedawno dodana strona w dokumentacji Redisa zawiera więcej informacji na temat [Secondary indexing with Redis] (http://redis.io/topics/indexes) i obejmuje ten przypadek w [Simple numerical indexes with sorted sets] (http://redis.io/topics/indexes#simple-numerical-indexes-with-sorted-sets) section. –

Odpowiedz

28

Jedną z rzeczy, które szybko uczą się podczas pracy z REDiS jest to, że można dostać się do projektowania struktury danych wokół dostępu potrzeb, szczególnie jeśli chodzi o stosunki (to nie jest relacyjna baza danych po wszystkich)

Jest nie ma możliwości wyszukiwania według "wartości" ze złożonością czasu O (1), jak już zauważyłeś, ale istnieją sposoby, aby podejść do tego, co opisujesz, używając redis. Oto co polecam:

  • przechowywania danych użytkownika za pomocą identyfikatora użytkownika (na przykład w hash), jak już robisz.
  • Dodatkowy zestaw dla każdego identyfikatora wykładowcy zawierający wszystkie identyfikatory użytkowników odpowiadające identyfikatorowi wykładowcy.

To może wydawać się powielania danych z relacji, ponieważ twoje dane użytkownika musiałby przechowywać identyfikator wykład, a Twoje dane wykład będzie przechowywać identyfikatorów użytkowników, ale to jest (małe) cena do zapłaty, jeśli jest budować relacje w nierelacyjnym składnicy danych, takim jak redis. W praktyce działa to dobrze; pamięć rzadko jest wąskim gardłem dla małych zbiorów danych (pomyśl o tysiącach identyfikatorów).

Aby uzyskać lepszy obraz, w jaki sposób są ludzie używający Redis do modelowania aplikacji z relacji, polecam czytanie Design and implementation of a simple Twitter clone i kod źródłowy Lamernews, z których oba są napisane przez Redis autora Salvatore Sanfilippo.

Powiązane problemy