Как я могу расставить приоритеты, какой канал (из многих) обновить? - PullRequest
0 голосов
/ 30 марта 2009

Допустим, у меня есть 500 RSS-фидов, которые нужно постоянно обновлять, но я не хочу проверять все 500 каждую минуту. Какой подход или алгоритм может наилучшим образом определить, какие каналы следует обновить, а другие оставить на более позднее время?

Предположим, что я могу и буду сохранять исторические данные / статистику, и частота обновления меняется даже в пределах одного и того же канала.

Ответы [ 3 ]

1 голос
/ 30 марта 2009

Ну, вы частично ответили на свой вопрос сами.

Использовать существующую статистику для определения приоритетов каналов на основе частоты их обновления. Постоянно обновляйте статистику, чтобы она адаптировалась к изменениям частоты обновления.

0 голосов
/ 30 марта 2009

Если вы хотите, я высокого класса подход, вы можете работать так. Выберите вероятностную модель для каналов RSS, например, чтобы время между обновлениями соответствовало непрерывному распределению вероятностей, например экспоненциальное распределение . Для каждого канала RSS используйте метод максимальное правдоподобие для оценки параметров отдельных рассылок на основе истории обновлений этого канала. Теперь у вас есть вероятностная модель, которую вы можете использовать для расчета вероятности того, что какой-либо конкретный канал RSS будет иметь доступное обновление в любой конкретный момент времени. Всякий раз, когда у вас есть доступный временной интервал для проверки обновлений в одном потоке, выбирайте тот, в котором новые данные доступны с наибольшей вероятностью. Например, экспоненциальная вероятность не имеет памяти, что означает, что если вы проверяете канал на наличие обновлений, а его нет, вероятность того, что у него есть обновление, будет «сброшена» до 0% во время проверки, а затем будет расти вверх. оттуда, приоритеты других каналов в ближайшем будущем над этим.

0 голосов
/ 30 марта 2009

Вы описываете очень распространенную проблему приоритетного планирования . Есть много возможных подходов, но вот упрощенная версия.

  • Разработайте функцию приоритета , которая определяет, насколько важно обновить конкретный канал. (Например, если прошло совсем немного времени с тех пор, как был обновлен конкретный канал, и у него низкая историческая частота обновления, он, вероятно, будет иметь низкий приоритет.)
  • Затем поместите каналы в очередь приоритетов .
  • Если вам нужно больше работы, возьмите фид с наивысшим приоритетом из очереди.
  • Чтобы каждый получал возможность обновляться, периодически повышайте приоритет каналов, которые не обновлялись в течение некоторого времени.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...