Подходят ли сесии для хранения большого количества структурированой инфы?

botan

Новичок
Подходят ли сесии для хранения большого количества структурированой инфы?

Ситуация:
Есть сайт на котором заполняется анкета. Её заполненые поля должны быть видны пользователю. (В БД из них пишутся всего несколько и то главным образом увеличивая значения какого-то поля).
Раньше всё хранил в сесии Array[id]=value и так же выводил.
ТЕперь стало сложнее, анкеты стали "навороченее", и один и тот же кусок анкеты может быть заполнен несколько раз одним и тем же пользователем по-разному (в разном контексте).
Т.е. устроено это примерно так:
"У вас была машина?" Да/Нет.
Если да - маленькая анкета
"Введит первую машину
Год покупки
Марка
Год ПРодажи
Причина продажи
...
Заканчивается фразой, а кроме этой у вас были другие машины? Да/Нет.
Если да - опять эта же анкета с тем же вопросом в конце.
"
В бд ничего писать не надо - введёная информация используется для "подстройки навигации и некоторого другого контента сайта под конкертного пользователя".
При чём сколько такой информации будет - введено (может машин вообще не было а может было штук 10) - не известно.

Мои варианты решений:
1. Иметь в сессии массивы массивов. т.е. для машин это массив содержащий порядковый номер массива в качестве ключа - и в качестве значения - массив с годом продажи/покупки маркой и т.д.
Проблема в том - что довольно часто будут встречаться обращения вида "сколько немецких автомобилей было у пользователя" и т.д. и как мне кажется не очень правильно так обращаться к элементу "массива" сам "родитель" которого - тоже массив, не говоря о том что сессия - тоже по сути дела "массив" :) Или я не прав?
2. Записывать каждое введение в БД. в месте с идентификатором PHPSESID и временем когда оно было сделано. Ну и по crontab чистить старые записи.

Если для этого лучше подходит что-либо другое с удовольствием приму ключевое слово :)
 

Sirius

PHP+MySQL=LOVE
Re: Подходят ли сесии для хранения большого количества структурированой инфы?

Не люблю я сессии... Как программист - люблю, как администратор - нет. Грузят они сервер при большом количестве народу...

Я предлагаю два варианта, а ты уж сам решай, так как на гениальность эти варианты не претендуют :)

1. Все промежуточные результаты писать в саму таблицу базы, просто одним полем показывать актуальность этой записи. Когда дойдёт до конца, значит она актуальна. Если не дойдёт, то стирать каждый день записи не актуальные старее N часов.

2. Сделать свой механизм сессий на MySQL Heap таблицах. Если база данных стабильно работает без падений - то проблем не будет.

P.S.: я бы сделал и то и другое :)
 

SiMM

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

botan

Новичок
2 sirius
Твой первый вариант по сути дела мой второй.

Да, таблицы это конечно предпочительнее в том плане что SELECTЫ нужны.

Мне в некотором роде повезло, проект серьёзный и есть немного времени подумать, что редко бывает.

Мне оба моих варианта не нравятся.
Счас уже думаю может быть мне хранить всё в сесиях в виде XML, и далее средствами XSLT оттуда извращаться. Но что-то мне эта мысль тоже не особо нравится.

Есть просто такое чувство что "расширить возможности сесий" надо не только мне тут. И что кто-то для этого уже что-то придумал. Либо идею(Способ) либо способ.

Ведь по сути дела мне надо класть в сесию табличку заданого формата с неизвестным числом строчек. Есть такое спинномозговое чувсто что какой-то сделать это красиво есть.
Всё ещё в поисках :)
 

Фанат

oncle terrible
Команда форума
не понимаю проблемы.
точнее, при чем здесь сессии?

Вопрос состоит в том, в какой структуре хранить базу знаний экспертной системы.
а уж куда класть эту базу знаний - вопрос десятый.

Вопрос должен звучать, как "подходит ли массив"

Имхо - вполне подходит.
Строищь себе дерево.
 

botan

Новичок
Да, действительно, ты прав.
$_SESSION - массив, но в пхп довольно просто один или несколького его элементов сделать тоже массивом.
Т.е. такое дерево, когда некоторые элементы массива являются так же масивами, некоторые элементы которого являются так же массивами...
Является нормральным решением?
Тогда видимо зря мне это кривым показалось. Понял. Исправлюсь. Буду так и делать :)
 

Sirius

PHP+MySQL=LOVE
Яро - Да 2 пункт на Heap таблицах (которые сидят в оперативке) намного быстрее. Недостаток как я и сказал, при падении мускула данные сессий исчезают. Но на нормальных хостингах траблов никогда не бывает.

Но это уже флейм :) Фанат был прав.
 

RST. Angellab

Guest
1) можно пхпу настроить чтоб она сессии держала в мускуле. соответсвенно в HEAP таблице. - это касательно произовдительности.
2) Я для хранения структуры использовал сериализацию сложных типов данных.
3) Я думаю для хранения сложных типов данных идеально подходят сериализованные объекты. А дальше - хоть в сессии хоть ещё где. К тому же это будет стройно выглядеть и достаточно прозрачно для программиста.
 
Сверху