Java 将1 MB字节数组存储为会话属性

Java 将1 MB字节数组存储为会话属性,java,session,httpsession,Java,Session,Httpsession,我正在运行一个Java web应用程序 用户上载一个文件(最大1MB),我希望存储该文件,直到用户完成整个过程(包括多个请求) 在用户完成整个过程之前,是否可以将文件作为字节数组存储在会话中?或者这在资源使用方面是昂贵的 我这样做的原因是,我最终将文件存储在一个外部服务器(如aws s3)上,但我只想在整个过程完成后将其发送到该服务器 另一种选择是将文件写入服务器上的临时文件。但是,这意味着我需要删除该文件,以防用户退出网站。但是,在我的SessionListener中向SessionDestr

我正在运行一个Java web应用程序

用户上载一个文件(最大1MB),我希望存储该文件,直到用户完成整个过程(包括多个请求)


在用户完成整个过程之前,是否可以将文件作为字节数组存储在会话中?或者这在资源使用方面是昂贵的

我这样做的原因是,我最终将文件存储在一个外部服务器(如aws s3)上,但我只想在整个过程完成后将其发送到该服务器

另一种选择是将文件写入服务器上的临时文件。但是,这意味着我需要删除该文件,以防用户退出网站。但是,在我的
SessionListener
中向
SessionDestroyed
方法添加代码似乎太过分了,如果只是针对这一特定情况(即:会话是在整个应用程序中创建的,我不需要检查临时文件)

谢谢。

也许是,也许不是 当然,如果符合您的部署约束,那么在会话中将此类数据存储在内存中是合理的

请记住,每个用户都有自己的会话。因此,如果您的所有用户的内存中都有这样一个文件,那么您必须乘以以计算对内存使用的大致影响

如果您在运行时超过了可用的数量,那么将产生后果。您的会话对存储的使用可能会减少,如果您没有将所有对象编程为支持序列化,这将是一个问题。作为系统的一部分,和操作系统可以使用交换文件将内容移出实际内存。这种交换可能会影响甚至削弱性能

您必须考虑运行时部署约束,而这是您没有公开的。您是在Raspberry Pi上运行还是在内存很少的廉价小型云服务器上运行?或者,您将在一个具有半个RAM的企业级服务器上运行?你有3个用户,300个还是30000个?您需要计算这些数字并确定您的需求,也许还需要进行一些运行时评测以查看实际使用情况

例如,我使用编写web应用程序,这是一个复杂的软件包,用于在web浏览器中创建桌面风格的应用程序。基于此,Vaadin在Servlet会话的服务器端维护每个用户全部工作数据的完整表示。乘以用户数量,并根据应用程序的复杂性,这可能需要大量内存。因此,我需要考虑这一点,并在足够的硬件上运行我的服务器,并将Java调优为使用大量内存运行。或者采用其他方法,例如跨多个服务器使用

幸运的是,RAM现在相当便宜。64位硬件和64位操作系统以及64位JVM实现(,)的大量物理支持都是现成的。

可能是,可能不是 当然,如果符合您的部署约束,那么在会话中将此类数据存储在内存中是合理的

请记住,每个用户都有自己的会话。因此,如果您的所有用户的内存中都有这样一个文件,那么您必须乘以以计算对内存使用的大致影响

如果您在运行时超过了可用的数量,那么将产生后果。您的会话对存储的使用可能会减少,如果您没有将所有对象编程为支持序列化,这将是一个问题。作为系统的一部分,和操作系统可以使用交换文件将内容移出实际内存。这种交换可能会影响甚至削弱性能

您必须考虑运行时部署约束,而这是您没有公开的。您是在Raspberry Pi上运行还是在内存很少的廉价小型云服务器上运行?或者,您将在一个具有半个RAM的企业级服务器上运行?你有3个用户,300个还是30000个?您需要计算这些数字并确定您的需求,也许还需要进行一些运行时评测以查看实际使用情况

例如,我使用编写web应用程序,这是一个复杂的软件包,用于在web浏览器中创建桌面风格的应用程序。基于此,Vaadin在Servlet会话的服务器端维护每个用户全部工作数据的完整表示。乘以用户数量,并根据应用程序的复杂性,这可能需要大量内存。因此,我需要考虑这一点,并在足够的硬件上运行我的服务器,并将Java调优为使用大量内存运行。或者采用其他方法,例如跨多个服务器使用


幸运的是,RAM现在相当便宜。并且具有大量物理支持的64位硬件、64位操作系统和64位JVM实现(,)都是现成的。

“或者这在使用资源方面很昂贵吗?”它需要大约1MB的内存资源。这里的实际问题是什么?是否可以在内存中存储1MB?@Kayaman这对web应用程序合适吗?还是有更好的方法解决这个问题?只有你能回答这个问题。我甚至不知道你有多少记忆体。是的,我想知道这是否是解决我描述的问题的合理方法。或者,如果在会话中存储这么多内存是一种不好的做法。“或者就所用资源而言,这样做很昂贵吗?”它需要大约1MB的内存资源。这里的实际问题是什么?是否可以在内存中存储1MB?@Kayaman这对web应用程序合适吗?还是有更好的方法解决这个问题?只有你能回答这个问题。我甚至不知道你有多少记忆体。是的,我想知道这是否是解决我描述的问题的合理方法。或者如果在会话中存储这么多内存是不好的做法。只是好奇,您使用哪种PAAS?我正在考虑将Jelastic与Vaadin一起使用。@Mathomatic我在科罗拉多州的Mac微型计算机上的macOS上部署了Vaadin应用程序,结果证明非常可靠。目前我正在探索DigitalCloud.com的使用