Kozack
@Kozack
Thinking about a11y

Как разбить массив на определённые доли?

Есть сервер, который принимает POST-запросты с записями. Сервер не знает сколько записей он уже принял и сколько предстоит принять за текущий сеанс. Как можно распределить все запросы на две части в равной степени?
В данный момент я использую случайные числа:
$portion = intval(get_option('portion')); // В каких долях делить запросы. В процентах
	if ($portion === 0 || rand(0, 100) > $portion ) {
		// Одна часть
	} else {
		// Вторая часть
	}

Но, возможно есть способ получше?
  • Вопрос задан
  • 252 просмотра
Пригласить эксперта
Ответы на вопрос 3
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Лучше - использовать для распределения нагрузки сервер очередей например rabbitmq.
Ответ написан
Комментировать
Stalker_RED
@Stalker_RED
Можно переключать при каждом запросе его состояние семафора, например.

Но если цель этого - распределение нагрузки, то возможно стоит посмотреть в сторону готовых решений
Балансировка нагрузки
Ответ написан
Комментировать
x67
@x67
Случайные числа хороши на больших выборках, на малых распределение может быть немного неожиданным. Используйте счетчик и делите на четные/нечетные запросы. При увеличении количества долей считайте остаток от деления текущего значения счетчика на количество долей. Если нужна балансировка нагрузки, то такие методы (в т.ч. ГПСЧ) хороши при примерно равных по сложности запросах. Если запросы могут быть разной сложности, оценивайте по состоянию долей или по параметрам запроса. Почему не стоит использовать ГПСЧ, так потому что в пределе вы тратите энергию на генерацию случайных чисел, которые по сути то и не нужны.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы