2012-09-30 56 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產品都提供了地理空間索引。基本上,數據庫查詢引擎已針對如下查詢進行了優化:在給定點附近給我提供了所有記錄。

如果您的應用程序非常成功,即使是內存映射也會比企業級地理空間索引慢。

相關問題