URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 10161
[ Назад ]

Исходное сообщение
"Подскажите, на чем сделать очередь?"

Отправлено universite , 24-Май-17 04:03 
Сейчас реализована через файл.
Добавляю элементы, дописывая в конец файла, каждый элемент с новой строки.
Беру N элементов очереди через awk и после обработки каждого єлемента удаляю через awk.

Хочется упростить свой велосипед, уменьшить IOPS.

Использовать Redis ? memcache ?


Содержание

Сообщения в этом обсуждении
"Подскажите, на чем сделать очередь?"
Отправлено f2404 , 24-Май-17 04:30 
> Сейчас реализована через файл.
> Добавляю элементы, дописывая в конец файла, каждый элемент с новой строки.
> Беру N элементов очереди через awk и после обработки каждого єлемента удаляю
> через awk.
> Хочется упростить свой велосипед, уменьшить IOPS.
> Использовать Redis ? memcache ?

Просто хранить файл в ОЗУ (tmpfs)?


"Подскажите, на чем сделать очередь?"
Отправлено ыы , 24-Май-17 09:12 
> Сейчас реализована через файл.
> Добавляю элементы, дописывая в конец файла, каждый элемент с новой строки.
> Беру N элементов очереди через awk и после обработки каждого єлемента удаляю
> через awk.
> Хочется упростить свой велосипед, уменьшить IOPS.
> Использовать Redis ? memcache ?

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


"Подскажите, на чем сделать очередь?"
Отправлено ыы , 24-Май-17 09:45 
>> Сейчас реализована через файл.
>> Добавляю элементы, дописывая в конец файла, каждый элемент с новой строки.
>> Беру N элементов очереди через awk и после обработки каждого єлемента удаляю
>> через awk.
>> Хочется упростить свой велосипед, уменьшить IOPS.
>> Использовать Redis ? memcache ?
> Упрощение велосипеда зависит области его применения. Следует определить что реально вам
> от него надо, из этого будет очевиден путь его упрощения.
> Вы же описали сам велосипед, без того зачем он нужен.

Поясню свою мысль:
самая простая очередь - это на перле массив.
push помещает в конец массива строку
shift- берет с начала массива строку и удаляет ее из массива.
делаете это в бесконечном цикле...

Эффективность - на порядки выше вашего решения. Применимость в вашем случае - под вопросом.

Или, если ваше приложение подвержено большим нагрузкам - пойти в поисковик и набрать "сервер очередей". Тот же Gearman к примеру. Промышленное решение рекомендованное лучшими блогописателями :)

Применимость его в вашем случае- под еще большим вопросом.


"Подскажите, на чем сделать очередь?"
Отправлено universite , 24-Май-17 10:44 

> Применимость его в вашем случае- под еще большим вопросом.

Спасибо.
Смотрю в сторону
A script for running processes in parallel in Bash - https://pebblesinthesand.wordpress.com/2008/05/22/a-srcipt-f.../

и

Simple job queue in Bash using a FIFO - https://blog.garage-coding.com/2016/02/05/bash-fifo-jobqueue...


"Подскажите, на чем сделать очередь?"
Отправлено universite , 25-Май-17 12:32 
И gearmand интересно.



"Подскажите, на чем сделать очередь?"
Отправлено PavelR , 25-Май-17 14:38 
> И gearmand интересно.

Есть еще beanstalkd, знакомые веб-разработчики почему-то на него ушли с gearmand.
Не знаю, насколько он интересен в сравнении с gearmand.


"Подскажите, на чем сделать очередь?"
Отправлено ACCA , 25-Май-17 22:56 
> Использовать Redis ? memcache ?

Ты бы ещё суперкомпьютер купил.

mkfifo queue
process1 > queue &
process2 < queue

4Mбайт буфер для твоих строк. Бонусом получаешь синхронизацию - если один процесс быстрее другого, то он будет притормаживать на I/O.


"Подскажите, на чем сделать очередь?"
Отправлено ыы , 26-Май-17 09:55 
> быстрее другого, то он будет притормаживать на I/O.

Это очень, очень плохой подход.


"Подскажите, на чем сделать очередь?"
Отправлено DeadLoco , 04-Июн-17 19:13 
> Это очень, очень плохой подход.

Чем же?



"Подскажите, на чем сделать очередь?"
Отправлено ACCA , 28-Июн-17 07:04 
>> Это очень, очень плохой подход.
> Чем же?

Тем, что притормаживает. Можно молча выбрасывать строки, которые не успели обработать.

Micro$oft way - Word именно так печатает документы, в которых обсчитался с нумерацией страниц.


"Подскажите, на чем сделать очередь?"
Отправлено DeadLoco , 01-Июл-17 14:53 
>>> Это очень, очень плохой подход.
>> Чем же?
> Тем, что притормаживает.

фейспалм.тхт

Ну, значит никсовые пайпы, на которых строятся конвейеры процессов, и которые существуют на свете дольше, чем вы - это "очень, очень плохой подход"?

Пионеры юные, головы чугунные (с)


"Подскажите, на чем сделать очередь?"
Отправлено Аноним , 03-Окт-17 16:42 
//Схватился за голову

Использовать /dev/head

Если вы любите файлы, то должны понимать, что ФС это на самом деле БД, и строчкой в ней является сам файл, а не строка в файле.

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

while true
do
  find tasks -type f |
    xargs -l -I{} sh worker.sh {} 2>&1 >>workers.log && rm -f {}
  sleep 1;
done

Как тут заметили, директорию можно смонтировать как тмпфс. Тогда вся жизнь будет происходить в памяти. Но при ребуте сервера вы будете терять данные. Если задания не критичные, то вперед. Я бы так делать не стал.

PS
Могу для вас похожие проблемы решать за небольшие биткоины.
Решение для удаления файлов кроме трех последних тоже мое.