Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.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
Ios 嵌套的Include Parse.com_Ios_Objective C_Parse Platform - Fatal编程技术网

Ios 嵌套的Include Parse.com

Ios 嵌套的Include Parse.com,ios,objective-c,parse-platform,Ios,Objective C,Parse Platform,我有一个UserToMessage表,它有一个指向名为thisUser的用户的指针,还有一个指向名为msg的消息的指针 消息表有一个指向名为creator的用户的指针。当我查询UserToMessageI[includeKey:@“message”] 我也想[includeKey:@“creator”]不知何故…好的,这个问题真的很让人困惑。如果我理解正确,您想查询UserToMessage表并包含两个条件吗?如果是这样,您可以这样做: [query whereKey:@"msg" equalT

我有一个
UserToMessage
表,它有一个指向名为
thisUser
的用户的指针,还有一个指向名为
msg
的消息的指针

消息表
有一个指向名为
creator
的用户的指针。当我查询
UserToMessage
I
[includeKey:@“message”]


我也想
[includeKey:@“creator”]
不知何故…

好的,这个问题真的很让人困惑。如果我理解正确,您想查询
UserToMessage
表并包含两个条件吗?如果是这样,您可以这样做:

[query whereKey:@"msg" equalTo:MSG_POINTER];
[query whereKey:@"thisUser" equalTo:PF_USER_POINTER];
如果情况并非如此,请更新您的问题,以反映您的确切需求。

这将起作用

PFQuery *query = [PFQuery queryWithClassName:@"UserToMessage"];
[query includeKey:@"msg"];
[query includeKey:@"msg.creator"];

// Add constraints on query
...
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    if(error) return;
    // Do action
    ...
}];

与其问自己如何在类似联接的查询中包含多个表中的信息,不如问问自己是否设计了应用程序所需的数据库模型

你所写的关于你的模型的东西听起来很像SQL。不过,这没关系,因为大多数访问parse.com和其他支持NoSQL的服务的人都来自SQL世界。然而,简单地将SQL数据库设计转换为解析通常不能提供最佳解决方案

相反,首先关注查询并确定它们需要返回哪些数据。如果您发现需要查询中返回的3个不同类的数据,这是模型的错误。为便携式设备开发应用程序时,您需要关注查询性能和计算开销

您应该以这样一种方式设计数据库模型:在尽可能少的查询中访问大部分(如果不是全部)数据。最好是一个

这个问题的典型解决方案围绕着非规范化和最终的一致性。 例如,在一个类似Twitter的应用程序中,如果你想检索你关注的人发表的帖子,那么首先查询一个人的“关注者”,然后查询tweet表中这些人发表的所有tweet是不可伸缩的。它可以为一些追随者和帖子工作,但如果你跟踪10万人,这是不可行的

在NoSQL场景中,当有人发布一条tweet时,这篇文章将存储在tweet表中,您将在my feed对象和每个跟随tweet作者的人的feed对象中的数组中存储指向该tweet的指针

我知道,从SQL数据库的角度来看,这似乎很奇怪(疯狂,甚至),但对于NoSQL系统来说并非如此。如果我后来删除了一条推文,该推文可能需要从359000个提要对象中删除(如果我是巴拉克·奥巴马)。这不会是立即的——因此是“最终一致性”

我建议您坐下来用笔和纸,根据需要检索的数据重新思考您的数据库模型

[includeKey:@"message.creator"]

你甚至可以做得更深一层:
message.creator.mother
-但不能超过这个。

@apperlya不“什么?….”我………..我是SQL背景的人之一,你是对的,下面的例子看起来确实很疯狂。我不是想反驳你,我只是想了解更多,但这是真的吗?如果我们看看今天的规模,奥巴马有超过4000万的粉丝——奥巴马会为每一条推特创造4000万条新记录,这是否比让个人做额外的查询更快?再说一次,我不想反驳你——我想详细了解一下:)谢谢你,先生!“更快”并不是真正的问题。您可以将创建4000万条记录的时间与查询4000万条记录的时间进行比较(如果所有关注者都收到了tweet)。但在设计数据库时,您应该考虑的是如何最大限度地减少每个用户的工作量;也就是说移动客户端。如果创建4000万条记录(极端的例子,但仍然如此)非常耗时,那么这对客户端来说并不重要,因为这一切都发生在服务器上。但是每一个额外的(不必要的)查询都会减慢客户端的速度,用户体验也会受到影响。具体来说:当使用像Twitter这样的大规模应用程序时,几乎任何解决方案都可能看起来很疯狂,因为卷本身就是疯狂的。想象一下更传统的方法:当我打开我的Twitter应用程序查看我的流时,系统将不得不查询我的数百个追随者,以获取他们的最新帖子。不是帖子,而是帖子。然后,它们都必须按时间顺序排序,然后才能显示在流中。那是一次大规模的行动。但更糟糕的是:该应用程序不仅显示推文本身,还显示推文的屏幕名称和图片。会有很多查询…那么可以说,您会“内联”多少信息?如果我们在奥巴马发推文时将推文添加到每个关注者的数组中,我们该如何处理奥巴马的详细信息(比如你提到的姓名和缩略图)?这是一个类似的交易,是否会“内联”到?它在哪里结束。。?我们是否只是将ID添加到这些数组中,以便用户仍然需要查询数据,但只需简单的键比较,而不是范围搜索?很抱歉也许我们应该在其他地方进行对话:P