Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Сохранение относительно больших объёмов данных в PHP сессии

86K
03 июля 2013 года
MadridianFox
11 / / 03.07.2013
Возникла необходимость составления отчётов в виде таблиц с возможностью экспорта в exel. Данные в таблицах расчитываются на основе информации полученной из БД. Собственно сам вопрос - целесообразно ли сохранять несколько матриц 100*100 в сессии или праильнее будет кэшировать в отдельную таблицу?
51K
03 июля 2013 года
BagiLR
110 / / 29.06.2013
над этим нам ещё предстоит поработать, пока же такая работа обычно стоит труда огромной команды специалистов!!! в реале ещё такого метода не было!!!
414
03 июля 2013 года
CassandraDied
763 / / 24.05.2012
Ответ зависит от того, насколько часто будут обновляться сгенерированные данные, думаю.
Ну и "несколько матриц 100*100" — это вообще не показатель объёма. Можно в рублях мегабайтах?
Вот ещё одна деталька: как часто данные будут запрашиваться?
86K
04 июля 2013 года
MadridianFox
11 / / 03.07.2013
Цитата: CassandraDied
насколько часто будут обновляться сгенерированные данные?
Вот ещё одна деталька: как часто данные будут запрашиваться?


Обновляться данные будут намного чаще чем запрашиваться, и впринципе нужен не кэш для ускорения, а временное хранилище, чтобы два-три раза не доставать одни и те же данные для "разных" отчётов.

414
04 июля 2013 года
CassandraDied
763 / / 24.05.2012
Если СУБД поддерживает и конечные данные — это только сгруппированные определённым образом данные БД без какой-либо обработки, то стоит посмотреть в сторону представлений.
Ещё можно посмотреть в сторону обработки данных триггерами, чтобы не приходилось их для этого вообще получать.
Системы кэширования тоже бывают разными, так что, скорей всего, появятся новые вопросы, если выбрать их. Они различны для разного времени обновления данных.
Неясно, как обрабатываются данные пред выводом, на что именно уходить большая часть времени и вообще — какая причина оптимизации?
Самый лучший вариант — самое простое решение. Если есть возможность прикрутить кэш и нет возражений — стоит прикручивать его. Иначе хранить данные в БД. Но определить полезность того или другого способа, скорей всего, получится только после испытаний.
86K
05 июля 2013 года
MadridianFox
11 / / 03.07.2013
Цитата: CassandraDied
На что именно уходить большая часть времени и вообще — какая причина оптимизации?


Дело в том что в БД используется EAV модель хранения данных, в связи с этим чтобы получить одну ячейку матрицы необходимо сделать 10-20 запросов к БД. Вижу два выхода из ситуации:

  • Попытаться перенести часть логики в SQL чтобы уменьшить количество запросов.
  • При первом запросе отчёта сохранять исходные данные в некоторый легкодоступный кэш, при последующих запросах других отчётов брать данные из кэша одним запросом, а чего нехватает уже брать из БД.
Первый способ сразу можно вычеркнуть, т.к. грядёт буря изменение логики хранения данных и это не в моей власти.
Второй - это по сути кэш для одного пользователя в пределах одной сессии. Логично, что первое что пришло мне в голову это непосредственно $_SESSION.
Сомнение в том что - нормально ли сохранять в сессии 1-2 Mb данных? Обычно всё ограничивается сохранением переменных
51K
05 июля 2013 года
BagiLR
110 / / 29.06.2013
Целисообразно обрабатывать в отдельную таблицу для постраничного метода конкретной обработки данных с возможностью перехода запросов по СУБД к каждой из таблиц постраничным методом обработки запросов данных!!!
Логически если таблица будет получать запросы неправильно то в единной СУБД единной таблицы то она даст неправильный общий результат текущего запроса, но если База Данных находится в единной СУБД в нескольких таблицах с обработкой на нескольких страницах то result гарантируется успешным так как связь таблиц находится в одной единной СУБД с одинаковыми запросами!!!
Пример тому социальные сети всех стран Мира, по сути они в одной СУБД так как находятся в одном протоколе HTTP, HTTPS, отличие этих протоколов в том, что запросы по выделенным IP адресам составляются методами IPv4 и IPv6, в связи с этим имеется возможность передачи данных из одной соц сети в другую соц сеть тем самым таблицы находятся в одной СУБД но в разных (каталогах), и логически создание единной БД с единой таблицей будет иметь длинный запрос в секундах в миллиард операций миллиард страничных запросов и миллиард определений результата на текущий запрос что и приведёт к неправильной работе единной таблицы по СУБД!!! Протокол IPv4 имеет 4 так сказать метода запросов на определение результатов, в каждом запросе миллион или миллиард операций!!!
414
06 июля 2013 года
CassandraDied
763 / / 24.05.2012
Я не знаком с тем, как работает $_SESSION. Но что-то мне подсказывает, что в $_SESSION особо много хранить не получится достаточно долгий промежуток времени. То есть, дольше, чем выполнение скрипта. Если так, тогда этот способ не подходит по очевидным причинам.
Вообще, как бы не работал $_SESSION, хранить данные средствами PHP — всегда плохая идея. Он предназначен для получения данных, обработки и передачи данных клиенту, но никак не для хранения. И всё это должно происходить быстро.
Если не хочется заморачиваться с готовыми средствами кэширования, можно писать временные данные в файл, то есть, организовать свой "кэш".
К сожалению, я не знаком с кэшированием, чтобы посоветовать что-то конкретное.
86K
06 июля 2013 года
MadridianFox
11 / / 03.07.2013
Сессия хранит данные до ухода пользователя с сайта + некоторое время. Т.е. именно то что мне и нужно - сохранить данные между вызовами нескольких страниц в пределах одного сеанса работы. Насколько я знаю данные сессии хранятся в файле и автоматически удаляются по истечении срока хранения.
А значит велосипед в виде собственного кэша в файлах ничем не лучше сессии.
85K
06 июля 2013 года
fastergus2dog
3 / / 06.07.2013
Вам нужно учесть техничиские характеристики вашего железа. Если у вас сильный процессор тогда лучше писать в файл, если много оперативки тогда лечше все это держать в памяти и писать только в определенные моменты.
414
06 июля 2013 года
CassandraDied
763 / / 24.05.2012
Но ведь у разных пользователей одинаковые данные, нет? В пределах какой-то гурппы пользователей. Если один пользователь уйдёт с сайта, как данные получат другие?
86K
06 июля 2013 года
MadridianFox
11 / / 03.07.2013
Цитата: CassandraDied
Если один пользователь уйдёт с сайта, как данные получат другие?


Система расчитана на то что разным пользователям нужны разные данные. Повторяю - необходимо хранить данные между запросами страниц - чтобы не подгружать из БД одни и те же данные.

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог