http://books.google.com.hk/books?id=IZiyEX_2JtoC&printsec=frontcover&dq=50+Tips+and+Tricks+for+MongoDB+Developers&source=bl&ots=r0Zvm_DR75&sig=dn_LhVomqVEBPPrKXiSSRc2y3f4&hl=en&ei=Tzy9TdmXG4aevgPDkpnbBQ&sa=X&oi=book_result&ct=result&resnum=6&ved=0CDcQ6AEwBTgK#v=onepage&q&f=false
上面是google里的该书的一些片段,结合safari上的被遮住的,能拼凑一些完整的出来
先来看下文章里给的例子,一般按照正常的数据库设计范式都是如此设计一个购物车订单
Normalized schema
A product:
{
"_id" : productId,
"name" : name,
"price" : price,
"desc" : description
}
An order:
{
"_id" : orderId,
"user" : userInfo,
"items" : [
productId1,
productId2,
productId3
]
}
这种设计的缺点:如果需要查询某个订单中商品的detail需要查询2次
以下是非常规范式设计:(数据冗余或者可以理解为tip里Duplicate data)
Denormalized schema
A product (same as previous):
{
"_id" : productId,
"name" : name,
"price" : price,
"desc" : description
}
An order:
{
"_id" : orderId,
"user" : userInfo,
"items" : [
{
"_id" : productId1,
"name" : name1,
"price" : price1
},
{
"_id" : productId2,
"name" : name2,
"price" : price2
},
{
"_id" : productId3,
"name" : name3,
"price" : price3
}
]
}
优点是:查询基本订单与商品信息时只需要查询一次
缺点:修改商品信息时,需要在每个订单中修改
针对嵌入对象的选取原则可以考虑如下:
It is almost never worth
referencing seldom-changing data such as names, birth dates, stock symbols, and
addresses.
考虑一种使用场景,如果某种商品想临时改下价格,类似清仓活动,但是已有的订单是不希望做修改的(这不坑爹吗),这个时候用第2种就比较合适。
解释下 :第一种设计就是tip里的reference data for integrity
第二种设计就是tip里的Duplicate data for speed
针对以上2种设计,原文给出的总结
This is a trade-off: you cannot have both the fastest performance and guaranteed immediate consistency. You must decide which is more important for your application.
分享到:
相关推荐
IAR编译出现 Error[Li006]: duplicate definitions for 错误提示。
"SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'a3b6420a-6724-11ea-b2a3-d773d1d6999f' for key 'callId'\nThe SQL being executed was: INSERT INTO `ly_call` (`call_id`, `mobile`, ...
android studio创建9.patch图片,使用时出现Error: Duplicate resources 笔者运行环境:MacOs Catalina , android studio 3.6.3 原创文章 5获赞 2访问量 249 关注 私信 展开阅读全文 作者:徐州捕快
excel duplicate data remover
软件开发电子书制作查壳软件
碰到了 #1062 – Duplicate entry ‘1′ for key ‘PRIMARY’ 当时那个急啊,原本的数据我已经全部删除了,没办法只有请求万能的百度了。我找了大半天终于给我给我找到了。兴奋ing,马上测试,O(∩_∩)O哈哈~成功了...
今天启动项目,测试时,发现一个报错:Duplicate keys detected: ‘892834eb-a50c-488c-83ea-cc23f05e2875’. This may cause an update。具体如下: 问题:使用Element UI的Tree 树形控件出现问题。 上网查了一下...
软件开发电子书制作查壳软件
mysql Error Code : 1060 Duplicate column name 'ID'
开发的网站后台系统在测试过程中出现了这个问题: Invalid Query : Duplicate entry ‘127′ for key 1 SQL is : INSERT INTO `kq_news` (`Title`,`Author`,`Type`,`Content`,`IsDel`,`Adate`,`Range`,`Lang`) ...
Duplicate File Finder For Mac_v6.6是一款免费的重复文件查找软件,使用起来非常简单,只需要拖放任意数量的文件夹,然后单击扫描。在一分钟内,应用程序将按类别提供所有重复文件的报告:图片,视频,音乐,档案,...
ILMerge是一个可以将多个程序集合并为一个程序集的工具,该工具由微软官方提供。ILMerge可以作用于可执行文件和DLL文件,并且可以有多种控制输出过程的格式的选项。合并列表的第一个程序集将作为基本程序集,如果这...
Using a DATA Step to Check for Invalid Values 7 Describing the VERIFY, TRIM, MISSING, and NOTDIGIT Functions 9 Using PROC PRINT with a WHERE Statement to List Invalid Values 13 Using Formats to Check ...
in-depth material on the application of Big data to complex systems in order to find solutions for the challenges and problems facing big data sets applications. Much data today is not natively in ...
DFK:重复文件杀手将在用户指定的目录/驱动器中搜索任何类型的重复文件。 它将最终利用图像识别进行图像比较,将音频匹配算法用于声音文件匹配以及CRC / MD5哈希测试。
DUFF是Windows的(将是)一种工具,用于查找和处理计算机文件系统和/或网络上的重复文件。 它将具有许多内置和基于插件的文件比较层,重复标记和文件集处理程序。
Duplicate File Finder Pro是一款重复文件搜索工具,对于个人用户而言,可以选择免费版即能满足一般的使用需要。可以查找重复文件,查找空文件和文件夹,使用内置的Hash计算器。支持添加排除列表,在选项中添加要...
Perfect for beginners, this book’s approach will also appeal to experienced practitioners who want to brush up on their skills. Part I explains how Hadoop and MapReduce work, while Part II covers ...