Как лучше использовать Redis в ситуации?

Бг:

Настольная школа:
3 поля:
Сид (идентификатор школы)
s_name(название_школы)
s_type (тип школы)

Пользователь стола:
2 поля:
user_id(идентификатор пользователя)
имя(имя пользователя)

Таблица school_user_relationship:
3 поля:
избавиться(идентификатор отношений)
Сид (идентификатор школы)
user_id(идентификатор пользователя)

Объяснять:

  1. Sid и user_id все существуют в таблице пользователей, используя флаг, чтобы различать школы и обычных пользователей. sid и user_id исходят из одной и той же глобальной пользовательской системы, генерируются алгоритмом распределенного идентификатора и не увеличиваются самостоятельно MySQL.
  2. Таблица school — это расширенная таблица школьной информации.
  3. Уникальное объединение ограничений (sid, user_id) существует в таблице отношение school_user_
  4. Каждая запись в таблице отношений указывает на то, что школа sid имеет пользователя user_id
  5. Максимальное количество пользователей для каждой sid school — 100000
  6. Количество школ крайне неопределенно

Вопрос:

Как использовать Redis для оптимизации следующих двух требований?

  1. Учитывая sid, представляющий школу, и user_id, представляющий школу или ученика, определите, что user_id принадлежит этой школе (sid)
  2. Дан пользователь, представляющий набор (идентификатор школы или идентификатор пользователя), который определяет, принадлежат ли все пользователи набора к одной и той же школе.

Структура данных: хэш? набор? битсет?

Если не использовать какую-либо оптимизацию, время запроса немного велико. Поэтому оптимизация, скорее всего, закончится. Но у меня пока нет никаких планов.

Создание Twitter-подобного приложения Trending Topics App с Redis (на примере PHP)
Создание Twitter-подобного приложения Trending Topics App с Redis (на примере PHP)
Redis - это популярная база данных типа "ключ-значение" в памяти с поддержкой различных типов и структур данных, которая в основном используется для...
0
0
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваш вопрос звучит так, будто у вас есть подход реляционной базы данных (SQL) к вашей проблеме. Redis, с другой стороны, по своей сути является хранилищем значений ключа или ассоциативным массивом. Комплект разработчика Java предоставляет тип данных HashMap в качестве хранилища ключ-значение. Python предоставляет словари, а Javascript предоставляет объекты со свойствами. php и perl предоставляют ассоциативные массивы

Давайте просто назовем структуру данных словарем (общим, а не python). Во всех этих структурах данных и в Redis вы храните, скажем, свои пользовательские данные, выполняя что-то вроде этого псевдокода, чтобы поместить имя вашего пользователя в словарь имен пользователей. ( <-- — оператор присваивания псевдокода.)

usernames[user_id] <-- name

Затем, позже, если вы знаете идентификатор пользователя, вы можете получить имя так

name <-- usernames[user_id]

Но если вы знаете имя пользователя и хотите получить его идентификатор, вам нужна отдельная структура данных.

userids[name] <-- user_id

и сделайте это, чтобы восстановить идентификатор по имени.

user_id <-- userids[name]

В SQL вы могли бы сказать SELECT user_id FROM users WHERE name = whatever, но словари так не работают (во всяком случае, неэффективно).

Словари могут иметь словари (HASH в Redis) и наборы (SET в Redis) в качестве значений. Таким образом, вы можете иметь словарь с одной записью для каждой школы, которая представляет собой набор идентификаторов пользователей для людей, зачисленных в эту школу.

Хороший способ приблизиться к эффективному дизайну Redis — решить, как бы вы сделали это на обычном языке программирования со словарями.

Спасибо за ваш ответ! Я уже решил проблему.

Jidcoo 04.04.2023 12:43

Другие вопросы по теме