首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

一: Duplicate data for speed, reference data for integrity

2012-12-19 
1: Duplicate data for speed, reference data for integrity?http://books.google.com.hk/books?idIZiyE

1: Duplicate data for speed, reference data for integrity

?

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.

?

?

热点排行