0

我需要实现一个磁盘支持的队列,它可以接受来自多个线程的实时分析数据,然后通过可能有故障的传输上传该数据。最初针对 Java,但从长远来看,我们需要在 Objective-C、Flash、JavaScript 中使用相同的机制。针对 android Java 和桌面。

这将包含在单个进程中,因此可能会出现 MQ 解决方案。性能是一个重要的考虑点,这意味着我们会牺牲一些可靠性来换取性能。

架构图

我很好奇两件事:

  1. 鉴于上述架构,是否有任何可用的技术可以完全或部分解决这个问题?
  2. 鉴于最终在不同平台上重新实现或理想地重新使用这种机制的目标,有没有办法以一种可以在 Objective-C 和 Android Java 中轻松使用的方式来构建它?
  3. 这个架构看起来怎么样?
4

1 回答 1

0

如果您想保留有限数量的数据(循环日志),并且能够为其保留固定数量的持久内存,那么最有效的解决方案是内存映射缓冲区。Persister 只是几个缓冲区的缓存,同时服务于分析队列和上传器。

在其他平台上重新实现它时,该平台可能没有映射工具。在这种情况下,可以直接读取和写入缓冲区。这可能比映射到内存效率低,但仍不低于其他解决方案(例如嵌入式数据库)。

至于架构,图片并不能反映从持久化器中读取数据的情况(否则需要持久化器做什么?)。那么,profiling queue实际上包含了整个数据(包括持久化的),而profiling queue就是内存中的buffers,它们可以不连续,所以叫buffer cache比queue更好。

于 2012-06-04T17:41:03.860 回答