我需要实现一个磁盘支持的队列,该队列可以接受来自多个线程的实时分析数据,然后通过可能有故障的传输上传该数据。最初针对Java但是长期我们需要在Objective-C,Flash,JavaScript中使用相同的机制。针对Android Java和桌面。
这将包含在单个进程中,因此MQ解决方案可能已经解决。性能是一个重要的考虑因素,这意味着我们会为性能交换一些可靠性。
我很好奇两件事:
答案 0 :(得分:0)
如果您想保留有限数量的数据(循环日志),并且能够为其保留固定数量的持久性内存,那么最有效的解决方案是memory-mapped buffers。 Persister只是几个缓冲区的缓存,同时为分析队列和上传器提供服务。
当在其他平台上重新实现它时,平台可能没有映射工具。在这种情况下,可以直接读取和写入缓冲区。这可能比映射到内存效率低,但效率仍然低于其他解决方案(例如嵌入式数据库)。
对于体系结构,图片不反映从persister读取数据的情况(或者需要什么样的persister?)。然后,分析队列实际上包含整个数据(包括持久性),并且命名为分析队列的是主内存中的缓冲区,它们可能不是连续的,因此更好的名称是缓冲区缓存而不是队列。