Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

База данных или серилизация? (frm)
Author Message
frm
Заглянувший



Joined: 18 Mar 2011
Posts: 6
Карма: 0
   поощрить/наказать

Location: Россия

PostPosted: Fri Apr 15, 2011 4:54 pm (написано за 4 минуты 48 секунд)
   Post subject: База данных или серилизация?
Reply with quote

Всем доброго дня. Сложилась следующая ситуация. Имеются данные которые нужны в скриптах в виде массива или объекта. Есть возможность хранить эти данные в базе или сохранить в файл предварительно серилизовав. Вопрос в том как их лучше хранить для достижения лучшей производительности. Перезапись происходит редко (ею можно вообще пренебречь) в основном интересует вопрос производительность при выборке из базы (mysql) или чтение из файла и десерилизация. Данные всегда нужны все, так что выборку по частям из базы можно не рассматривать.
Back to top
View user's profile Send private message
Миша Спларов
Участник форума



Joined: 17 Nov 2003
Posts: 821
Карма: 65
   поощрить/наказать

Location: Россия, Москва

PostPosted: Tue Apr 19, 2011 7:30 am (спустя 3 дня 14 часов 36 минут; написано за 45 секунд)
   Post subject:
Reply with quote

В общем случае без разницы.
Если у вас что-то конкретное тормозит — давайте разбираться, а «на будущее» гадать смысла нету.
Back to top
View user's profile Send private message
frm
Заглянувший



Joined: 18 Mar 2011
Posts: 6
Карма: 0
   поощрить/наказать

Location: Россия

PostPosted: Wed Apr 20, 2011 5:08 pm (спустя 1 день 9 часов 37 минут; написано за 27 минут 13 секунд)
   Post subject:
Reply with quote

Миша Спларов wrote:
В общем случае без разницы.
Если у вас что-то конкретное тормозит — давайте разбираться, а «на будущее» гадать смысла нету.
Спасибо конечно за ответ, но должен констатировать что ваш ответ не содержит в себе ни какой информации. Что значит "В общем случае без разницы"? Разница есть всегда.
Давайте разберем на конкретном примере.
Приложение построено на Zend Framework (далее ZF). В ZF есть такая штука как Zend_Acl, служит для реализации списка прав доступа и управления привилегиями. Я поясню некоторые аспекты работа этой компоненты так как они необходимы для описания сути проблемы. Для начала определимся с терминологией:
а) ресурс - объект, доступ к которому контролируется, в моем случае это страницы приложения;
б) роль - объект, который может запрашивать доступ к ресурсу, в моем случае это группа к которой принадлежит пользователь.
Что бы все это дело заработало нужно сделать следующее:
Code (php): скопировать код в буфер обмена
// Создаем объект Zend_Acl
$acl = new Zend_Acl();

// Добавляем ресурсы
$acl->add(new Zend_Acl_Resource('page1'));
$acl->add(new Zend_Acl_Resource('page2'));
$acl->add(new Zend_Acl_Resource('page3'));
$acl->add(new Zend_Acl_Resource('page4'));
$acl->add(new Zend_Acl_Resource('page5'));
...............................
$acl->add(new Zend_Acl_Resource('pageN'));

// Создаем роли
$acl->addRole(new Zend_Acl_Role('guest'))
    ->addRole(new Zend_Acl_Role('member'))
    ->addRole(new Zend_Acl_Role('admin'));

// Назначаем права
$acl->deny('guest', 'page1'); // доступ запрещен
$acl->allow('guest', 'page2'); // доступ разрешен

// Там где необходимо можно проверить права доступа к ресурсу
echo (www.php.net/echo) $acl->isAllowed('guest', 'page1') ? 'разрешен' : 'запрещен';
Как видно из кода объект $acl содержит в себе все страницы приложения, т.е. число элементов может меняться в зависимости от структуры сайта но в принципе порядок количества данных я думаю понятен(будем считать от 100 страниц). Так вот у меня в приложении при каждом запросе к серверу появляется необходимость обращения к этому объекту для определения прав доступа пользователя к запрашиваемой странице. Вот собственно мы и вернулись к вопросу как все таки лучше хранить эти данные, т.е. тут два варианта.
1. Хранить страницы в базе и при каждом запросе извлекать их и собирать объект $acl как описано выше.
2. Хранить собранный объект в файле (предварительно серилизовав конечно) и при каждом запросе доставать его из файла и востанавливать десерилизацией.
Понятно что большой разницы не будет, но при большом числе запросов она станет ощутима.

Last edited by frm on Thu Apr 21, 2011 4:05 pm; edited 1 time in total
Back to top
View user's profile Send private message
Миша Спларов
Участник форума



Joined: 17 Nov 2003
Posts: 821
Карма: 65
   поощрить/наказать

Location: Россия, Москва

PostPosted: Thu Apr 21, 2011 11:44 am (спустя 18 часов 35 минут; написано за 2 минуты 34 секунды)
   Post subject:
Reply with quote

А правами кто-нибудь управляет? Если да, то логичней и права и страницы и пользователей хранить в базе, а объекты собирать на основе этих данных.
При этом собранные объекты можно кэшировать (для этого и понадобится сериализация) в памяти/базе/файлах. При изменении прав — сбрасывать кэш.
Back to top
View user's profile Send private message
frm
Заглянувший



Joined: 18 Mar 2011
Posts: 6
Карма: 0
   поощрить/наказать

Location: Россия

PostPosted: Thu Apr 21, 2011 4:23 pm (спустя 4 часа 39 минут; написано за 9 минут 39 секунд)
   Post subject:
Reply with quote

Права может редактировать администратор. Для редактирования не обязательно хранить данные в базе, в моем случае даже не нужно, потому что у меня количество страниц обновляется автоматом при добавлении нового модуля или при создании в добавленном модуле новой страницы. Для редактирования прав доступа конкретной группы я беру файл в котором лежит сериализованный объект Zend_Acl этой группы и на его основе строю страницу правки прав доступа. Она представляет собой форму с чекбоксами где можно проставив галочки (запретить, разрешить) легко отредактировать права группы. Далее на основе данных формы объект Zend_Acl пересобирается и пересохраняется в файл. Таким образом я так понял что все таки лучше сериализовать. Просто читал что десериализация больших объектов может занимать много времени. Вы пишите что можно хранить данные в памяти между сеансами, вы имеете в виду оперативку? Ни когда не слышал об этом, но если это возможно то это то что нужно.
Back to top
View user's profile Send private message
Миша Спларов
Участник форума



Joined: 17 Nov 2003
Posts: 821
Карма: 65
   поощрить/наказать

Location: Россия, Москва

PostPosted: Wed Apr 27, 2011 7:56 am (спустя 5 дней 15 часов 33 минуты; написано за 11 секунд)
   Post subject:
Reply with quote

frm
memcached.org/ например
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML