Сохранение относительно больших объёмов данных в PHP сессии
Возникла необходимость составления отчётов в виде таблиц с возможностью экспорта в exel. Данные в таблицах расчитываются на основе информации полученной из БД. Собственно сам вопрос - целесообразно ли сохранять несколько матриц 100*100 в сессии или праильнее будет кэшировать в отдельную таблицу?
над этим нам ещё предстоит поработать, пока же такая работа обычно стоит труда огромной команды специалистов!!! в реале ещё такого метода не было!!!
Ну и "несколько матриц 100*100" — это вообще не показатель объёма. Можно в
Вот ещё одна деталька: как часто данные будут запрашиваться?
Цитата: CassandraDied
насколько часто будут обновляться сгенерированные данные?
Вот ещё одна деталька: как часто данные будут запрашиваться?
Вот ещё одна деталька: как часто данные будут запрашиваться?
Обновляться данные будут намного чаще чем запрашиваться, и впринципе нужен не кэш для ускорения, а временное хранилище, чтобы два-три раза не доставать одни и те же данные для "разных" отчётов.
Ещё можно посмотреть в сторону обработки данных триггерами, чтобы не приходилось их для этого вообще получать.
Системы кэширования тоже бывают разными, так что, скорей всего, появятся новые вопросы, если выбрать их. Они различны для разного времени обновления данных.
Неясно, как обрабатываются данные пред выводом, на что именно уходить большая часть времени и вообще — какая причина оптимизации?
Самый лучший вариант — самое простое решение. Если есть возможность прикрутить кэш и нет возражений — стоит прикручивать его. Иначе хранить данные в БД. Но определить полезность того или другого способа, скорей всего, получится только после испытаний.
Цитата: CassandraDied
На что именно уходить большая часть времени и вообще — какая причина оптимизации?
Дело в том что в БД используется EAV модель хранения данных, в связи с этим чтобы получить одну ячейку матрицы необходимо сделать 10-20 запросов к БД. Вижу два выхода из ситуации:
- Попытаться перенести часть логики в SQL чтобы уменьшить количество запросов.
- При первом запросе отчёта сохранять исходные данные в некоторый легкодоступный кэш, при последующих запросах других отчётов брать данные из кэша одним запросом, а чего нехватает уже брать из БД.
Второй - это по сути кэш для одного пользователя в пределах одной сессии. Логично, что первое что пришло мне в голову это непосредственно $_SESSION.
Сомнение в том что - нормально ли сохранять в сессии 1-2 Mb данных? Обычно всё ограничивается сохранением переменных
Логически если таблица будет получать запросы неправильно то в единной СУБД единной таблицы то она даст неправильный общий результат текущего запроса, но если База Данных находится в единной СУБД в нескольких таблицах с обработкой на нескольких страницах то result гарантируется успешным так как связь таблиц находится в одной единной СУБД с одинаковыми запросами!!!
Пример тому социальные сети всех стран Мира, по сути они в одной СУБД так как находятся в одном протоколе HTTP, HTTPS, отличие этих протоколов в том, что запросы по выделенным IP адресам составляются методами IPv4 и IPv6, в связи с этим имеется возможность передачи данных из одной соц сети в другую соц сеть тем самым таблицы находятся в одной СУБД но в разных (каталогах), и логически создание единной БД с единой таблицей будет иметь длинный запрос в секундах в миллиард операций миллиард страничных запросов и миллиард определений результата на текущий запрос что и приведёт к неправильной работе единной таблицы по СУБД!!! Протокол IPv4 имеет 4 так сказать метода запросов на определение результатов, в каждом запросе миллион или миллиард операций!!!
Вообще, как бы не работал $_SESSION, хранить данные средствами PHP — всегда плохая идея. Он предназначен для получения данных, обработки и передачи данных клиенту, но никак не для хранения. И всё это должно происходить быстро.
Если не хочется заморачиваться с готовыми средствами кэширования, можно писать временные данные в файл, то есть, организовать свой "кэш".
К сожалению, я не знаком с кэшированием, чтобы посоветовать что-то конкретное.
А значит велосипед в виде собственного кэша в файлах ничем не лучше сессии.
Вам нужно учесть техничиские характеристики вашего железа. Если у вас сильный процессор тогда лучше писать в файл, если много оперативки тогда лечше все это держать в памяти и писать только в определенные моменты.
Но ведь у разных пользователей одинаковые данные, нет? В пределах какой-то гурппы пользователей. Если один пользователь уйдёт с сайта, как данные получат другие?
Цитата: CassandraDied
Если один пользователь уйдёт с сайта, как данные получат другие?
Система расчитана на то что разным пользователям нужны разные данные. Повторяю - необходимо хранить данные между запросами страниц - чтобы не подгружать из БД одни и те же данные.