mongodb数据库设计原则
1.一对很少 one-to-few 可以采用内嵌文档
person集合中
{
name:'张三',
age:20,
address:[
{country:"中国",province:"山西省",city:"长治市"},
{country:"中国",province:"山西省",city:"太原市"}
]
}
优点:不需要单独执行一条语句去获取内嵌的内容
缺点:法把这些内嵌文档当做单独的实体去访问
适用场合:一对很少且不需要单独访问内嵌内容
2.一对许多(但并不是很多) one-to-many 中间引用
person集合
{
_id:ObjectID(12个字节组成)
name:"张三"
age:23
}
人员组集合
{
name:"一组",
persons:[
ObjectID("aaaaa"),
ObjectID("AAABBB")
.....
]
}
适用场合:一对多且多的一端内容因为各种理由需要单独存在的情况下可以通过数组的方式引用多的一方的。
3.一对非常多 one-to-squillions 父级引用(mongodb每个文档的最大16M)
company集合
{
_id:ObjectID("company01")
name:"可为时代"
}
员工集合
{
name:"张三",
age:23,
company:ObjectID("company01")
}
适用场合:一对非常多的情况下,请将一的那端引用嵌入进多的一端对象中。
4.双向关联 在one端和many端同时保存对方的引用
person集合
{
_id:ObjectID("person01"),
name:"张三",
age:23,
group:ObjectID("group01")
}
group集合
{
_id:ObjectID("group01"),
name:"研发一组",
persons:[
ObjectID("person01")
ObjectID("person02")
]
}
优点:具有一对多的所有优点,同时在多的一方,可以很快找到少的一方
缺点:更新时需要同时更新两个集合中的引用,不能使用原子性
5.反范式
反范式Many-<one :冗余mony端的数据到one端即在one的一方保存mony的引用集合
反范式noe -<many :冗余one端的数据到many端即在many的一方保存one的引用
使用场合:读比较高,更新比较少的情况(没有原子性)
7.总的设计原则
a.优先考虑内嵌,除非有什么迫不得已的原因。
b.需要单独访问一个对象,那这个对象就不适合被内嵌到其他对象中。
c.数组不应该无限制增长。如果many端有数百个文档对象就不要去内嵌他们可以采用引用ObjectID的方案;如果有数千个文档对象,那么就不要内嵌ObjectID的数组。该采取哪些方案取决于数组的大小。
d.在进行反范式设计时请先确认读写比。一个几乎不更改只是读取的字段才适合冗余到其他对象中。
mongodb数据库设计原则的更多相关文章
- 有关MongoDB数据库设计的问题
问题一:是否collection越少越好,尽量把关系数据库中分表表示的关系嵌套进文档里?问题二:如果这样的话,一句SQL能搞定的复杂查询,mongodb也许要查询多次.mongodb的查询速度是否还比 ...
- mySql 数据库设计原则
mysql数据库设计原则: 必须使用InnoDB存储引擎 解读:支持事务.行级锁.并发性能更好.CPU及内存缓存页优化使得资源利用率更高 禁止使用存储过程.视图.触发器.Event 解读:高并发大数据 ...
- MongoDB数据库设计中6条重要的经验法则
Part 1 原文:6 Rules of Thumb for MongoDB Schema Design: Part 1 By William Zola, Lead Technical Support ...
- 005-MYSQL数据库设计原则
1.核心原则 不在数据库做运算; cpu计算务必移至业务层; 控制列数量(字段少而精,字段数建议在20以内); 平衡范式与冗余(效率优先:往往牺牲范式) 拒绝3B(拒绝大sql语句:big sql.拒 ...
- MongoDB库设计原则及实践
MongoDB数据模型选择• CAP定理(Consistency ,Availability 和Partition Tolerance )– Consistency(一致性):数据一致更新,所有数据变 ...
- Oracle基础<1>--数据库设计
一:为什么需要使用数据库设计 数据库设计可以使数据库通过健壮的数据库结构 高效并且健康 的进行工作. 二.数据库设计原则 (数据库设计.系统设计.架构设计) 1.熟悉需求 保证之后需求的变更 不会 ...
- 电子商务(电销)平台中订单模块(Order)数据库设计明细(转)
以下是自己在电子商务系统设计中的订单模块的数据库设计经验总结,而今发表出来一起分享,如有不当,欢迎跟帖讨论~ 订单表 (order)|-- 自动编号(order_id, 自增长主键)|-- 订单单号( ...
- 电子商务(电销)平台中订单模块(Order)数据库设计明细
电子商务(电销)平台中订单模块(Order)数据库设计明细 - sochishun - 博客园 http://www.cnblogs.com/sochishun/p/7040628.html 电子商务 ...
- 电子商务(电销)平台中订单模块(Order)数据库设计明细(转载)
电子商务(电销)平台中订单模块(Order)数据库设计明细 以下是自己在电子商务系统设计中的订单模块的数据库设计经验总结,而今发表出来一起分享,如有不当,欢迎跟帖讨论~ 订单表 (order)|-- ...
随机推荐
- kafka0.8.2以下版本删除topic
一些说明 kafka0.8.2及以上版本已经支持delete命令删除topic,可是之前的版本要是想删除topic还是要费一番手脚,绝对是个体力活... 该方法最好仅在线下开发环境中使用,毕竟要重启z ...
- 找到多个与名为“Index”的控制器匹配的类型的解决方法!
“/”应用程序中的服务器错误. 找到多个与名为“Index”的控制器匹配的类型.如果为此请求(“{controller}/{action}/{id}”)提供服务的路由在搜索匹配此请求的控制器时没有指定 ...
- RobotFramework 安装配置(二)
前面已经写了一篇关于RF的安装配置了,那是在做自动化工具调研的时候搭建RF总结的,基于win32的系列软件安装的过程.经过1个月的调研,做成了demo,也大致学RF的使用和python的基础语法,暂时 ...
- 解决ultravnc在win2008 R2下CTRL+ALT+DELETEA组合键发送失败的问题
首先,请google “ultravnc ctrl+alt+delete”,得到的解决方法是,更改UAC.进入组策略-计算机配置-管理模板-windows登陆选项,“禁用或启用软件注意序列”,更改成“ ...
- 2.js基础
4.函数 1)函数是一段完成“指定功能”的已经“命名”的代码段 2)函数只有“调用”才能使用到,调用就是通过名称(可以在声明之前,也可以在声明之后) 3)函数名.参数.函数体.返回值(没有返回值的函数 ...
- django ORM model filter 条件过滤,及多表连接查询、反向查询,某字段的distinct
版权归作者所有,任何形式转载请联系作者.作者:petanne(来自豆瓣)来源:https://www.douban.com/note/301166150/ 1.多表连接查询:感觉django太NX了. ...
- wxPython_Phoenix在线安装
转自:http://blog.csdn.net/xiaodong193/article/details/51920283 wxpython在python 3.X下变成了wxpython Project ...
- 如何杀掉D状态的进程?[zt]【转】
转自:http://blog.csdn.net/chinalinuxzend/article/details/4288791 [-] 如何杀掉D状态的进程zt 相关博文 原贴:http://www ...
- 数字转表格标题 Excel Sheet Column Title
#include<string>using namespace std;class Solution {public: string convertToTitle(int n) { ...
- 修改Linux时间一般涉及到3个命令: date, clock, hwclock
原贴:http://203.208.37.104/search?q=cache:p1vAAHvs9ikJ:www.goldthe.com /blog/%3Faction%3Dshowlog%26gid ...