На данный момент удачно пользуюсь очередью redis, её производительность полностью устраивает. Но не хватает поиска.
Опишу задачу чтобы было понятнее. Есть активная очередь с постоянным заполнением ~10 000 записей. Каждая запись это объект с 9 полями/свойствами. Записи поступают в правую часть очереди, а с левой вынимаются. При этом периодически нужно находить в очереди приоритетные записи и вынимать их, как бы пропуская вперед. Критерии приоритета таких записей изменчивы, поэтому сразу говорю, нельзя заранее их поместить в отдельную очередь, нужно именно выбирать из общей. Кроме того вынимать по критериям нужно лишь элемент который наиболее левее (т.е. ближе к естественному наступлению своей очереди на извлечение)
rPman, очередью рулю я. "появилась необходимость - удаляешь задачу из обычной, помещаешь в приоритетную" - для этого нужно сначала найти эту задачу в очереди, то есть перебрать всю очередь. вы другими словами тотже поиск описали, т.е. ту же проблему которая есть сейчас.
ну так меняй способ хранения очереди чтобы искать не пришлось!
ищи реализацию для твоего языка ordered map (на php или java массивы и объекты уже таковы), тогда и порядок будет и индекс по ключу, туда складывай идентификатор задачи
rPman, мне кажется ты не понимаешь ситуацию. ordered список не подойдет. нужно готовое решение, какая-нибудь производительная субд in memory с поддержкой sql или типа того
назови главный критерий, почему тебе нужно стороннее решение, я знаю что обычно сложно реализовать самому но ты не назвал ни одного требования кроме 10к записей, ни объема запросов в очереди ничего...
expressrus, в заданный момент, при обработке, необходимо найти все эти приоритетные задачи в очереди, т.е. они что-то типа пузырьков воды, которые поднимаются на поверхность?
То что было в очереди должно сохраняться ? Вроде 10000 записей - это не очень много и можно в памяти держать. Банально написать свою реализацию кольцевого буфера. При этом вынимаемый из середины элемент не удалять, а пометить как прочитанный, что бы когда до него дойдёт указатель конца, он его тупо пропустил.