繁体   English   中英

如何存储大型Java对象/多维数组?

[英]How to Store Large Java Objects/Multidimensional Arrays?

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

在后端,我必须处理一个大的int [] [] []数组,该数组保存CT扫描的信息。 大小约为 1024x1024x200。

我只想在需要处理诸如图像切片之类的新数据并将其存储在某种数据库中剩余时间时,才将该数组加载到内存中。

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

  • 使用JDBM3存储字符串int [] [] [] Hashmap会遇到内存不足错误

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

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

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

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

仅阵列就需要至少约800 Mb(1024 x 1024 x 200 x 32位)来播放。

我认为MemoryMappedFile就是为了处理这类事情而诞生的。 它为您提供了磁盘上文件的类似阵列的视图,并具有对读取和写入的随机访问权限。 您所要做的就是开发一个在byte[]上布置int[][][]的方案,这应该不成问题。 如果以这种方式进行操作,则无需将整个数组保存在内存中,而只需创建实际使用的切片。 即使您需要遍历所有片,也一次只能实例化一个片。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM