Java 将数据保存在数据库或会话中

Java 将数据保存在数据库或会话中,java,php,mysql,optimization,Java,Php,Mysql,Optimization,我正在做一个web项目的早期阶段,该项目需要使用包含大约500个自定义对象类型元素的数组。对象可能包含10到40个字段(基于用户输入),大部分是布尔值、字符串和浮点值。我将在这个项目中使用PHP,但我也有兴趣知道如何在Java中处理这个问题 我知道“过早优化是万恶之源”,但我想我现在需要决定,如何处理这些阵列。我是将它们保存在会话对象中,还是将它们存储在数据库(mySQL)中,并在会话中保留最少数量的密钥。将数据保留在会话中会使应用程序工作得更快,但当访问者数量开始增长时,我会冒着占用太多内存的

我正在做一个web项目的早期阶段,该项目需要使用包含大约500个自定义对象类型元素的数组。对象可能包含10到40个字段(基于用户输入),大部分是布尔值、字符串和浮点值。我将在这个项目中使用PHP,但我也有兴趣知道如何在Java中处理这个问题

我知道“过早优化是万恶之源”,但我想我现在需要决定,如何处理这些阵列。我是将它们保存在会话对象中,还是将它们存储在数据库(mySQL)中,并在会话中保留最少数量的密钥。将数据保留在会话中会使应用程序工作得更快,但当访问者数量开始增长时,我会冒着占用太多内存的风险。另一方面,一直从数据库中读写数据会降低性能


我想知道这两种方法之间的界限在哪里。当我面临这样的问题时,我会尝试估计我想要快速保存的每用户数据的大小

例如,如果是您的情况,假设有500个元素和40个字段,每个字段大小为50字节(在文本、数字、日期等之间求平均值)。因此,对于这个存储,我们必须在内存中为每个用户保留大约1MB的内存,因此,对于这个缓存,每1000个用户大约有1GB的内存

根据您的服务器资源可用性,您可以发现瓶颈:1000个用户消耗CPU、内存、数据库和磁盘访问;那么,在这种情况下,1GB是问题所在吗?如果是,则将其保存在数据库中;如果否,则将其保存在内存中

另一种选择是使用内存中的DB或分布式缓存解决方案,以一定的成本为您完成这一切:

  • 建筑复杂性
  • 最终许可证费用

如果每个用户都有那么多独特的数据,我会感到惊讶。理想情况下,这些数据中的一部分将在用户之间共享,您可以使用某种应用程序级缓存来存储最近使用的条目,并在它们丢失时从数据库中透明地获取它们


这种设计在Java中实现起来相对简单,但在PHP中更复杂(可能效率更低),因为它没有内置的对应用程序状态的支持。

您的问题已经有了答案。较少但经常使用的用户,作为存储进行会话;许多用户选择基于数据库的方法。“少”和“多”是相对的词。问得好。您可以确定应用程序的最大内存大小和最大预期用户登录数。计算存储一个用户的数据需要多少内存。如果用户数量在一段时间内不会异常增长(与facebook不同!),那么您可以将其存储在会话中。