用于读/写的最快的大型队列机制

sfe*_*her 1 java queue performance

我需要一个按顺序写入的系统,非常快速地写入同步的持久队列并从中快速读取.队列可能会飙升并增长到数亿,在某些日子可能会有数十亿条目,之后可能需要数天来追赶,这很好.

我在考虑这样的事情:

接收包含数字0-4的多个请求(顺序无关紧要)

Queue[10]: [ 0 1 2 3 4 _ _ _ _ _ ] 
Run Code Online (Sandbox Code Playgroud)

队列也写入文件(f0),同时提交给队列.这样做的原因是在失败的情况下我不会丢失数据.

当我按顺序(0,1,2)读它时,会发布更多数字:

Queue[10]: [ _ _ _ 3 4 5 6 7 _ _ ] 
Run Code Online (Sandbox Code Playgroud)

此时我的文件f0包含(0-7)并且我还保持最后一个位置读取.

如果我继续写入并且当前队列已满,则接下来的10次写入直接进入文件f1.接下来的10个将进入f2,依此类推.当读数完成读取时,队列f1中的所有条目将被加载到队列中并且读取将继续.f0将被删除.当我的读取赶上写入时,当前文件将被读入队列并将从该点继续.

我可以通过使用主/辅助缓冲区提供更好的实现.

但是,如果有一个可以满足我需要的库,我宁愿使用现有的库.

任何帮助将不胜感激.

SEBI

Pet*_*rey 8

我有一个库,它支持一个持久的队列,每秒可以支持5到2千万个entires,并且可以在单个生产者和多个消费者之间拥有多个entires(他们甚至不必同时运行)它没有不承担任何GC开销.

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

如果您想要更高的可伸缩性并且它受到您拥有的磁盘空间量的限制,那么该库需要64位JVM.

该库假定您将循环用作维护任务的文件.这要求您有足够的磁盘空间来覆盖维护窗口之间的时间段.