我正处于开展Web项目的早期阶段,需要使用包含大约500个自定义对象类型元素的数组。对象可能包含10到40个字段(基于用户输入),主要是布尔值,字符串和浮点数。我将在这个项目中使用PHP,但我也有兴趣知道如何用Java来解决这个问题。
我知道“过早优化是所有邪恶的根源”,但我认为我现在需要决定,我该如何处理这些数组。我是将它们保存在Session对象中还是将它们存储在数据库(mySQL)中,并在会话中保留最少量的密钥。在会话中保存数据会使应用程序更快地运行,但是当访问者数量开始增长时,我冒着耗费太多内存的风险。另一方面,始终从数据库读取和写入数据会降低性能。
我想知道这两种方法之间的界线。如何确定何时保留会话内的数据太多?
答案 0 :(得分:2)
当我遇到这样的问题时,我会尝试估算我想要保持快速的每用户数据的大小。
如果你的情况,假设例如有500个元素,每个40个字段,每个字段大小为50个字节(在文本,数字,日期等之间取平均值)。因此,对于此存储,我们必须为每个用户保留大约1MB的内存,因此每1000个用户只有1GB用于此缓存。
根据您的服务器资源可用性,您可以找到瓶颈:1000个用户消耗CPU,内存,数据库,磁盘访问;在这种情况下1GB的问题是什么?如果是,请将它们保存在DB中,如果没有将它们保存在内存中。
另一个选择是使用内存数据库或分布式缓存解决方案,为您完成所有工作,但需要付出一定代价:
答案 1 :(得分:0)
如果您为每个用户提供了大量独特数据,我会感到惊讶。理想情况下,这些数据中的一些将在用户之间共享,您可以使用某种应用程序级缓存来存储最近使用的条目,如果它们丢失则透明地从数据库中提取它们。
这种设计在Java中实现相对简单,但在PHP中涉及更多(并且可能效率较低),因为它没有内置的应用程序状态支持。