Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在google app engine中执行大型查询?_Java_Google App Engine_Google Cloud Messaging_Google Cloud Datastore - Fatal编程技术网

Java 如何在google app engine中执行大型查询?

Java 如何在google app engine中执行大型查询?,java,google-app-engine,google-cloud-messaging,google-cloud-datastore,Java,Google App Engine,Google Cloud Messaging,Google Cloud Datastore,我收集了近100万用户的应用程序。我现在添加了一个推送通知系统,使用谷歌云消息来创建警报。我的数据库包含一个具有GcmId和应用程序名称(例如“myApp1”)的实体 现在,我想向“myApp1”的所有用户发送一条GCM消息。虽然objectify文档没有很好地描述.limit函数。例如,从GCM演示应用程序: List<RegistrationRecord> records = ofy().load().type(RegistrationRecord.class).

我收集了近100万用户的应用程序。我现在添加了一个推送通知系统,使用谷歌云消息来创建警报。我的数据库包含一个具有GcmId和应用程序名称(例如“myApp1”)的实体

现在,我想向“myApp1”的所有用户发送一条GCM消息。虽然objectify文档没有很好地描述.limit函数。例如,从GCM演示应用程序:

        List<RegistrationRecord> records = ofy().load().type(RegistrationRecord.class).limit(10).list();
List 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();
List records=ofy().load().type(RegistrationRecord.class).filter(“app”,“myApp1”).List();

用于测试,工作正常。然而,当现场直播时,数据集是巨大的,我不知道会产生什么影响。

我相信你从错误的角度看它

objectify或低级appengine使用游标很好地处理分页结果,因此您需要按块处理结果。我不会详细介绍如何做到这一点,因为所有这些数据存储读取最终将花费您很多美元,并且您将需要任务队列

相反,请查看google云消息中的主题:

用户(客户端应用程序)订阅主题(您案例中的appid)。然后从appengine前端实例发送一个主题推送,这要容易得多(响应时间限制为30秒等等)

我发现这篇博文是完整实现以及如何正确处理可能错误的一个很好的例子:


我能看到的唯一问题是,从服务器推送被记录为最多需要30秒。appengine前端实例也有30秒的总时间限制,因此当它等待GCM推送完成时,servlet本身可能会超时。解决这一问题的一种方法是从taskqueue发送push,这将为urlfetch调用提供60秒的时间(我假设该限制也适用于任何api调用):

不能说大约50万次,但我使用objectify进行了相当大的查询,所有查询都工作正常。当然,它被taskqueue分割成更小的块,我使用游标继续每一步听起来很有趣。我现在就调查一下。振作起来,你是对的。这正是我要找的。不过,代码示例/演练很少。如果你有一个很好的链接让我去,我会很感激。这些帖子很好,有一些很好的GCM技巧,但我仍然找不到任何关于主题的东西。除了按照google文档手动格式化http响应之外。我很惊讶没有API或类似的帮助,比如普通GCMive的Sender类更新了答案,但我只是在谷歌上搜索了“谷歌云消息主题”,更新后的链接是第一个搜索结果。你在找别的东西吗?我看过那份文件,现在正在看。我只是希望有像Sender类这样的助手类。我一般不喜欢手动格式化http请求。如果有的话,我更喜欢更结实一点的。谢谢你,你帮了我大忙!