Бд: 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.
Подскажите по какому пути пойти? Какой вариант выбрать или предложите свой.