Я имею в ограниченной очереди памяти в который несколько объектов очереди потоков. Обычно очередь должна быть освобождена единственным потоком читателя, который обрабатывает объекты в очереди.
Однако существует возможность, что очередь переполнена. В таком случае я хотел бы сохранить любые дополнительные объекты на диске, который будет обработан другим потоком системной программы ввода фоновых заданий, который сканирует каталог для таких файлов и обрабатывает записи в файлах. Я знаком с Активным MQ, но предпочитаю больше решения для легкого веса. Хорошо, если "FIFO" строго не сопровождается (так как сохраненные записи могут быть обработаны не в порядке).
Есть ли там какие-либо решения с открытым исходным кодом? Я не нашел никого, но думал, что проверю с помощью ping-запросов этот список для предложений, прежде чем я начну реализацию сам.
Спасибо!
Вы можете использовать что-то вроде SQLLite для хранения объектов.
EHCache может переполняться на диск. Это также очень много одновременного, хотя вам это действительно не нужно
Почему очередь ограничена? Почему бы не использовать динамически расширяемую структуру данных? Это кажется намного проще, чем задействовать диск.
Изменить: Трудно ответить на ваш вопрос без дополнительного контекста.
Не могли бы вы пояснить, что вы имеете в виду под «нехваткой памяти»? Насколько велика очередь? Сколько у тебя памяти?
Используете ли вы встроенную систему с очень маленьким объемом памяти? Или у вас в очереди 2 ГБ или больше?
Если одно из них истинно, вы действительно должны использовать «заменяемую» структуру данных, такую как BTree. Внедрение одного для одной очереди кажется излишним. Я бы просто использовал встроенную базу данных, такую как SQL lite.
Если ни один из них не соответствует действительности, просто используйте вектор или связанный список.
Редактировать 2: Вам, вероятно, не понадобится BTree или база данных. Вы можете просто использовать связанный список страниц. Но опять же, Я должен спросить: необходимо ли это?
Или, если вы хотите обрабатывать вещи непоследовательно, почему бы не иметь постоянно несколько потоков чтения?
В конечном итоге, хотя я не думаю, что ваше предложение является способом идти.