Я хочу записать веб-приложение с клиентом JavaScript и сервер бэкэнда (Python). Клиенту нужны данные из сервера часто в Ajax путь. Данные в DB, и дорогой для загрузки для каждого запроса.
Однако в настольном приложении я просто загрузил бы данные из DB однажды к памяти и затем получил бы доступ к нему. В веб-приложении - серверный код работает каждый раз за запросом, таким образом, я не могу сделать этого (каждое выполнение должно загрузиться от DB до памяти снова). Как это может работать? Сингл может обработать работавший сервер, или я должен использовать что-то другое здесь?
Пример похож на автоматическое заполнение здесь на stackoverflow для тегов - как это реализовано в сервере для быстрого кэширования/загрузки?
Интересно, является ли хранилище данных как memcached действительно хорошим подходом для автоматического заполнения? Как Вы представили бы ключи для частичных соответствий?
Используйте кэш памяти или аналогичный инструмент
Каждый элемент в кеше имеет ключ, дату и время истечения срока действия
Вам необходимо сделать ключ полезным для вашего приложения. Типичный образец модели ключа - это Security.Domain.Query.QueryValue для наборов или Security.Domain.ID для отдельных объектов
, например.
ALL.Product.Q.Red - это набор из домена Products с использованием запроса Red для всех пользователей
Admin. Product.Q.Blu - это набор из домена Products с использованием запроса Blu только для пользователей Admin
ALL.Customer.O. 12345 - это граф одного объекта из Customer ID домена 12345 для всех пользователей
При необходимости вы также можете добавить форматы к ключу.
Так как ваше веб-приложение запрашивает данные для окна автозаполнения, веб-служба, обрабатывающая вызов, сначала запрашивает данные из кэша памяти, и, если они не найдены или срок их действия истек, она только затем выполняет дорогостоящий запрос к базе данных
например Автозаполнение для поиска продуктов
и в следующий раз
Секрет заключается в ключевой модели , которая работает для всех случаев использования memcache и не генерирует повторяющиеся ключи для различных задач. Не забудьте кодировать разделители в параметрах запроса (в примере ".")
Я бы использовал хранилище ключей и значений на сервер, например memcache (есть и другие). Чтобы вам не приходилось получать одни и те же данные более одного раза (до истечения срока их действия). Невероятно быстрое и довольно распространенное решение (например, Facebook использует кэш памяти).
Вы можете посмотреть на другие серверы, такие как twisted, где вы настраиваете сервер, а сервер хранит данные в памяти. Если, например, у вас есть данные чата, которые не нужно сохранять бесконечно, а просто хранить в памяти, пока кто-то заинтересован в новых чатах. Сервер, такой как twisted, позволяет сохранять вещи в памяти так же, как и в настольном приложении. http://twistedmatrix.com/ - сайт сейчас не работает.
Попробуйте Redis ( http://code.google.com/p/redis/ )
Скопировано непосредственно из описания:
Redis - это расширенное хранилище ключей и значений. Он похож на memcached, но набор данных не является изменчивым, а значения могут быть строками, как в memcached, но также списками, наборами и упорядоченными наборами. Всеми этими типами данных можно манипулировать с помощью атомарных операций для вставки / извлечения элементов, добавления / удаления элементов, выполнения объединения на стороне сервера, пересечения, разницы между наборами и т. Д. Redis поддерживает различные возможности сортировки.
Кроме того, Redis довольно быстр !, 110000 SET / сек, 81000 GET / сек в Linux начального уровня.