首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NoSQL优化策略

NoSQL优化策略
EN

Stack Overflow用户
提问于 2013-12-08 18:43:06
回答 1查看 940关注 0票数 0

查找关于以下内容的一些输入。希望这对版主来说不会太主观。

刚刚开始使用deployd.com BaaS API,并有以下场景。

如果一个移动应用程序要有一个Group对象和一个用户,其中一个用户可以属于许多组,而一个组有很多用户(多到多的关系),我可以用我正在考虑的两种方法来设计这几种方法:

a)

代码语言:javascript
运行
复制
Users [{
  id: 1,
  groups : {1,2,3,4}
}]

Groups [{
  id: 1,
  users : {1,2,3,4}
}]

b)

代码语言:javascript
运行
复制
Users [{
   id: 1
}]

Groups [{
   id: 1
}]

UserGroups [{
   id: 1,
   group: 1,
   user: 1,
 },{
   id: 2
   group: 1,
   user: 2,
}]

我倾向于B,因为我可以存储元数据(用户加入组的日期等),但这似乎更像是一个关系数据库管理系统方法,我想知道如果我试图创建这样的关系,是否会失去NoSQL的任何好处。

假设这个移动应用程序将被成千上万的移动用户同时使用,因此首先选择NoSQL而不是关系数据库管理系统。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-08 18:53:20

( B)不是个好主意。MongoDB不进行连接,因此任何需要多个集合的操作都意味着多个后续查询,这比关系数据库中的数据库内部连接要慢得多。这意味着您应该将关系存储在文档中。

当您想要存储元信息时,请记住数组不能只存储原始值。它们也可以存储对象。示例:

代码语言:javascript
运行
复制
{
    id:1,
    name:"Bob",
    groups: [
        { name: "nice people",
          position: "member",
          joined: ISODate(2013, 12, 3)
        } ,
        { name: "evil people",
          position: "admin",
          joined: ISODate(2012, 11, 22)
        }

    ]
}

最好存储足够的元信息,这样就可以在不查询引用对象的情况下完成许多常见的查询。当有人查找用户配置文件时,当您想要显示一个组列表,并且将您需要的所有组信息存储在“用户文档”中时,您不必执行第二次查询来检索组文档。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20457365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档