Самый быстрый механизм большой очереди для чтения / записи - PullRequest
1 голос
/ 21 марта 2012

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

Я думаю о чем-то вроде этого:

Получение нескольких запросов, содержащих цифры 0-4 (порядок не имеет значения)

Queue[10]: [ 0 1 2 3 4 _ _ _ _ _ ] 

Очередь также записывается в файл (f0) одновременно с отправкой в ​​очередь. Причина в том, что в случае сбоев я не теряю данные.

Пока я читаю по порядку (0, 1, 2), публикуется больше номеров:

Queue[10]: [ _ _ _ 3 4 5 6 7 _ _ ] 

На данный момент мой файл f0 содержит (0-7), и я также сохранил последнюю прочитанную позицию.

Если я продолжаю писать, и текущая очередь заполняется, следующие 10 записей будут идти непосредственно в файл f1. Следующие 10 перейдут в f2 и так далее. Когда чтение завершит чтение, все записи из очереди f1 будут загружены в очередь, и чтение продолжится. F0 будет удален. Когда мои чтения догонят записи, текущий файл будет считан в очередь и продолжится с этого момента.

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

Однако я бы предпочел использовать существующую библиотеку, если есть такая, которая делает то, что мне нужно.

Любая помощь будет принята с благодарностью.

Sebi

1 Ответ

8 голосов
/ 21 марта 2012

У меня есть библиотека, которая поддерживает постоянную очередь, которая может поддерживать 5 - 20 миллионов энтит в секунду, и может иметь количество энтитей между одним производителем и несколькими потребителями (они даже не должны работать одновременно ) Он не несет никаких накладных расходов.

https://github.com/peter-lawrey/Java-Chronicle

Для библиотеки требуется 64-битная JVM, если вам нужна большая масштабируемость, и она ограничена объемом дискового пространства, которое у вас есть.

Библиотека предполагает, что вы будете циклически использовать файлы, используемые в качестве задачи обслуживания. Это требует наличия достаточного дискового пространства для покрытия периода между окнами обслуживания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...