Страница сервера на основе веса - PullRequest
0 голосов
/ 17 февраля 2011

Предположим, у нас есть следующие страницы и их удельный вес:

Page1    50%
Page2    20%
Page3    15%
Page4    15%

Какая будет простая формула для обслуживания страниц в зависимости от их веса?Я использую Ruby.

Вот как я думаю.

actual_pct = Weightage 
tot_hits = Total hits against the URL
served_pct = Served percentage for each page based on tot_hits
served_to_actual_pct  = served_pct x 100 / actual_pct

Выше приведен массив страниц с их served_to_actual_pct.Предположим, что я буду обслуживать страницы на основе их create timestamp, когда ни одна страница еще не обслуживается или несколько страниц имеют одинаковые served_to_actual_pct.

На основании этого предположения я могу отсортировать этот массив по create timestamp а затем на served_to_actual_pct.На этом этапе первой страницей в массиве будет страница, которая будет обслуживаться.

Ответы [ 2 ]

2 голосов
/ 18 февраля 2011

Вам нужен взвешенный образец:

class Hash
  def weighted_sample
    target = rand * self.values.reduce(:+)
    key, weight = self.detect{ |key, weight| target -= weight; target < 0 }
    return key
  end
end

Добавьте столько страниц, сколько вы хотите, в качестве ключей хэша с их весами в качестве значения.Затем позвоните your_hash.weighted_sample.Ключи с более высокими значениями будут появляться чаще.

1 голос
/ 17 февраля 2011

Используйте что-то подобное в вашем контроллере

random = rand
if random < 0.5
  render 'view_1'
elsif random < 0.7
  render 'view_2'
elsif random < 0.85
  render 'view_3'
else
  render 'view_4'
end

rand возвращает случайное число с плавающей запятой между 0 и 1. Используемое ветвление if / else обеспечивает вероятность 50%, 20%, 15% и 15% для четырех просмотров страницы.

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