簡體   English   中英

如何在Google App Engine中執行大型查詢?

[英]How do I perform a large query in google app engine?

我收集了總計將近100萬用戶的應用程序。 我現在要添加一個使用Google雲消息傳遞來創建警報的推送通知系統。 我的數據庫包含一個具有GcmId和應用程序名稱(例如“ myApp1”)的實體。

現在,我想向“ myApp1”的所有用戶發送GCM消息。 對象化文檔對.limit函數的描述並不好。 例如,通過GCM演示應用程序:

        List<RegistrationRecord> records = ofy().load().type(RegistrationRecord.class).limit(10).list();

將發送到前10個條目。 但是我需要所有與appType =“ myApp1”匹配的條目。 這比較困難,因為查詢可能很大,並且可能會匹配50萬用戶,因此我需要將GCM推送發送給所有用戶。

如此大的查詢如何執行?

編輯:我目前正在使用

        List<RegistrationRecord> records = ofy().load().type(RegistrationRecord.class).filter("app","myApp1").list();

進行測試,效果很好。 但是,當實時發布時,數據集非常龐大,我不知道會有什么影響。

我相信您是從錯誤的角度看它。

objectify或低級appengine可以很好地處理使用游標的分頁結果,因此您需要按塊處理結果。 我不會詳細介紹如何執行此操作,因為最終所有這些數據存儲讀取都會花費您很多美元,並且您將需要任務隊列。

相反,請查看Google雲消息傳遞中的主題: https : //developers.google.com/cloud-messaging/topic-messaging

用戶(客戶端應用)訂閱了該主題(您的情況下為appid)。 然后,您發送一個主題推送,這從appengine前端實例中可以輕松得多(響應時間限制為30秒等)。

我發現此博客文章是完整實現以及如何正確處理可能的錯誤的一個很好的例子:

https://blog.pushbullet.com/2014/02/12/keeping-google-cloud-messaging-for-android-working-reliably-techincal-post/

我能看到的唯一問題是,從服務器推送的記錄最多需要30秒。 一個appengine前端實例也有30秒的總限制,因此在等待GCM推送完成servlet本身可能超時的同時。 解決此問題的一種方法是從taskqueue發送推送,這將給您60秒鍾的urlfetch調用(我認為該限制也適用於任何api調用): https ://cloud.google.com/appengine/docs/java / urlfetch /

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM