YekitKsv
@YekitKsv
Developer

Как хранить данные доступные определённым юзерам?

Бд: percona mysql 8.3
Backend: php7. 2

Имею таблицу point, где хранится информация о точке: адрес, код, координаты, флаг общей доступности(enabled)

Сейчас есть такой кейс, что некоторый набор точек может быть доступен только для какого-то определённого кол-ва юзеров.

Например, есть 2000 точек, которые для всех юзеров enabled=0, но для юзеров 22,23,54,88 должны быть доступны, т.е. enabled=1.

Рассматривали варианты:
1. Отдельная таблица userPoint, где будут столбцы userId, pointId. По этой таблице через join будет легко выбирать эти точки. Но таблица будет пухнуть очень быстро, т.к. имеем около 40000 точек и более 2000 пользователей для которых эти точки будут доступны, а для остальных нет, итого получаем 8млн строк и со временем таблица будет ещё больше пухнуть.

2. Отдельная таблица userPoint, где будут столбцы userId, pointIds. В столбец pointIds будет записываться JSON массив с ID точек. На бэкенде будем 2 запросами вытаскивать точки.1 запрос вытаскивает из таблицы userPoint массив с точками, 2 запрос получаем select-ом точки.

3. Такая же таблица как и во 2 варианте, только делать 1 запрос на бекэнде, пример запроса:
SELECT id FROM point WHERE id IN (SELECT j.pointId
FROM userPoint uP
JOIN json_table(
  uP.pointIds,
  '$[*]' COLUMNS (pointId INT path '$')
) j WHERE uP.companyId = 9315)


4. Рассматриваем вариант перенести такие данные в mongodb.

Подскажите по какому пути пойти? Какой вариант выбрать или предложите свой.
  • Вопрос задан
  • 91 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы