Реализация основанной на файле очереди

Я имею в ограниченной очереди памяти в который несколько объектов очереди потоков. Обычно очередь должна быть освобождена единственным потоком читателя, который обрабатывает объекты в очереди.

Однако существует возможность, что очередь переполнена. В таком случае я хотел бы сохранить любые дополнительные объекты на диске, который будет обработан другим потоком системной программы ввода фоновых заданий, который сканирует каталог для таких файлов и обрабатывает записи в файлах. Я знаком с Активным MQ, но предпочитаю больше решения для легкого веса. Хорошо, если "FIFO" строго не сопровождается (так как сохраненные записи могут быть обработаны не в порядке).

Есть ли там какие-либо решения с открытым исходным кодом? Я не нашел никого, но думал, что проверю с помощью ping-запросов этот список для предложений, прежде чем я начну реализацию сам.

Спасибо!

13
задан serverman 30 June 2010 в 23:01
поделиться

3 ответа

Вы можете использовать что-то вроде SQLLite для хранения объектов.

5
ответ дан 1 December 2019 в 23:47
поделиться

EHCache может переполняться на диск. Это также очень много одновременного, хотя вам это действительно не нужно

3
ответ дан 1 December 2019 в 23:47
поделиться

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

Изменить: Трудно ответить на ваш вопрос без дополнительного контекста.

Не могли бы вы пояснить, что вы имеете в виду под «нехваткой памяти»? Насколько велика очередь? Сколько у тебя памяти?

Используете ли вы встроенную систему с очень маленьким объемом памяти? Или у вас в очереди 2 ГБ или больше?

Если одно из них истинно, вы действительно должны использовать «заменяемую» структуру данных, такую ​​как BTree. Внедрение одного для одной очереди кажется излишним. Я бы просто использовал встроенную базу данных, такую ​​как SQL lite.

Если ни один из них не соответствует действительности, просто используйте вектор или связанный список.

Редактировать 2: Вам, вероятно, не понадобится BTree или база данных. Вы можете просто использовать связанный список страниц. Но опять же, Я должен спросить: необходимо ли это?

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

В конечном итоге, хотя я не думаю, что ваше предложение является способом идти.

1
ответ дан 1 December 2019 в 23:47
поделиться
Другие вопросы по тегам:

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