Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 了解IgniteDataStreamer:排序和缓冲_Java_Ignite_Gridgain - Fatal编程技术网

Java 了解IgniteDataStreamer:排序和缓冲

Java 了解IgniteDataStreamer:排序和缓冲,java,ignite,gridgain,Java,Ignite,Gridgain,我正在使用IgniteDataStreamer和allowOverwrite加载连续数据 问题1。 从javadoc: 请注意,拖缆将通过多个内部线程并发地传输数据,因此数据可能会以添加到拖缆的不同顺序到达远程节点 在我的情况下,重新订购是不可接受的。perNodeParallelOperations设置为1是否能保证addData调用的顺序?有许多缓存同时加载IgniteDataStreamer,因此Ignite服务器节点线程都将被使用 问题2。 由于GC暂停,我的流媒体应用程序可能会挂起几秒

我正在使用
IgniteDataStreamer
allowOverwrite
加载连续数据

问题1。 从javadoc:

请注意,拖缆将通过多个内部线程并发地传输数据,因此数据可能会以添加到拖缆的不同顺序到达远程节点

在我的情况下,重新订购是不可接受的。
perNodeParallelOperations
设置为
1
是否能保证
addData
调用的顺序?有许多缓存同时加载
IgniteDataStreamer
,因此Ignite服务器节点线程都将被使用

问题2。 由于GC暂停,我的流媒体应用程序可能会挂起几秒钟。我希望避免缓存加载暂停,并保持较高的平均缓存写入速度。iy是否可以将
IgniteDataStreamer
配置为在服务器节点上保留传入批处理的(有界)队列,这些批处理将在流式处理(客户端)应用程序挂起时使用?请参见问题1,队列应按顺序使用。利用一些堆是可以的

问题3。
perNodeBufferSize
javadoc:

此设置控制将缓冲数据发送到远程节点之前每个节点内部缓冲区的大小


根据javadoc,数据传输是由
tryFlush
/
flush
/
autoFlush
触发的,那么它与
perNodeBufferSize
限制有何关联?如果有小于
perNodeBufferSize
的消息(我希望没有),是否会忽略flush?

我不建议尝试避免在
DataStreamer
中重新排序,但如果您确实需要这样做,您还需要在服务器节点上将数据流池大小设置为1。如果数据较大,则将数据拆分为条带,而不是按顺序发送

DataStreamer是为吞吐量而不是延迟而设计的。所以你在这里没什么可做的。可能是增加了
缓冲区大小


当任何条带达到perThreadBufferSize时,数据传输将自动启动。

我的输入是一个有序的实体流,可能有重复的键。我想将流的结果状态保持在Ignite中。看起来很常见。写操作的重新排序将导致随机缓存状态,这不是我想要的。将数据流池大小设置为1是否意味着所有缓存都将在单个线程中写入?如果是这样的话,它看起来总体上是缓慢的。如果我用顺序
putAll
调用加载缓存会怎么样?订单可以得到保证吗?您可以使用StreamReceiver解决冲突,这样“正确”的值将始终位于首位。PutAll应该可以,只要确保使用
TreeMap