огромные данные в сессии

_hxc-

Новичок
огромные данные в сессии

Люди, как вы относитесь к сабжу?

Скрипту попадает некоторое кол-во бинарных данных (10-1000кб),
и я думаю.. не хранить ли их в сессии (в base64).

в /tmp/ файл хранить не получится, т.к по окончанию работы скрипта нужно отдать его юзеру, нужно чтобы файл был "доступен из вэб".

Насколько это губительно для ресурсов, если губительно конечно..
Моральная сторона вопроса меня мало интересует, но всё же.. практиковал такое кто-нибудь?
Или лучше забыть об этом, и хранить всё в temp в рабочей директории
 

hermit_refined

Отшельник
поясните, что вы там делаете. у вас сайт - служба по переработке бинарных данных?..
 

_hxc-

Новичок
Автор оригинала: hermit_refined
поясните, что вы там делаете. у вас сайт - служба по переработке бинарных данных?..
разве это имеет значение?
на этом форуме часто отвечают чтото вроде - "оно тебе не надо",
так вот это мне действительно надо, прошу советов по существу...
 

Frol

Новичок
они тебе не нужны.
ты же лучше знаешь, что имеет значение, а что нет.
 

hermit_refined

Отшельник
потрясающе.
лежит тут у меня одна фигня в морозилке.
не знаете, лучше её пожарить или отварить?..
 

_hxc-

Новичок
хватит демагогии =)

они тебе не нужны.
ты же лучше знаешь, что имеет значение, а что нет.
ога я пхп гуру я просто от нех делать здесь вопрос залал


вообщем ситуация такая, скрипт для вставки водяных знаков/подписей в картинку

- картинка загружается
- на странице предпросмотра при помощи ajax кнопкой пред-след. подбирается нужный слой
- картинка выплёвывается с хидером force-download

Вопрос, стали бы вы хранить картинку в сессии, и вообще, рассматривали бы такую возможность?

-~{}~ 03.02.07 06:45:

из соображений практичности.
base64decode имхо легче сделать, чем каждый раз трогать файл...
 

Апокалипсис

тех дир matras.ru
Не пойму зачем ее в сессии хранить ? 1 раз создал картинку юзер ее ввел, все больше она не нужна, если непрально форму заполнил, генерируем новую картинку.
 

hermit_refined

Отшельник
ну, ajax тут как бы не при делах.
если я правильно понимаю, что практически при всех загрузках скрипта будет доставаться картинка и, преобразовываться и отдаваться (а если где нет - то сессию стартовать необязательно), то... поэкспериментировать, конечно, можно ("свежо и оригинально", base64, кстати, не нужен). минус в производительности - данные сессии перезаписываются на диск после каждого запроса (даже в том случае, если они не изменились). 10 кб - это пустяки, 1 мб - уже нет. в реализации - проще, да. (но, с другой стороны, написать маленький класс для работы с временными файлами для таких случаев - тоже несложно.)
 

ast-ross

Новичок
А вот скажите хранить словари в сессии это грубо и безграматно? Ато есть у меня БД в Oracle. Есть поисковая форма в которой порядка 10-15 select полей, база практически на словарях. Каждый из словарей содержит ~100-1000 значений. Так вот если при генирации поисковой формы динамично тащить словари из БД то все так жутко тормозит. В MySQL переделать не могу так как я просто подбираю данные из БД, она вообще не моя и стоит на другом серваке. Как выход я сделал следующее. При авторизации читаю все словари в сессию ну и потом без проблем генерю поисковую форму. Из минусов 1) Забиваю сессию дофигищей данных по определению не подходящих для хранения в ней. 2) В случае изменения словарей в форме они изменяться только после перечитки их в сессию... Как вот поступить то? Есть реальный вариант решения этой пакости?
 

hermit_refined

Отшельник
ast-ross
очевидно, что сессии под это использовать нельзя.
во-первых, дублируются одни и те же данные для всех пользователей; во-вторых, только 1/n-ая этих данных реально нужна для каждого запроса.
кешируйте данные в локальной бд или файлах.

P.S. на всякий случай повторюсь - сессии нельзя использовать в качестве кеша. для этого применяются другие методы - от старых дедовских (файлы) до memcached и APC.
 

ast-ross

Новичок
Чесно говоря я уже подумывал о временных таблицах в MySQL или файлах... Но файлы мне кажеться это тоже будет не быстро...
 

Gorynych

Посетитель PHP-Клуба
Re: огромные данные в сессии

Автор оригинала: _hxc-
Скрипту попадает некоторое кол-во бинарных данных (10-1000кб),
....

в /tmp/ файл хранить не получится, т.к по окончанию работы скрипта нужно отдать его юзеру, нужно чтобы файл был "доступен из вэб".
я работал не с картинками, а с выборками. Общая идея здесь, на мой взгляд, - та же, что и для связки файлы и БД. Храним уникальную "ссылку" на файл в сессии, а данные - в файле. И это, отнюдь, не медленнее хранения данных в БД, если не мудрствовать излишне при отдаче файла.

по сути сессионные данные - это сложный массив с уникальным идентификатором, хранящийся в файловой системе. Так что и так, и так - файловые операции как данность есть (данные БД тоже файл, но не будем об этом :). Массового обращения к дополнительному файлу через сессию не будет - к нему обращается только владелец сессии, да и проблема доступности по сгенерированому имени к такому файлу после сеанса рассасывается практически самостоятельно.
 
Сверху