Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.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数据存储中查询的复杂性_Java_Google App Engine_Google Cloud Datastore - Fatal编程技术网

Java Google数据存储中查询的复杂性

Java Google数据存储中查询的复杂性,java,google-app-engine,google-cloud-datastore,Java,Google App Engine,Google Cloud Datastore,我有一个Android应用程序,用户可以在其中相互发送私人消息。(例如:A向B和C发送一条消息,他们三人可以对该消息进行评论) 我使用谷歌应用程序引擎和谷歌数据存储与Java。(框架对象化) 我创建了一个成员实体和一个消息实体,其中包含一个数组列表字段,表示收件人的ID列表。(即成员实体的键字段) 为了让一个用户获得他作为收件人之一的所有消息,我计划将每个消息实体加载到数据存储中,然后通过检查ArrayList字段是否包含用户id来选择它们。然而,考虑到可能存储了数十万条消息,我想知道这是否有可

我有一个Android应用程序,用户可以在其中相互发送私人消息。(例如:A向B和C发送一条消息,他们三人可以对该消息进行评论)

我使用谷歌应用程序引擎和谷歌数据存储与Java。(框架对象化) 我创建了一个
成员
实体和一个
消息
实体,其中包含一个
数组列表
字段,表示收件人的ID列表。(即
成员
实体的键字段)


为了让一个用户获得他作为收件人之一的所有消息,我计划将每个
消息
实体加载到数据存储中,然后通过检查
ArrayList
字段是否包含用户id来选择它们。然而,考虑到可能存储了数十万条消息,我想知道这是否有可能,这是否会花费太多时间?

从数据存储中获取结果的时间只与检索到的实体数量有关,而与存储的实体总数无关,因为每个查询都必须使用索引。这正是数据存储如此可伸缩的原因


您必须限制每次调用检索的消息数,并使用来获取下一批消息。通过将光标转换为a,您可以将光标发送到Android客户端,以便客户端可以指示下一个请求的起点。

是否执行Y().load().type(Message.class).filter('recipient=',myMemberId)不执行您想要的操作?一封
邮件实际会有多少个
成员
s收件人?我想这应该可以解决问题,谢谢。我想平均一封
邮件
会有一个包含8个成员id的收件人列表。你仍然相信你的查询会很方便吗?事实上,一个成员不会有那么多的邮件发送给他。事实上,他可能不会有超过50条消息,因为我计划每周左右删除它们。我可能要处理的唯一大小问题是数据存储中的消息总数,这可能相当大。我不确定您所说的“每个查询都必须使用索引”是什么意思,但tx802(ofy().load().type(Message.class).filter('recipient=',myMemberId)建议的查询和将@index添加到列表字段是否符合该要求?是的,成员ID(或键)列表需要在这样的查询中使用
@Index
注释。@tx802实际上您的查询返回一个空集合。您确定这不是类似于
of y().load().type(Message.class).filter('recipient contains',myMemberId)
?@Gannicus来自tx802的查询是正确的,但是您在保存数据之前是否在收件人上添加了索引注释。已经存在的数据将不会被索引,除非重新保存。@koma是的,我以前就遇到过这个问题,所以我这样做了。实际上,考虑到例如so线程: