Database design 与nosql/Parse数据模型设计抗争

Database design 与nosql/Parse数据模型设计抗争,database-design,parse-platform,nosql,Database Design,Parse Platform,Nosql,我已经习惯了SQL和关系设计,所以我对当前的项目有点困惑。事情是这样的: 有一些被称为“泡泡”的东西,其运作方式与谷歌圈基本相同。它们是用户定义的,可以有任何PFUSER作为“成员” 然后是“帖子”。每个帖子都有一个可见性设置,即PFUSER(或气泡)数组 该应用程序的工作原理是用户制作泡泡,然后可以浏览泡泡的提要/帖子。这变得棘手的原因是:当应用程序启动时,我想查询某个特定用户的帖子,我首先需要找到属于他们的气泡(足够简单),然后我需要找到气泡中的用户,然后我需要查询这些用户的帖子,然后我需要

我已经习惯了SQL和关系设计,所以我对当前的项目有点困惑。事情是这样的:

有一些被称为“泡泡”的东西,其运作方式与谷歌圈基本相同。它们是用户定义的,可以有任何PFUSER作为“成员”

然后是“帖子”。每个帖子都有一个可见性设置,即PFUSER(或气泡)数组

该应用程序的工作原理是用户制作泡泡,然后可以浏览泡泡的提要/帖子。这变得棘手的原因是:当应用程序启动时,我想查询某个特定用户的帖子,我首先需要找到属于他们的气泡(足够简单),然后我需要找到气泡中的用户,然后我需要查询这些用户的帖子,然后我需要确保这些帖子的可见性。我尝试创建一个云代码函数,但由于异步调用打乱了for循环的索引,它无法填充字典的posts部分


不管怎样,我现在正在努力找出最好的nosql方法来实现这一点。有什么帮助吗,解析器?

这是个大问题。我不能为你创建一个模型,但我可以给你一些关于你需要如何思考的提示

首先,正如您似乎已经发现的那样,您需要停止用关系设计术语来思考此任务。对于所有首先学习SQL数据库的人(我们中的大多数人),这是一个漫长的过程。许多NoSQL方法在我们的关系头脑中留下了不好的印象

其次,您需要关注数据提取。毫无疑问,在您脑海中形成了模型(甚至可能实现了模型),提取所需数据所需的查询很快就会变得非常复杂。而且,由于您的客户机可能大部分(仅?)是移动设备,因此您需要将查询数量和计算开销降至最低

第三个,如果你相信你的应用程序会登上排行榜并广受欢迎(假设你不是在设计企业应用程序),那么你需要设计可扩展性。不一定要完美地实现它,但至少要针对它进行设计,以便在应用程序变得流行时,您可以通过改进而不是完全重新构建它来构建您的初始设计(如果您的努力无法跟上不断增长的用户群,则可能会面临彻底的灾难)

作为典型,;如果您需要一个由用户列表创建的帖子列表,那么您不需要先获取用户,然后再查询这些用户的帖子。您需要准备模式,以便将此帖子列表(以及通常要求的其他结果列表)作为模式的一部分准备好。这可以是提要的表(解析类)。每个用户一条记录,该记录包含一个预先准备好的提要数组。每次我跟踪的用户写新帖子时,都需要更新。其他所有关注该帖子作者的用户的记录也是如此!在这里,我只是在你的关系头脑中留下了一个坏印象,不是吗?:-)

现在,对于实现细节,我建议您看看NoSQL模式设计示例。我发现“Twissandra”(一个在ApacheCassandra中实现的Twitter克隆)是一本非常好的关于如何设计NoSQL的入门书。特别是因为Twitter是一个我们很容易理解的用例。尽管Parse是由MongoDB而不是Cassandra支持的,但大多数原则都延续了下来:

此外,通过比较本演示文稿中的第6页和第7页,可以很好地了解SQL和NoSQL之间的模式设计的不同:


我建议您在阅读了这些(可能还有其他)文章之后尝试(重新)设计您的模式,然后在这里询问与您的实现相关的更具体的问题,如果需要的话。

假设我使用bubbles类作为“提要”,并添加了一组指向Post对象的指针。随着时间的推移,它不会变得过于臃肿吗?还是在nosql中可以接受?那么我是否应该表示一个提要对象中的所有气泡@“太胖”是相对的。当然,这取决于你预期的规模。如果你在构建类似Twitter的规模,这种方法是不够的。对于我给出的示例,不是每个用户都有一个提要对象,而是每个用户每个月/周/天/小时/任何时间创建一个提要对象,具体取决于规模。所以,为了显示我的时间线,您可能需要获取一个表示今天的提要对象,当我滚动到今天时,您需要获取昨天的提要对象,等等,以建议一种解决方案。好的。现在我有一个feed对象,它是我的用户类中的指针。然后feed类有一个指向其中气泡的指针,每个气泡都有一个post数组。这是错误的设计吗?我必须通过两个级别获取数据,这可能是错误的@帅哥,我真的不能告诉你这个设计是对还是错。这取决于需要检索哪些数据集,以及需要以何种方式检索它们。我怀疑你的提要应该由你所属的任何泡泡的帖子组成?在这种情况下,在当前的设计中,您将如何收集不同的bubble提要并合并它们,以便按时间顺序显示帖子?还是不需要呢?在iOS端,它是一个页面视图(用一个页面表示每个气泡)@handomeguy