Кэширование онлайн-цен производится через API, если они не меняются - PullRequest
1 голос
/ 17 ноября 2010

В настоящее время я работаю над сайтом, который делает несколько звонков таким известным онлайн-продавцам, как eBay и Amazon, чтобы узнать цены на определенные товары.Проблема в том, что в настоящее время для загрузки результатов требуется несколько секунд (насколько я могу судить, это время от совершения звонков), что я хотел бы сделать более мгновенным (на мой взгляд, ~ 10 секунд это слишком много)).

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

Я думал о том, чтобы каким-то образом использовать chron или что-то в этом духе для его обновления, но было бы неплохо, если бы существовал более простой иМенее интенсивный подход к этой проблеме.

Спасибо!

Ответы [ 4 ]

3 голосов
/ 17 ноября 2010

Вы можете использовать memcache для кэширования.Первый запрос будет медленным, но остальные запросы должны быть мгновенными.Вы будете хотеть работу cron, чтобы держать это в курсе все же.Подробнее о кешировании здесь: Хорошие примеры использования python-memcache (memcached) в Python?

2 голосов
/ 17 ноября 2010

В вашем приложении необходимо учитывать следующее:

  1. получить цену
  2. определить, изменилась ли цена
  3. кэшировать информацию о цене

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

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

Для шага 2, если этоновый элемент или, если цена изменилась, обновите информацию в своей системе кэширования.

Для шага 3 вам необходимо определить наилучшую систему кэширования для ваших нужд.Как и предполагали другие, memcached является возможным решением.Существует множество « NoSQL » баз данных, которые вы можете проверить или даже кэшировать результаты в MySQL.

2 голосов
/ 17 ноября 2010

Задумывались ли вы о том, чтобы отобразить кэшированные данные, а затем обновить цены с помощью обратного вызова ajax?Вы можете уведомить пользователя, если цена изменилась с панелью уведомлений типа SO или аналогичной.

Таким образом, пользователи сразу получают результаты и обновляют цены, когда они доступны.

Редактировать

Вы можете использовать jquery:

Предположим, у вас есть имена скриптов getPrices.php, которые возвращают массив json идентификатора элемента и его цену.

Здесь нет обработки ошибок и т. Д., Просто чтобы дать вам представление

 My necklace: <div id='1'> $123.50 </div><br>
 My bracelet: <div id='1'> $13.50 </div><br>
 ...

 <script>
 $(document).ready(function() {
   $.ajax({ url: "getPrices.php", context: document.body, success: function(data){
      for (var price in data)
      {
          $(price.id).html(price.price);
      }
    }}));
 </script>
0 голосов
/ 18 ноября 2010

Как вы получаете цену?Если вы удаляете данные с обычной HTML-страницы, используя такой инструмент, как BeautifulSoup, это может замедлить время прохождения туда-обратно.В этом случае это может помочь вычислить быструю контрольную сумму (такую ​​как MD5) со страницы, чтобы увидеть, изменилась ли она, перед ее анализом.Если вы используете API, который дает краткую XML-версию цены, это, вероятно, не проблема.

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