The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  правила/FAQ  поиск  регистрация  вход/выход  слежка  RSS
"Подскажите, на чем сделать очередь?"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"Подскажите, на чем сделать очередь?"  –2 +/
Сообщение от universite (ok) on 24-Май-17, 04:03 
Сейчас реализована через файл.
Добавляю элементы, дописывая в конец файла, каждый элемент с новой строки.
Беру N элементов очереди через awk и после обработки каждого єлемента удаляю через awk.

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

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

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


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

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

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

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

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

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

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

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Подскажите, на чем сделать очередь?"  –1 +/
Сообщение от universite (ok) on 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...

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "Подскажите, на чем сделать очередь?"  +/
Сообщение от universite (ok) on 25-Май-17, 12:32 
И gearmand интересно.


Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "Подскажите, на чем сделать очередь?"  +/
Сообщение от PavelR (??) on 25-Май-17, 14:38 
> И gearmand интересно.

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

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "Подскажите, на чем сделать очередь?"  +/
Сообщение от ACCA (ok) on 25-Май-17, 22:56 
> Использовать Redis ? memcache ?

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

mkfifo queue
process1 > queue &
process2 < queue

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

9. "Подскажите, на чем сделать очередь?"  +/
Сообщение от DeadLoco (ok) on 04-Июн-17, 19:13 
> Это очень, очень плохой подход.

Чем же?


Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

10. "Подскажите, на чем сделать очередь?"  +/
Сообщение от ACCA (ok) on 28-Июн-17, 07:04 
>> Это очень, очень плохой подход.
> Чем же?

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

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

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

11. "Подскажите, на чем сделать очередь?"  +/
Сообщение от DeadLoco (ok) on 01-Июл-17, 14:53 
>>> Это очень, очень плохой подход.
>> Чем же?
> Тем, что притормаживает.

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

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

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

Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

12. "Подскажите, на чем сделать очередь?"  +/
Сообщение от Аноним (??) on 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
Могу для вас похожие проблемы решать за небольшие биткоины.
Решение для удаления файлов кроме трех последних тоже мое.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру