将数据保存在数据库或会话中
我正处于一个web项目的早期阶段,该项目需要处理包含大约500个自定义对象类型元素的数组。对象可能包含10到40个字段(基于用户输入),主要是布尔值,字符串和浮点数。我将为这个项目使用PHP,但我也有兴趣知道如何在Java中处理这个问题。将数据保存在数据库或会话中
我知道“过早优化是万恶之源”,但我想我现在需要决定,我该如何处理这些数组。我是否将它们保留在Session对象中,还是将它们存储在数据库(mySQL)中,并在会话中保留最少量的键。在会话中保持数据会加快应用程序的运行速度,但是当访问者数量增加时,我可能会占用太多内存。另一方面,从数据库中随时读写数据会降低性能。
我想知道这两种方法之间的界限。我如何决定数据太多以至于无法保持会话?
当我遇到像这样的问题时,我尝试估计每个用户数据的大小,我想保持快速。
如果是你的情况,假设例如有500个元素,每个元素有40个字段,每个字段的大小为50个字节(在文本,数字,日期等方面取平均值)。因此,我们必须在每个用户的内存中保留大约1MB的存储空间,因此每1000个用户只有1GB的缓存空间。
根据您的服务器资源可用性,您可以找到瓶颈:1000个用户占用CPU,内存,数据库,磁盘访问;所以在这种情况下1GB的问题呢?如果将它们保存在数据库中,如果没有保存在内存中。
另一种选择是使用内存数据库或做这一切为你一个分布式缓存解决方案,在一定的成本:
- 架构复杂
- 最终许可费用
如果您为每个用户提供了大量的独特数据,我会感到惊讶。理想情况下,这些数据中的一部分将在用户之间共享,并且您可以拥有某种应用程序级缓存,用于存储最近使用的条目,并在数据库丢失时透明地从数据库中提取它们。
这种设计在Java中实现起来相对简单,但是由于它没有内置的应用程序状态支持,所以PHP有点更多地涉及(可能效率较低)。
你有你的问题在你的答案。较少但频繁的用户,作为商店进行会话;很多用户采用基于Db的方法。现在,'少'和'很多'是相对的术语。 – Nishant 2012-02-07 08:21:34
好问题。您可以识别您的应用程序的最大内存大小和最大期望的用户登录。计算需要多少内存来存储一个用户的数据。如果用户数量在一段时间内不会异常增长(与Facebook不同!),那么您可以将其存储在会话中。 – Jayy 2012-02-07 08:25:14