2012-09-12 4 views
0

Например, у меня есть объект пользователя хранятся в базе данных (Redis) Он имеет несколько полей:Какой метод загрузки данных лучше всего подходит для работы?

  • строковыхник
  • Строкапароль
  • Строкаэлектронная почта
  • Списоксообщений
  • Списоккомментарии
  • Наборпоследователей
  • и так далее ...

В Python программе у меня есть класс (Пользователь) с теми же полями для этого объекта. Экземпляры этого класса сопоставляются с объектом в базе данных. Вопрос заключается в том, как получить данные из БД для достижения наилучшей производительности:

  1. Загрузить значения для каждого поля в экземпляре, создавая и инициализируя по нему поля.
  2. Значение поля загрузки каждый раз при запросе значения поля.
  3. Как второй, но после загрузки значения значения свойства поля загружаются загруженным значением.

p.s. redis работает в localhost

+1

Проверьте это самостоятельно!Используйте модуль 'time' python и выясните, сколько времени занимает каждая схема для типичной нагрузки. – japreiss

+0

Для разумной памяти записи более эффективно хранить ник, пароль и электронную почту внутри хэша вместо отдельных строк. – Mahn

ответ

2

Метод полностью зависит от требований.

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

Если несколько клиентов считывают данные и только один клиент изменяет данные, вам нужно подумать о том, какой уровень синхронизации вам нужен. Если вам нужна 100% синхронизация, вам придется извлекать данные из БД при каждом поиске значений.

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

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

Смежные вопросы