@ZoorGan

Как организовать структуру таблиц БД?

Необходимо в БД хранить информацию о взаимодействии пользователя с объектом. Среди характеристик сессии есть два параметра: продолжительность сессии и задействованные элементы объекта. Предполагаемая структура такова:
Таблица sessions
rIBD7x9Wze.png
Таблица elements
9X5TECFbtT.png
Связующая таблица session_elements
l7tJMfcviE.png

Вроде все хорошо, но сессий (80к-100к в месяц) и элементов (10к-20к) будет многовато. Таким образом связующая таблица будет расти еще быстрее в расчете, что одна сессия в среднем будет иметь 5-10 элементов. Основные запросы будут вида:
SELECT  * FROM `sessions` WHERE `duration` > 100 AND EXIST (SELECT  * FROM `session_elements` WHERE `session_id` = 1 AND `element_id` = 1)

Хотелось бы не делать ошибку на этапе проектирования и не переделывать в ходе работы. Пугают размеры таблиц. Может целесообразней будет использовать что-то вроде mongoDB и хранить в удобных json форматах?
  • Вопрос задан
  • 2955 просмотров
Решения вопроса 1
Kerman
@Kerman
Давайте посчитаем. 2 инта на сессию (8 байт) 100 000 раз в месяц - это 800кб. Плюс элементы, допустим 20 байт на строку и 4 байта на инт в количестве 20 000 - это 192кб. Итого 1 мегабайт в месяц. 12 мб в год.
Мой вывод: поставьте на сервер пару гб. памяти за 500 руб и забудьте о проблемах ближайшие 170 лет.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@gro
Что делает этот запрос?
Ответ написан
@gro
Не ясно что это за запросы и в какой момент они будут происходить.
Если при каждой загрузке страницы, то это одно, а если один раз по крону ночью для сбора статистики, то другое.

Явно текстовый json будет расти намного быстрее, чем таблица на два инта.
Ответ написан
Ваш ответ на вопрос

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

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