0

我正在编写一个在 Tomcat 服务器和 JavaScript 客户端上运行的 Java 后端的 Web 应用程序。

在后端,我必须处理一个大型 int[][][] 数组,其中包含 CT 扫描的信息。大小约为。1024x1024x200。

我只想在需要处理图像切片等新数据时将此数组加载到内存中,并将其存储在某种数据库中以供剩余时间使用。

到目前为止我尝试过的事情:

  • 使用JDBM3存储String,int[][][] Hashmap,遇到内存不足错误

  • 序列化对象并使用 bytea[] 数据类型将其保存到 PostgreSQL-DB 中,正确存储但再次加载时出现内存错误。

所以我的第一个问题是,我怎样才能保存这么大的数组(哪个数据库,方法)?它应该快速加载,并且应该有某种多用户访问安全性,因为多个用户将能够使用前端,因此将 int[][][] 加载到后端。该数据库应具有非商业许可证,例如。GPL、麻省理工学院、阿帕奇...

第二个问题,我知道我可以将序列化的数组保存在文件系统中并将链接保留在数据库中,但是多个用户的访问是否安全?

4

3 回答 3

2

如果客户端计算机上有足够的 RAM,则可以从简单地增加 JVM 堆的大小开始。这样,您应该能够创建更大的数组而不会遇到“内存不足”错误。

至少需要大约 800 Mb 才能使用(1024 x 1024 x 200 x 32 位)阵列。

于 2012-05-29T19:38:33.267 回答
1

我认为 aMemoryMappedFile生来就是为了处理这样的事情。它为您提供磁盘上文件的类似数组的视图,具有随机读写访问权限。您所要做的就是制定一个计划,制定一个int[][][]超过 a的方案,byte[]这不应该是一个问题。如果您这样做,您将永远不必将整个数组保存在内存中,而只需创建您实际使用的切片。即使您需要遍历所有切片,一次也只能实例化一个切片。

于 2012-05-29T20:17:27.867 回答
0

如果是 CAT 扫描,像素是 256 色灰度吗?如果是这样,您可以通过将数据存储为字节数组而不是 int 数组来节省大量内存。如果是 64K 灰度,请使用 short 而不是 int。

于 2012-05-29T19:44:12.433 回答