【发布时间】:2012-12-22 11:17:01
【问题描述】:
我们想构建一个网络服务来返回一些图像(如谷歌地图图块)。
源数据被组织成esricompact cache format,我们服务的关键是从bundle中读取tiles。
我不知道如何选择平台,windows 或 linux?
据说linux的IO读写性能比windows更好。
但是如果我们选择linux,java是我们唯一的选择,所以我想知道有没有我们应该知道的点来提高linux中的IO读取性能?
PS:
在winodws平台,我们将使用c#基于.net4构建服务,并使用iis部署服务。
在linux中,我们将使用java构建服务(可能基于spring mvc或其他一些mvc框架),并使用tomcat部署服务。
更新:
我们可能有以下不同折叠的源压缩文件:
L1
RxxCxx.bundle
RxxCxx.bundlx
L2
RxxCxx.bundle
RxxCxx.bundlx
来自客户端的请求可能如下所示:
http://ourserver/maptile?row=123&col=234&level=1.png
对于这个请求,我们将进入折叠L1,因为级别是1,然后首先读取RxxCxx.bundlx文件,因为这个文件是直到告诉我们位置的元数据(偏移量和RxxCxx.bundle) 中渲染图像的数据的长度(row=123&col=234),然后我们将根据偏移量和长度读取RxxCxx.bundle。然后我们通过将数据写入响应并将内容类型设置为“image/png”或其他内容来将数据呈现为图像。
这是处理请求的整个过程。
那我想知道是否有任何文档或演示可以告诉我如何处理这些类型的 IO 读取?
【问题讨论】:
-
捆绑实际上可能是一个糟糕的选择,因为至少需要两次读取才能获取一个对象(一次用于 TOC,一次用于对象)每个文件有一个对象可能会花费一些磁盘空间,但会减少缓冲区占用。 Linux 的磁盘缓冲以及 inode 和目录缓存可以轻松处理数以千计的小文件,所有文件都驻留在磁盘缓冲区中。可能需要将目录的大小限制在一百个以内(例如,通过使用对象名称/编号的前几个字母作为子目录名称)