w relacyjnej bazie danych, mam tabelę użytkowników, tabelę kategorii i tabelę kategorii użytkownika, które zawierają wiele relacji. Jaka jest lepsza forma tej struktury w Redis?jak mieć wiele do wielu relacji w Redis
Odpowiedz
W przypadku Redis relacje są zazwyczaj reprezentowane przez zestawy. Zestaw może być używany do reprezentowania relacji jednokierunkowej, więc potrzebny jest jeden zestaw na obiekt do reprezentowania relacji wiele do wielu.
Nie ma sensu próbować porównywać relacyjny model bazy danych ze strukturami danych Redis. Dzięki Redis wszystko jest przechowywane w sposób zdenormalizowany.
Przykład:
# Here are my categories
> hmset category:1 name cinema ... more fields ...
> hmset category:2 name music ... more fields ...
> hmset category:3 name sports ... more fields ...
> hmset category:4 name nature ... more fields ...
# Here are my users
> hmset user:1 name Jack ... more fields ...
> hmset user:2 name John ... more fields ...
> hmset user:3 name Julia ... more fields ...
# Let's establish the many-to-many relationship
# Jack likes cinema and sports
# John likes music and nature
# Julia likes cinema, music and nature
# For each category, we keep a set of reference on the users
> sadd category:1:users 1 3
> sadd category:2:users 2 3
> sadd category:3:users 1
> sadd category:4:users 2 3
# For each user, we keep a set of reference on the categories
> sadd user:1:categories 1 3
> sadd user:2:categories 2 4
> sadd user:3:categories 1 2 4
Kiedy już mamy tę strukturę danych, jest łatwy do kwerendy go przy użyciu zestaw algebry:
# Categories of Julia
> smembers user:3:categories
1) "1"
2) "2"
3) "4"
# Users interested by music
> smembers category:2:users
1) "2"
2) "3"
# Users interested by both music and cinema
> sinter category:1:users category:2:users
1) "3"
IMHO Redis nie służy do tworzenia kwerend strukturalnych (SQL), ale do szybkiego dostępu do danych, co można zrobić: utworzyć "tabelę" z identyfikatorem użytkownika jako kluczem, a dane to lista z przyjaciółmi, na przykład . Następnie wyszukujesz identyfikator użytkownika i przetwarzasz to, czego potrzebujesz. To przeciwieństwo normalizacji. Jeśli kolejność danych jest ważna, na przykład aktualizacje statusu, to, co robisz, to pchanie i przesyłanie danych do list. Na przykład tabela "status" ma identyfikator użytkownika jako klucz, a dane to lista. Przesyłasz dane, a następnie przesyłasz zapytanie do ostatnich 20 elementów, na przykład.
- 1. wiele do wielu relacji
- 2. Wiele do wielu relacji w Ecto
- 3. SQLite wiele do wielu relacji?
- 4. Wiele do wielu relacji do pojedynczej tabeli
- 5. Dapper wielu map wiele do wielu relacji
- 6. Wiele do wielu relacji w elasticssearch
- 7. wiele do wielu relacji w żagle
- 8. Audit relacji wiele do wielu w NHibernate
- 9. Wiele do wielu relacji z ServiceStack.OrmLite
- 10. Filtrowanie relacji wiele do wielu według relacji w Django
- 11. Wiele do wielu relacji obiekt do obiektu w C#
- 12. wiele relacji jeden-do-wielu ResultSetExtractor
- 13. sfinks indeks o wiele-do-wielu relacji
- 14. Django ORM sposób przeżywa wielu wiele do wielu relacji
- 15. ORMLite wiele do wielu relacji Android
- 16. Hibernacja: zamów wiele relacji jeden-do-wielu
- 17. ActiveAndroid Wielu do wielu relacji
- 18. "Wiele do dwóch" relacji
- 19. JPA: Wiele relacji wiele do wielu między dwoma podmiotami?
- 20. SqlAlchemy and Flask, jak zapytać wiele do wielu relacji
- 21. LINQ wiele do wielu relacji, jak napisać poprawną klauzulę WHERE?
- 22. Edycja relacji wielu do wielu w Activeadmin
- 23. Miękkie usuwanie w tabeli pośredniej dla relacji wiele do wielu
- 24. Django tastypie i wiele do wielu „do” relacji
- 25. Renderowanie relacji wiele do wielu z dodatkowymi polami do postaci
- 26. Liczba wierszy w relacji wiele do wielu (SQLAlchemy)
- 27. Najlepsza praktyka w obsłudze relacji wielu do wielu w Elasticsearch?
- 28. Synchronizowanie relacji jeden-do-wielu w Laravel
- 29. django jeden do wielu relacji
- 30. Nosql wiele-do-wielu
Dziękujemy! Jestem nowy w Redis i to jest bardzo interesujące :) – starikovs
Jak otrzymamy nazwę kategorii kategoria smembers: 2: użytkownicy z tym, ponieważ daje numer kategorii – vaibhav