кеширование в памяти на сервере - PullRequest
5 голосов
/ 19 марта 2010

Я хочу написать веб-приложение с клиентским Javascript и внутренним сервером (Python). Клиенту часто нужны данные с сервера AJAX. Данные в БД и дорогие для загрузки для каждого запроса.

Однако в настольном приложении я бы просто загружал данные из БД в память и затем получал к ней доступ. В веб-приложении - серверный код запускается каждый раз для запроса, поэтому я не могу этого сделать (каждый запуск должен снова загружаться из БД в память). Как это может работать? Может ли один процесс выполняться на сервере или мне нужно использовать что-то другое здесь?

Пример похож на автозаполнение здесь для stackoverflow для тегов - как это реализовано на сервере для быстрого кэширования / загрузки?


Интересно, является ли хранилище данных, такое как memcached, действительно хорошим подходом для автозаполнения? Как бы вы представили ключи для частичных совпадений?

Ответы [ 5 ]

6 голосов
/ 25 марта 2010

Используйте memcache или аналогичный инструмент

Каждый элемент в кеше имеет ключ, дату и время истечения срока действия

Вам нужно сделать ключ полезным для вашего приложения. Типичная модель ключа - это Security.Domain.Query.QueryValue для наборов или Security.Domain.ID для отдельных объектов

, например

ALL.Product.Q.Red - это набор из домена Продукты , использующий запрос Красный для всех пользователей

Admin.Product.Q.Blu - это набор из домена Products , использующий запрос Blu только для Admin пользователей

ALL.Customer.O.12345 - это один объектный граф из Customer ID домена 12345 для всех пользователей

При необходимости вы также можете добавить форматы к ключу.

Таким образом, когда ваше веб-приложение отправляет запрос на данные для поля автозаполнения, веб-служба, обрабатывающая вызов, сначала запрашивает данные из memcache, а если не найден или не истек, то только потом выполняет дорогой запрос к базе данных

например. Автозаполнение для поиска товаров

  1. Запрос: http://server.com/product?q=gre&format=json
  2. Сервер генерирует ключ memcache ALL.Product.Name.gre.json
  3. Сбой запроса Memcache
  4. Генерация SQL-запроса Выбор идентификатора, имени, цены из продукта, где имя подобно 'gre%'
  5. Форматировать результат в Json
  6. Сохранить результат в memcache
  7. Вернуть результат в браузер

и в следующий раз

  1. Запрос: http://server.com/product?q=gre&format=json
  2. Сервер генерирует ключ memcache ALL.Product.Name.gre.json
  3. Запрос Memcache успешно выполняется
  4. Вернуть результат в браузер

Секрет заключается в том, что модель ключа работает для всех случаев использования memcache и не генерирует дубликаты ключей для различных задач. Не забудьте закодировать разделители в параметрах запроса (в примере «.»)

0 голосов
/ 24 марта 2010

Попробуйте Redis (http://code.google.com/p/redis/)

Скопировано прямо из описания:

Redis - это расширенное хранилище ключей. Он похож на memcached, но набор данных не является изменчивым, и значения могут быть строками, точно так же, как в memcached, но также списки, наборы и упорядоченные наборы. Все эти типы данных можно манипулировать атомарными операциями для добавления / удаления элементов, добавления / удаления элементов, выполнения объединения на стороне сервера, пересечения, различия между наборами и так далее. Redis поддерживает различные виды сортировки.

Также Redis работает довольно быстро !, 110000 SET / секунду, 81000 GET / секунду в Linux начального уровня.

0 голосов
/ 19 марта 2010

Я бы использовал хранилище значений ключей на сервере, как, например, memcache (есть и другие). Чтобы вам не приходилось извлекать одни и те же данные более одного раза (до истечения срока их действия). Поразительно быстрое и довольно распространенное решение (Facebook среди других использует memcache).

0 голосов
/ 24 марта 2010

Вы можете смотреть на другие серверы как на витые, где вы настраиваете сервер, а сервер хранит данные в памяти. Например, если у вас есть данные чата, которые не нужно хранить в течение неопределенного времени, а просто хранят в памяти до тех пор, пока кто-то заинтересован в новых чатах. Сервер типа витой позволяет сохранять данные в памяти так же, как в настольном приложении. http://twistedmatrix.com/ - сайт закрыт.

0 голосов
/ 19 марта 2010

Посмотрите на memcached.

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