设计 MongDB 模式时应注意的问题

  • 根据用户需求来设计模式。
  • 如果想一起使用对象,请将这些对象合并到一个文档中,否则要将它们分开(但是要确保不需要连接)。
  • 经常复制数据(但要有一定限度),因为与计算时间相比,硬盘空间显得非常便宜。
  • 在写入时进行连接,而不能在读取时连接。
  • 针对经常发生的用例来设计模式。
  • 在模式中实现复杂的聚合。

范例

假使一个客户需要为他的博客站点设计一个数据库,让我们来看看 RDBMS 与 MongoDB 在模式设计上的差异。网站需求如下所示:

  • 每篇博客都具有唯一的标题、描述以及 URL。
  • 每篇博客都具有一个或多个标签。
  • 每篇博客都具有发表者的名称,以及喜欢
  • 每篇博客都有用户的评论,用户名、消息、日期时间以及评论的喜欢度。
  • 每篇博客都可以有 0 个或多个评论。

在 RDBMS 中,设计一个能够满足上述需求的数据库模式至少需要 3 个表。如下图所示。

在 MongoDB 中,设计出来的模式却只有一个集合 post,其结构如下:

{
_id: POST_ID
title: TITLE_OF_POST,
description: POST_DESCRIPTION,
by: POST_BY,
url: URL_OF_POST,
tags: [TAG1, TAG2, TAG3],
likes: TOTAL_LIKES,
comments: [
{
user:'COMMENT_BY',
message: TEXT,
dateCreated: DATE_TIME,
like: LIKES
},
{
user:'COMMENT_BY',
message: TEXT,
dateCreated: DATE_TIME,
like: LIKES
}
]
}

虽然只是展示数据,在 RDBMS 中需要连接三张表,而在 MongoDB 中则只需要一个集合。

最新文章

  1. ORACLE RAC集群的体系结构
  2. STL erase函数
  3. [二]JQueryMobile常用的组件介绍
  4. 子窗体显示在任务栏,且子窗体中又有弹窗(CreateParams修改三个风格参数)
  5. 简单实现div+css页面自适应
  6. 实验吧_密码忘记了(vim编辑器+代码审计)&天网管理系统(php弱比较+反序列化)
  7. day 17 - 1 递归函数
  8. 2018-2019-2 《网络对抗技术》Exp0 Kali安装 Week1 20165335
  9. Sql Server 2008 清除日志
  10. srilm使用杂记
  11. Django框架之跨站请求伪造
  12. 1061 Dating (20 分)
  13. DIV+CSS 按比例等分
  14. java事务 深入Java事务的原理与应用
  15. [非常重要的总结] Linux C相关函数
  16. 使用eclipse kepler,结果getServletContext可用了
  17. Unity3d之Perfab
  18. Go语言【第三篇】:Go变量和常量
  19. springboot集成shiro和开涛的动态url问题
  20. 事务处理笔记《一》ADO.NET级别的事务

热门文章

  1. 论林耐斯-Linux系统的重要性
  2. Android笔记: 播放提示音 的简单方法
  3. JavaWeb(八)JQuery
  4. 【渗透课程】第二篇下-HTTP协议的请求与响应深度剖析
  5. Pandas基础学习与Spark Python初探
  6. Spring整合Redis(spring-data-redis)
  7. beanshell postprocessor解决编码
  8. 深入理解line-height
  9. tomcat 和 jboss access log 日志输出详解
  10. 必应词典--英语学习APP案例分析