2012-09-30 24 views
0

我构建了一个社交Android应用程序,用户可以通过gps位置查看身边的其他用户。开始的时候我的用户数量很少,但是现在我的用户数量在不断增加(每天大约有1500 + 100),所以我在设计中发现了一个主要问题。如何在服务器端管理大量用户?

在我的Google App Engine servlet中,我拥有静态HashMap,它包含所有用户配置文件对象,currenty 1500,随着更多用户注册,此数字将增加。

为什么我做它

每个用户是请求他周围的用户自己的GPS与其他用户进行比较,并检查它们是否在其半径10公里,出现这种情况,平均每5分钟。 这就是为什么我无法每次从db获取用户,因为GAE读/写操作配额会让我分开。

这个DESGIN的问题是

随着用户数量的增加HashMap的转向空每4-6小时,我的事情,这个时间也越来越短,但我不知道。 我正在通过重新加载数据库中的用户来解决这个问题,每次我检测到它变成了空的时候,但是这会导致DOS给我的用户30秒,所以我在寻找更好的解决方案。
我猜这是因为hashmap的大小,我是对不对?

我想知道如何管理全部用户配置文件与最大aviablity。

谢谢。

+0

“*随着用户数量的增加,Hashmap每4-6小时会变为空值*” - 您能澄清一下这部分吗?这个'null'是什么意思?谁清除了“HashMap”? –

回答

1

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

为什么你不使用一些不同的存储,如MongoDB,这也可以'在云'中? (例如www.mongohq.com)。

如果您想扩展,需要将数据与处理器分开。例如。有x台服务器运行你的servlet(或者让Google AppEngine自行扩展),并将数据放在不同的地方(例如在MongoDB或PostgreSQL中)。

0

您需要重新考虑您的整个设计。将所有用户存储在一个巨大的HashMap中不会扩展(迟早你必须将你的应用程序集群)。此外,算法的复杂性非常高 - 您需要遍历每个用户的整个地图。

更具扩展性的解决方案是使用spatial database。所有主要的关系数据库和一些NoSQL产品都提供了地理空间索引。基本上,数据库查询引擎已针对如下查询进行了优化:在给定点附近给我提供了所有记录。

如果您的应用程序非常成功,即使是内存映射也会比企业级地理空间索引慢。

相关问题