我构建了一个社交android应用程序,用户可以通过gps位置查看周围的其他用户。最初,我的用户数量很少,但一切进展顺利。但是现在,随着用户数量的增加(每天大约1500 + 100),我发现了设计中的一个主要问题。

在我的Google App Engine Servlet中,我有一个静态HashMap,它保存着所有用户个人资料对象,当前为1500,并且随着更多用户注册,此数字将增加。

为什么我要这么做

每个请求周围用户的用户都会将其gps与其他用户进行比较,并检查他们是否位于他的10公里半径内,平均每5分钟就会发生一次。
这就是为什么我每次都无法从db中获得用户的原因,因为GAE读/写操作配额会使我与众不同。

这种设计的问题是

随着用户数量的增加,Hashmap每4-6小时变为null,我觉得这一次的时间越来越短,但我不确定。
我通过每次检测到数据库为空时从db重新加载用户来解决此问题,但是这会使DOS对我的用户造成30秒的延迟,因此,我正在寻找更好的解决方案。
我猜想是因为哈希图的大小,对吗?

我想知道如何最大程度地管理所有用户个人资料。

谢谢。

最佳答案

我不会将这些数据存储在HashMap中,因为如果您在多个实例上运行,并且使用了大量内存,它实际上并不会扩展。

为什么不使用“云”中也有的MongoDB等其他存储呢? (例如www.mongohq.com)。

如果要扩展,则需要将数据与处理器分开。例如。让x台服务器运行您的servlet(或让Google AppEngine自行对其进行扩展),并将数据放置在其他位置(例如,在MongoDB或PostgreSQL中)。

关于java - 如何在服务器端管理大量用户?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12660570/

10-17 01:30