我正在使用Chronicle Queue(CQ)设置市场数据回测,从二进制文件读取数据,然后写入单个CQ,同时从该CQ读取数据并转储统计信息。我正在做一个POC,以替换我们现有的实时市场数据供稿处理程序工作人员队列。 在Linux / SSD设置上进行基本的读/写测试时,我看到读落后于写-实际上,延迟正在累积。 Appender和Tailer都在同一主机上作为单独的进程运行。
我想知道我正在使用的代码中是否存在任何问题?
下面是代码段-
作家- 在构造器中-
myQueue = SingleChronicleQueueBuilder.binary(queueName).build();
myAppender = myQueue.acquireAppender();
在数据回调中-
myAppender.writeDocument(myDataPacket);
myQueue.close();
其中myDataPacket是Java对象,它包装了byte []和其他字段。
尾巴- 在构造函数中-
myQueue = SingleChronicleQueueBuilder.binary(queueName).build();
myTailer = myQueue.createTailer();
在“读取”方法中-
while (notLastRecord)
{
if(myTailer.readDocument(myDataPacket))
{
notLastRecord = ;
//do stuff
}
}
myQueue.close();
我们非常感谢您的帮助。
谢谢, 帕万
答案 0 :(得分:0)
首先,我以“读取落后于写入-实际上延迟在累积”来表示,对于每个后续消息,从队列中读取消息的时间与事件被写入的时间相距甚远队列。
如果您看到这样积累的延迟,很可能会更快地产生数据,那么您就可以使用它,这在您描述的用例中很有可能-如果在写端您需要的只是解析简单的文本行,将其转储到队列文件中,速度很快,但是如果您从队列中读取条目时进行了一些处理-可能会更慢。
从代码中尚不清楚您的代码正在做什么/有多少工作,并且代码对我来说看起来还可以,除了您可能不应该在每次appender.writeDocument()调用之后调用queue.close(),但很可能您没有这样做,否则会炸毁。
没有看到实际的代码或测试用例,就不可能说更多。