Как хранить данные пользователя после входа в систему для быстрого доступа во время сеанса, после извлечения из базы данных? - PullRequest
1 голос
/ 25 декабря 2010

Я разрабатываю социальную сеть с нуля, и мне необходимо хранить часто необходимые данные пользователя, такие как его список друзей, группы, идентификаторы постов новостей, чтобы к ним можно было быстро получать доступ после каждого обновления, а не запрашивать базу данных каждый разспрашивается.Что может быть лучше для хранения этих данных?Ожидается, что приложение будет переносить большой трафик.

Я думал о сохранении этих данных в объектах php после входа пользователя.Я использую модель PHP OOP для взаимодействия с базой данных, таким образом, мои данные извлекаются, хотя объекты и извлеченные данные хранятся в объектах после запроса из базы данных.Таким образом, вместо уничтожения объекта, как только его значение будет передано один раз, я бы сохранил необходимые объекты до тех пор, пока пользователь не вошел в систему. Это правильный путь?

Я просто новичок ..

Спасибо ..

Ответы [ 2 ]

0 голосов
/ 25 декабря 2010

Сохранение в сеансе ... все данные, сохраненные в сеансе, загружаются в состоянии скрипта.Подводя итог:

  1. Только первоначальный владелец сеанса сможет получить доступ к данным
  2. Все данные сеанса загружаются до инициализации сценария.Он будет загружаться каждый раз, когда пользователь изменит страницу или вызовет AJAX.Я думаю, что это не совсем «быстрая» вещь.

Создайте себе простой класс кэширования:

  • $ cache = новый xcache ($ obj_name, $ expire);
  • get () -> возвращает значение объекта -> false, если не найдено / истекло
  • set ($ value) ->устанавливает значение объекта -> (сериализует его / вы можете сделать сжатие gzip здесь очень быстро)

Затем используйте эти макеты для записи механизма кэширования с помощью: memcache / myisam table / apc / mongodb и т. д. Вкл.все, кроме файлов, вы можете реализовать кэш ACID.Важно не выбирать то, что вы будете использовать сейчас, а реализовать что-то, что позволит вам легко изменить его позже:)

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

0 голосов
/ 25 декабря 2010

Я бы сохранял данные такого рода в сеансе в виде объектов (объект пользователя с именем, списком друзей и т. Д. ... свойствами).Но я не уверен, что это хорошая идея - хранить все эти данные по (как минимум) двум причинам:

  1. Если у вас много пользователей, вошедших в систему, все эти объекты хранятся всеансы складываются и могут довольно быстро заполнить вашу память

  2. Такие вещи, как списки друзей, группы и т. д. будут развиваться во время сеанса пользователя, поэтому, если вы просто загрузите их при входе в систему и неЕсли они не будут обновлены позже, они будут устаревшими (например, если пользователь добавит друга во время сеанса)

Лучшим решением будет общий постоянный кэш, чтобы объекты, которые былизагруженные один раз из БД не перезагружаются каждый раз, когда требуется.Такие механизмы существуют в средах постоянства, таких как Hibernate (Java / .Net), которых я не знаю о PHP.

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