You are on page 1of 107

I HC QUC GIA TP.

H CH MINH

TRNG I HC CNG NGH THNG TIN


KHOA CNG NGH PHN MM

KHO LUN TT NGHIP

TM HIU NOSQL V NG DNG

Ging vin hng dn

: Ths. PHM THI VNG

Sinh vin thc hin

: DNG THN DN - 08520057


BI NGC HUY

Lp

: CNPM03

Kho

: 2008 - 2012

TP. H Ch Minh, thng 12 nm 2012

- 08520544

LI M U
Ngy nay vi k nguyn cng ngh bng n, thnh cng ca Internet khin
cho s lng ngi dng truy cp vo cng mt h thng ngy cng tng. in hnh
nh Facebook mt thng phc v hn 1000 t truy cp v hn 800 triu lt khch
gh thm th ta mi hnh dung c s bng n ca thng tin nh th no. gii
quyt vn bng n nh trn th chng ta m rng cc h thng my ch siu ln,
phn thnh nhiu cm t khp ni trn th gii. Nhng vi tc pht trin theo cp
s nh hin nay th vic tng s lng my ch thi vn cha . Ta cn xem xt v
nng cp cc gii php lu tr cho tng lai.
H thng my ch c s d liu i hi phi rt mnh m nu khng my ch
s b qu ti. Vi cc h thng vi s lng ln n hng triu cho n hng t th
vic hiu nng tt l vic bt buc.Cc h RDBMS hin nay th vn hiu nng
thng khng tt cho trng hp ny. Ngn ng SQL l ngn ng thng dch vi
cc rng buc trong cc bng khin cho hiu nng thc s ca h thng c s d
liu khi thc thi l kh ch vi h thng ln nh k trn. Cha k l vi h thng
ln th vn phn tn d liu, tnh ton vn d liu l vic rt quan trng. NoSQL
p ng c tt c cc yu cu ny.Vi tc nhanh do khng phi qua cc cu truy
vn SQL, c tnh sn sng, phn tn cao v n nh tuyt vi, NoSQL rt thch
hp cho cc h thng c s lng lt truy vn ln. trong kho lun ny, chng ti
s nghin cu v mt loi NoSQL kh ph bin RavenDB.
RavenDB l mt c s d liu m ngun m c h tr transactional (giao dch)
c vit cho nn tng .NET. RavenDB a ra m hnh d liu linh hot (flexible data
model) nhm p ng yu cu ca cc h thng th gii thc (real-world systems).
RavenDB cho php xy dng nhng ng dng c hiu sut cao(high-performance),
tr thp(low-latency) mt cch nhanh chng v hiu qu. RavenDB xng ng l mt
c s d liu ng tin cy.

LI CM N
Chng em xin gi li cm n su sc n thy Phm Thi Vng, gip ,
to iu kin cho nhm hon thnh tt kha lun tt nghip ny. Thy tn tnh
hng dn v a ra nhng nhn xt v cng qu gi ti ngy cng hon thin
hn. Nhng gp ca thy gip cho chng em tip cn, hiu r v gii quyt vn
d dng hn.
ng thi, chng em cng xin by t lng bit n n qu thy, c Trng i
Hc Cng Ngh Thng Tin i Hc Quc Gia Thnh Ph H Ch Minh, c bit l
cc thy, c khoa Cng ngh Phn Mm tn tnh truyn t kin thc, kinh nghim
cho chng em t nhng ngy u hc tp ti trng. S nhit tnh ca cc thy, c
gip cho chng em c kin thc nn tng vng chc cng nh kinh nghim thc tin
qu bu chng em c th hon thnh tt cc nhim v hc tp, lm vic v nghin
cu.
Bn cnh , chng em cng gi li cm n n gia nh, cc anh, ch, bn b
ng vin, gip chng em rt nhiu trong qu trnh hc tp cng nh trong cuc
sng.

Thnh ph H Ch Minh, ngy 22 thng 12 nm 2012


Nhm sinh vin thc hin
Dng Thn Dn Bi Ngc Huy

NHN XT CA GING VIN HNG DN


.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................

NHN XT CA GING VIN PHN BIN


.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................

MC LC
DANH
MC
CC
........1

BNG,S

DANH
MC
HNH...3
1

CC

CHNG 1 - Gii thiu ti.............................................................................5


1.1

Vn tm hiu................................................................................................5

1.2

Mc tiu ti.................................................................................................6

1.3

Ni dung bo co.............................................................................................6

CHNG 2 - Tng quan v c s d liu NoSQL...............................................8


2.1

Ti sao chn NoSQL?......................................................................................8

2.2

NoSQL l g ?..................................................................................................8

2.3

u nhc im ca c s d liu NoSQL:......................................................9

2.3.1

u im:...................................................................................................9

2.3.2

Nhc im:...........................................................................................10

2.4

Kin trc........................................................................................................12

2.5

Mt s thut ng lin quan............................................................................13

2.6

So snh NoSQL vi cc loi c s d liu khc............................................15

2.6.1

So snh NoSQL vi XML.......................................................................15

2.6.2

So snh NoSQL vi RDBMS..................................................................16

2.7

Cch trin khai mt ng dng NoSQL...........................................................19

2.7.1

Xc nh NoSQL c ph hp..................................................................19

2.7.2

Thit k cu trc d liu dng document.................................................20

CHNG 3 Phn loi C S D LIU NOSQL..........................................23


3.1

Key-Value Store.............................................................................................23

3.2

Column Families / Wide Column Store.........................................................24

3.3

Document database........................................................................................26

3.4

Graph Database..............................................................................................27

3.5

Lm sao la chn mt gii php c s d liu tt.....................................29

3.6

Tm hiu mt s loi NOSQL ph bin.........................................................31

3.6.1

Hadoop....................................................................................................31

3.6.2

Cassandra................................................................................................31

3.6.3

MongoDB...............................................................................................33

3.6.4

CouchDB................................................................................................34

CHNG 4 - TM HIU V RAVENDB..........................................................36


4.1

Ti sao chn RavenDB..................................................................................36

4.2

Gii thiu v RavenDB..................................................................................37

4.3

L thuyt c bn RavenDB............................................................................38

4.3.1

RavenDB server......................................................................................38

4.3.2

Documents, Collections v Document xc nh duy nht:......................39

4.3.3

The Management Studio.........................................................................39

4.3.4

To kha cho cc document....................................................................41

4.3.5

Thit k cu trc document.....................................................................41

4.4

.NET client API.............................................................................................43

4.4.1

Gii thiu .NET client API......................................................................43

4.4.2

Nguyn tc thit k .NET client API.......................................................43

4.4.3

Kt ni ti RavenDB data store...............................................................44

4.4.4

Nhng thao tc c bn vi c s d liu.................................................45

4.4.5

Truy vn d liu......................................................................................48

4.4.6

Qun l mi quan h gia cc document.................................................58

4.5

Tng quan HTTP API....................................................................................65

4.6

M rng h thng theo chiu ngang( scaling out hay l scaling horizontally)
65

4.6.1

Replication..............................................................................................65

4.6.2

Sharding..................................................................................................66

4.6.3

Kt hp Replication v Sharding............................................................70

4.7

So snh hiu sut RavenDB vi MSSQL Express 2012................................71

4.8

So snh RavenDB vi CouchDB v MongDB...............................................73

CHNG 5-XY DNG NG DNG S DNG RAVENDB......................75


5.1

Gii thiu v ng dng..................................................................................75

5.2

L do la chn ng dng ny........................................................................75

5.3

Phn r chc nng website.............................................................................75

5.4

Y tng thit k.............................................................................................77

5.4.1

Thit k m hnh 3 tng (3 Tier): Clients Web server Database server


77

5.4.2
5.5

Phn tch, thit k h thng............................................................................79

5.5.1

Use case..................................................................................................79

5.5.2

M t Use case........................................................................................83

5.5.3

Class diagram..........................................................................................89

5.5.4

Sequence diagram...................................................................................90

5.6

Kin trc Website....................................................................................78

Thit k giao din..........................................................................................97

5.6.1

Danh sch mn hnh................................................................................97

5.6.2

M t giao din ngi dng....................................................................98

CHNG 6 KT LUN...............................................................................102
6.1

Kt qu t c..........................................................................................102

V mt l thuyt:........................................................................................102

V mt thc nghim: Xy dng c mt ng dng DaHu Groups (c cc

chc nng c bn ging Google Groups) s dng c s d liu RavenDB trn

nn Web. ng dng tuy khng qu quy m nhng cng p dng c nhng


k thut c bn v nng cao ca RavenDB v ng dng th hin tc vt
tri khi hot ng vi mt lng ln d liu, p ng c yu cu ra.......102
6.2
7

Hng pht trin..........................................................................................102

PH LC..........................................................................................................103
7.1

Tnh nng y ca RavenDB..................................................................103

7.2

Gii thiu m hnh ASP.NET MVC4...........................................................106

TI LIU THAM KHO

Trang 1

DANH MC CC BNG, S
Bng 1.1: Hiu sut hot ng trn MySQL v Cassandra............................................4
Bng 2.1: Bng tng quan gia RDBMS v NoSQL..................................................7
Bng 3.1: Cc trin khai ca document database........................................................35
Bng 3.2: Cc trin khai ca graph database...............................................................38
Bng 5.1: M t Usecase ng nhp..........................................................................110
Bng 5.2: M t Usecase ng k.............................................................................111
Bng 5.3: M t Usecase xem Group public.............................................................111
Bng 5.4: M t Usecase tm kim............................................................................112
Bng 5.5: M t Usecase xem topic..........................................................................112
Bng 5.6: M t Usecase ng bnh lun...................................................................113
Bng 5.7: M t Usecase ng topic.........................................................................113
Bng 5.8: M t Usecase xo Topic..........................................................................114
Bng 5.9: M t Usecase to group...........................................................................115
Bng 5.10: Danh sch mn hnh................................................................................124
Bng 7.1: Lch s pht trin ca ASP.NET MVC......................................................130

S 5.1: S phn r chc nng ca Owner........................................................103


S 5.2: S phn r chc nng ca Manager.....................................................103
S 5.3: S phn r chc nng ca Member.....................................................103
S 5.4: S thit k m hnh 3 tng: Clients Web server Database server...104
S 5.5: S kin trc website............................................................................105
S 5.6: Use case trong trng hp cha ng nhp.............................................106
S 5.7: Use case ca Member..............................................................................107
S 5.8: Use case ca Manager..............................................................................108
S 5.9: Use case ca Owner.................................................................................109
S 5.10: S lp cung cp cc chc nng chnh cho website............................116
S 5.11: Sequence diagram ca chc nng Login................................................117
S 5.12: Sequence diagram thc hin chc nng Register...................................118
S 5.13: Sequence diagram ca chc nng Create Group....................................119
S 5.14: Sequence diagram ca trang Home........................................................120
GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 2

S 5.15: Sequence diagram ca chc nng Join Group........................................121


S 5.16: Sequence diagram ca chc nng Accept Member................................121
S 5.17: Sequence diagram ca chc nng Create Topic.....................................122
S 5.18: Sequence diagram ca chc nng ng bnh lun..................................123
S 5.19: Sequence diagram ca chc nng tm kim...........................................124

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 3

DANH MC CC HNH
Hnh 2.1: V d c bn v Key/ value...........................................................................8
Hnh 2.2: S thit k h thng database Master -Slave............................................8
Hnh 2.3: So snh cch thit k gia NoSQL v RDBMS.............................................9
Hnh 2.4: V d v thit k d liu chun ho v document ca NoSQL....................14
Hnh 2.5: V d v thit k d liu chun ho v document ca NoSQL....................15
Hnh 2.6: M hnh d liu quan h cho ng dng blog n gin................................16
Hnh 3.1: Key-Vule store............................................................................................24
Hnh 3.2: Column Famies...........................................................................................26
Hnh 3.3: Super Column.............................................................................................26
Hnh 3.4: Biu din mt dng trong Column family database....................................28
Hnh 3.5: Biu din 2 tweet trong Column family database........................................28
Hnh 3.6: Biu din index th hai, lin kt users v tweets trong Column Family database. 29
Hnh 3.7: Graph database............................................................................................36
Hnh 3.8: V d v cc nt trong mt graph database..................................................36
Hnh 4.1: RavenDB.....................................................................................................43
Hnh 4.2: Kin trc client-server.................................................................................43
Hnh 4.3: RavenDB server..........................................................................................46
Hnh 4.4: Management studio.....................................................................................47
Hnh 4.5: V d v blog n gin................................................................................49
Hnh 4.5: Cu trc mt document trong document database.......................................49
Hnh 4.6: Qun l mi lin h.....................................................................................51
Hnh 4.7: V d h thng phn cp k tha.................................................................75
Hnh 4.8: Phn tn vi cc nt chuyn i d phng chuyn dng.............................98
Hnh 4.9: Phn tn vi cc nt chuyn i d phng ni b.......................................98
Hnh 4.10: Cc tp tin trong th mc gi RavenDB chnh..........................................99
Hnh 5.1: Mn hnh chnh ca chng trnh..............................................................125
Hnh 5.2: Mn hnh to mi bi vit.........................................................................125
Hnh 5.3: Mn hnh danh sch bi vit......................................................................126
Hnh 5.4: Mn hnh bi vit v tt c bnh lun.........................................................126
Hnh 5.5: Mn hnh ci t Group.............................................................................127

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 4

Hnh 7.1: Mu kin trc Model View Controller.................................................129


Hnh 7.2: Scalable.....................................................................................................131
Hnh 7.3: Index replication to SQL...........................................................................132
Hnh 7.4: Geo-spatial search support........................................................................133
Hnh 7.5: Multi-tenancy............................................................................................133
Hnh 7.6: Cloud hosting available.............................................................................134

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 5

1 CHNG 1 - GII THIU TI


1.1 Vn tm hiu
Trong khong hn 2 thp nin tr li y, h qun tr c s d liu quan h RDBMS l s la chn duy nht cho vic qun tr c s d liu. Tuy nhin, vi cc
yu cu mi hin nay th RDBMS bc l yu im. Chnh s qu cht ch, yu cu
nht qun d liu gy ra s rm r, phc tp lm gim hiu xut hot ng, nht
l trong trng hp phi cha mt lng ln d liu. Nhng vi s bng n cng
ngh nh hin nay, nht l vi mng Internet th lng d liu cn lu tr ngy cng
tng. Yu cu cho vic lu tr ngy cng cao nh: lu tr nhiu d liu, tc truy
xut nhanh, phn tn d liu trn nhiu my ch th vi m hnh c s d liu quan
h nh hin nay th r rng khng th p ng cc yu cu trn.
Mi vn u c gii php. Tht vy, nhng nm gn y ni ln mt xu
hng lu tr mi, mt cch thc tri ngc vi c s d liu quan h - l c s
d liu phi quan h - NoSQL. NoSQL sinh ra khc phc cc vn m mt c s
d liu dng RDBMS gp phi. NoSQL sinh ra khng phi cnh tranh vi RDBMS
m l m nhim nhng vic m RDBMS cha lm tt.
Mc tiu m NoSQL nhm n l hiu sut hot ng cao vi s lng d
liu cc ln. Tuy nhin t c iu th NoSQL b qua thng dch trong
SQL cng vi nhng truy vn rm ra. Vic s dng cc rng buc quan h cng truy
vn SQL c v thn thin v thch hp vi phn ng d liu. Tuy nhin, nu d liu
qu n gin, cc th tc SQL s khng cn thit (theo Curt Monash - mt nh phn
tch c s d liu, mt blogger). ng thi NoSQL cng c cch thit k d liu khc
vi c s d liu truyn thng nh: t tng thit k d liu phi quan h, lu tr d
liu dng document, s dng ti a indexes Trong cc c tnh , d liu phi quan
h l mt yu t quan trng gp phn lm nn thnh cng cho NoSQL. D liu phi
quan h tc l khng tun theo cc dng chun ha m c s d liu RDBMS t ra.
Thay vo , khi thit k mt c s d kiu NoSQL ta phi tun theo mt s quy tc
mi m NoSQL t ra t c hiu sut hot ng cao.
Bng di y ch ra kt qu lm vic trn MySQL v c s d liu Cassandra
ca Facebook.
Facebook Search
> 50 GB Data
Writes Average
Reads Average

MySQL
~300ms
~350ms

Cassandra
0.12ms
15ms

Bng 1.1: Hiu sut hot ng trn MySQL v Cassandra

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 6

Chnh s khc bit gia 2 loi c s d liu ny dn n cch thit k cng khc
nhau. a s cc lp trnh vin u quen vi m hnh quan h truyn thng, do cn
phi tm hiu k cch thit k d liu ca NoSQL t c hiu sut mong mun.
ng rng RDBMS cung cp mt m hnh tuyt vi m bo tnh ton vn
d liu. Tuy nhin, rt nhiu ngi la chn NoSQL ni rng chng khng qu cn
thit cho nhu cu ca h.
Nh vy, trong ti ny chng ti s tm hiu xem NoSQL gii quyt cc
vn trn nh th no v p dng kin thc tm hiu vo vic xy dng mt ng
dng s dng c s d liu dng NoSQL.

1.2 Mc tiu ti
Vi nhng vn nu trn, ny ny cn t c cc mc tiu nh sau:
-

Tm hiu NoSQL, kin trc, phn loi v c im tng loi c ci nhn


tng quan v NoSQL ng thi bit c cch m NoSQL gii quyt c
vn hiu sut cao vi lng d liu ln nh th no.

Tm hiu trng hp p dng c s d liu dng NoSQL, trng hp no


khng ph hp vi NoSQL. Phn tch lm r u khuyt im ca vic p dng
c s d liu NoSQL. So snh gia vic s dng c s d liu RDBMS hoc
XML v c s d liu NoSQL trn cng mt ng dng. So snh hiu sut gia
mt c s d liu dng NoSQL v c s d liu dng RDBMS lm r hiu
sut hot ng ca NoSQL.

Tm hiu tng quan cc c s d liu NoSQL ph bin nh: RavenDB,


Hadoop, Cassandra, MongoDB, CouchDB.

Do c bn loi c s d liu NoSQL (xem chi tit ti chng 3 Cc gii php


c s d liu NoSQL) nn chng em tp trung tm hiu cch thit k d liu
cho c s d liu loi Document database l loi ph bin nht. Sau tm hiu
chi tit v k thut ca mt c s d liu thuc loi ny l RavenDB.

S dng cc kin thc v RavenDB xy dng mt ng dng s dng c s


d liu NoSQL ng thi tng hp li kin thc hc trc y. y
chng ti quyt nh xy dng mt website cho php cc ngi dng c th
tho lun v vn no (vi cc chc nng c bn nh Google Group) bi
v ng dng c cc tnh cht ph hp vi c s d liu dng NoSQL.

1.3 Ni dung bo co
Ni dung ti c t chc thnh 6 chng:
Chng 1 Gii thiu ti: Trong chng ny s trnh by v vn cn tm hiu
trong lun vn ny, mc tiu cn t c ca lun vn.

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 7

Chng 2 Tng quan v c s d liu NoSQL: Ni dung chng ny s trnh by


kin thc tng quan v NoSQL, phn tch u nhc im ca c s d liu NoSQL.
Chng 3 Cc gii php c s d liu NoSQL: Ni dung chng ny m t 4 loi
gii php ca NoSQL. Vi mi loi s gii thiu khi qut v trng hp p dng.
Chng 4 Tm hiu v RavenDB: Chng ny chng em s tm hiu k v k thut,
cch p dng ca mt c s d liu thuc loi document database l RavenDB.
Chng 5 Xy dng ng dng s dng RavenDB: S dng kt qu tm hiu ca cc
chng trn p dng vo xy dng mt ng dng s dng RavenDB l c s d
liu.
Chng 6 Kt lun: Chng cui ny, chng em ghi nhn li kt qu t c cng
nh hn ch ca bo co v chng trnh. Ngoi ra, chng em cng trnh by nh
hng pht trin tip theo ca ng dng web ny.

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 8

2 CHNG 2 - TNG QUAN V C S D LIU NOSQL


2.1 Ti sao chn NoSQL?
C s d liu quan h c thit k cho nhng m hnh d liu khng qu ln trong
khi cc dch v mng x hi li c mt lng ln d liu v cp nhp lin tc do s
lng ngi dng qu nhiu. Do c s d liu NoSQL sinh ra gii quyt cc
vn m RDBMS bc l nhng yu km nh tc thc thi, kh nng lu tr,
cc nghip v phc tp (phn trang, nh ch mc, ). Nh vy gii php s dng c
s d liu NoSQL s mang li mt chi ph thp hn nu so snh vi RDBMS truyn
thng.
NoSQL va mang li mt gii php tt hn va tit kim chi ph hn do NoSQL c
hiu sut lm vic tt hn v cc c s d liu NoSQL thng l min ph. Ngoi tr
mt s trng hp t bit, vi cng mt chi ph th gii php s dng NoSQL s
mang li li ch to ln. Hy tng tng, vi mt h thng cho bn y quyn
kim sot (m ngun m), p ng c tc c thc thi, kh nng lu tr, phn tn
d liu v nht l chi ph s thp hn th NoSQL chnh l s la chn tuyt vi.
Mc khc, thng chng ta s dng rt hn ch nhng kh nng m cc c s d liu
RDBMS cung cp nhng vn phi tr ph cho n. Nu khng cn n cc tnh nng
cao cp, khng cn cc chc nng ca SQL hoc rt ght vit cc cu lnh SQL th
hy ngh n NoSQL.

2.2 NoSQL l g ?
NoSQL l mt xu hng c s d liu m khng dng m hnh d liu quan h
qun l d liu trong lnh vc phn mm. NoSQL c ngha l Non-Relational
(NoRel) - khng rng buc. Tuy nhin, thut ng t ph bin hn v ngy nay
ngi ta thng dch NoSQL thnh Not Only SQL - Khng ch SQL.
NoSQL c xem nh th h database k tip ca RDBMS, l mt th h c s
d liu non-relational (khng rng buc), distributed (phn tn), open source,
horizontal scalable (kh nng m rng theo chiu ngang) c th lu tr, x l t mt
lng rt nh cho ti hng petabytes d liu trong h thng c chu ti, li cao vi
nhng i hi v ti nguyn phn cng thp. hiu thm v cc khi nim ny trong
NoSQL, c th xem chi tit phn 2.5 Mt s thut ng lin quan.
Mt s c im nhn dng cho th h database mi ny bao gm:
-

Lc t do(Schema-free).
H tr m rng d dng.
API n gin.
Eventual consistency (nht qun cui) v transactions hn ch trn cc thnh
phn d liu n l.
Khng gii hn khng gian d liu

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 9

NoSQL storage c bit ph dng trong thi k Web 2.0 bng n, ni cc mng
dch v d liu cng ng cho php ngi dng to hng t ni dung trn web. Do ,
d liu ln rt nhanh vt qua gii hn phn cng v cn phi gii quyt bng bi
ton phn tn. Na u nm 2009, ngi ta manh nha thut ng NoSQL nh du
s trng thnh ca th h database mi: distributed (phn tn) + non-relational
(khng rng buc).
Khi lm vic vi NoSQL ta s gp mt s khc nim sau:
-

Fields: tng ng vi khi nim Columns trong SQL

Document: thay th khi nim row trong SQL. y cng chnh l khi nim
lm nn s khc bit gia NoSQL v SQL, 1 document cha s ct (fields)
khng c nh trong khi 1 row th s ct(columns) l nh sn trc.

Collection: tng ng vi khi nim table trong SQL. Mt collection l tp


hp cc document. iu c bit l mt collection c th cha cc document
hon ton khc nhau.

Key-value: cp kha - gi tr c dng lu tr d liu trong NoSQL

Cursor: tm dch l con tr. Chng ta s s dng cursor ly d liu t


database.
Trong cc h c s d liu quan h, cc ct c nh ngha theo bng cn vi
h c s d liu khng rng buc, cc ct c nh ngha mi document.
Bi th, cc document qun l gn nh tt c, cc collection khng cn qun l
cht ch nhng g ang xy ra trong n na.
RDBMS

NoSQL

Columns

Fields

Row

Document

Table

Collection

Query: SQL

Query: using API

Foreign keys

Non Foreign keys

Schema

Free schema

Bng 2.1: Bng tng quan gia RDBMS v NoSQL

2.3 u nhc im ca c s d liu NoSQL:


2.3.1

u im:
-

Hiu sut hot ng cao: NoSQL c hiu sut hot ng cao, lu tr lng
ln d liu p ng nhu cu lu tr ngy cng tng hin nay. Tuy nhin

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 10

t c iu ny cn loi b i mt s th nh: rng buc d liu ca m hnh


quan h, tnh nht qun d liu, ngn ng truy vn SQL. ng thi NoSQL c
mt s ci tin mi nh s dng tt index, kh nng phn tn d dng gip
NoSQL c mt hiu sut hot ng rt cao.
-

Kh nng phn trang: phn trang trong c s d liu quan h kh kh khn


khi khng c mt phng php chnh thng no phc v cho vic ny.
Ngi lp trnh phi dng cc phng php khc nhau c th ly ng s
item cn ly. Trong khi NoSQL h tr rt tt vic ny ng thi hiu sut khi
phn trang khng h gim.

NoSQL l ngun m: Cc sn phm ngun m a ra cho nhng ngi pht


trin vi nhiu li ch to ln, trong vic s dng min ph l mt li ch ln.
Nhng li ch khc: phn mm ngun m c xu hng s l tin cy hn, an
ninh hn v nhanh hn trin khai so vi cc la chn thay th s hu
c quyn.V d nh cc h qun tr c s d liu (CSDL) NoSQL: Cassandra,
CouchDB, Hbase, RavenDB, MongoDB v Redis.

Vic m rng phm vi l mm do: NoSQL thay th cu thn ch c ca cc


nh qun tr CSDL v 'm rng phm vi' vi mt th mi: 'm rng ra ngoi'.
Thay v b sung thm cc my ch ln hn iu khin nhiu ti d liu
hn, th CSDL NoSQL cho php mt cng ty phn tn ti qua nhiu my ch
khi m ti gia tng.

Cc CSDL NoSQL khc nhau cho nhng d n khc nhau:


MongoDB v Redis l nhng la chn tt cho vic lu tr cc d
liu thng k t c c m li c vit thng xuyn, nh mt s
m truy cp web chng hn.
Hadoop, mt CSDL dng t do, phn tn lm tt cng vic lu tr cc
d liu ln nh cc con s thng k thi tit hoc cng vic phn
tch nghip v.
Memcache, mt CSDL nht thi chng tn, tuyt vi trong lu tr
cc phin lm vic web, cc kha, v cc con s thng k ngn hn.
Cassandra v Riak (cc lu tr d tha, t ng to b cluster) lm
tt trong cc mi trng vi cc ng dng c tnh sn sng cao, khi
thi gian sng ti a l sng cn.

NoSQL c cc hng ln s dng: Cc cng ty nh Amazon, BBC,


Facebook v Google da vo cc CSDL NoSQL.

NoSQL ph hp vi cng ngh m my: NoSQL v m my l mt s


trng khp t nhin. Cc my ch ngy nay l khng t v c th d dng m
rng phm vi c theo yu cu c s dng mt dch v nh l Amazon EC2.

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 11

Ging nh tt c cng ngh m my, EC2 da vo o ha. Lin kt yu ca


o ha l s thc thi ca I/O, vi b nh v CPU cc cc kt ni mnh.
-

2.3.2

Cc CSDL NoSQL hu ht s dng b nh qua a nh l v tr ghi u tin v th ngn nga c s thc thi khng n nh ca I/O. V v NoSQL lu
tr d liu thng thc y c tnh m rng phm vi theo chiu ngang
thng qua vic ngn chia, chng c kh nng tn dng c vic cung cp
mm do ca m my.
Nhc im:

Cu trc d liu phi quan h: vi cu trc d liu phi quan h gip


NoSQL gim i rt nhiu tnh ton khng cn thit. iu ny dn n d liu
s khng rng buc chc ch v nh hng tnh nht qun d liu. Nh vy vi
cc ng dng yu cu d liu phi chc ch nh ng dng v ti chnh, ngn
hng vi cc con s phi rt chnh xc th NoSQL khng phi mt s la chn
tt.
Ngun m c th c ngha l s h tr khng ng u cho cc doanh
nghip:
Trong khi cc nh cung cp ch cht ca RMBMs nh Oracle, IBM hay
Sybase a ra s h tr tt ni ting cho cc khch hng doanh nghip
c va, th cc doanh nghip nh hn, thng l cc nh cung cp
ngun m mi thnh lp khng th mong i c cung cp s h tr
c th so snh c (ngoi tr mt nhm cc khch hng blue chip).
Nh cung cp ngun m trung bnh thiu s tip cn ton cu, cc dch
v h tr v s tin cy ca Oracle hay IBM.

Cha chn cho cc doanh nghip: D chng c trin khai ti mt


s cng ty ln th cc CSDL NoSQL vn i mt vi mt vn v s tin cy
chnh vi nhiu doanh nghip. im sng cn ca NoSQL l thiu v
chn mui v cc vn v tnh khng n nh, trong khi tnh chn mui,
h tr y chc nng v tnh n nh ca cc RDBMS c thit lp t
lu.

Nhng hn ch v tri thc nghip v: C mt vi cu hi xung quanh nhng


kh nng v tri thc nghip v (BI) ca cc CSDL NoSQL. Liu
cc CSDL ny c th cung cp dng phn tch d liu ln v mnh m cc
doanh nghip quen vi cc RDBMS? Cn bao nhiu s tinh thng v lp
trnh cn c tin hnh nhng truy vn v phn tch hin i?
Cc cu tr li l khng tch cc. Cc CSDL NoSQL khng c nhiu s
eo bm ti cc cng c BI thng c s dng, trong khi nhng yu
cu v phn tch hin i n gin nht th cng lin quan khc nhiu
ti s tinh thng v lp trnh. Tuy vy, cc gii php l sn sng. Quest

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 12

Software, v d, to ra Toad cho cc CSDL m my, m n phn


phi cc kh nng truy vn hin i ti mt s CSDL NoSQL.
-

Thiu s tinh thng: Tnh rt mi m ca NoSQL c ngha l khng c nhiu


lp trnh vin v ngi qun tr m bit cng ngh ny - l kh khn cho cc
cng ty tm ngi vi s tinh thng ph hp. i li, th gii ca RDBMS c
hng ngn nhng ngi t cch.

Nhng vn v tnh tng thch: Khng ging nh cc CSDL quan h, cc


CSDL NoSQL chia s t theo cch thc ca cc tiu chun. Mi CSDL NoSQL
c cc giao din lp trnh ng dng API ring ca mnh, cc giao din truy vn
c nht v nh, v nhng s ring bit. S thiu ht cc tiu chun c ngha l
n khng c kh nng chuyn mt cch n gin t mt nh cung cp ny
sang mt nh cung cp khc nu bn khng hi lng vi dch v.

2.4 Kin trc


Cc RDBMS hin ti bc l nhng yu km nh vic nh ch mc mt
lng ln d liu, phn trang, hoc phn phi lung d liu media (phim, nh,
nhc...). C s d liu quan h c thit k cho nhng m hnh d liu nh thng
xuyn c vit trong khi cc Social Network Services li c mt lng d liu cc ln
v cp nht lin tc do s lng ngi dng qu nhiu mt thi im. Thit k trn
Distributed NoSQL gim thiu ti a cc php tnh ton, I/O lin quan kt hp vi
batch processing m bo c yu cu x l d liu ca cc mng dch v d liu
cng ng ny. Facebook, Amazon l nhng v d in hnh.
V c bn, cc thit k ca NoSQL la chn m hnh lu tr tp d liu theo cp
gi tr key-value. Khi nim node c s dng trong qun l d liu phn tn.

Hnh 2.1: V d c bn v Key/ value


Vi cc h thng phn tn, vic lu tr chp nhn trng lp d liu. Mt yu cu
truy vn d liu c th gi ti nhiu my cng lc, khi mt my no n b cht cng
khng nh hng nhiu ti ton b h thng. m bo tnh thi gian thc trong cc

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 13

h thng x l lng ln d liu, thng thng ngi ta s tch bit database ra lm 2


hoc nhiu database nh s di y:

Hnh 2.2: S thit k h thng database Master -Slave


Mt database nh (master database) m bo vo ra lin tc, khi t ti
ngng thi gian hoc dung lng, database nh s c gp (merge) vo database
ln c thit k ti u cho php c (read operation, slave database). M hnh cho
php tng cng hiu sut I/O - mt trong nhng nguyn nhn chnh khin
performance tr nn km.

2.5 Mt s thut ng lin quan


-

Non-relational: relational - rng buc - thut ng s dng ch n cc mi


quan h gia cc bng trong c s d liu quan h (RDBMS) s dng m hnh
kha gm 2 loi kha: kha chnh v kha ph (primary key + foreign key)
rng buc d liu nhm th hin tnh nht qun d liu t cc bng khc nhau.
Non-relational l khi nim khng s dng cc rng buc d liu cho nht qun
d liu NoSQL database.

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 14

Hnh 2.3: So snh cch thit k gia NoSQL v RDBMS


Nhn vo hnh trn ta thy NoSQL c cch thit k lng lo, khng rng buc
chc ch nh RDBMS. Cc mi lin kt gia cc Node trong NoSQL ch l
lin kt o, NoSQL khng nhn thy mi lin kt g y c. Tuy nhin nh b
qua tnh rng buc ny gip cho NoSQL c kh nng lm vic tt vi lng
d liu ln.
-

Distributed storage: m hnh lu tr phn tn cc file hoc d liu ra nhiu


my tnh khc nhau trong mng LAN hoc Internet di s kim sot ca
phn mm.

Eventual consistency (nht qun cui): tnh nht qun ca d liu khng cn
phi m bo ngay tc khc sau mi php write. Mt h thng phn tn chp
nhn nhng nh hng theo phng thc lan truyn v sau mt khong thi
gian (khng phi ngay tc khc), thay i s i n mi im trong h thng,
tc l cui cng (eventually) d liu trn h thng s tr li trng thi nht
qun.

Vertical scalable (kh nng m rng chiu dc): Khi d liu ln v


lng, phng php tng cng kh nng lu tr v x l bng vic ci tin
phn mm v ci thin phn cng trn mt my tnh n l c gi l kh
nng m rng chiu dc. V d vic tng cng CPUs, ci thin a cng, b
nh trong mt my tnh... cho RDBMS nm trong phm tr ny. Kh nng m
rng chiu dc cn c mt thut ng khc scale up.

Horizontal scalable (kh nng m rng chiu ngang):

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 15

Khi d liu ln v lng, phng php tng cng kh nng lu tr v


x l l dng nhiu my tnh phn tn. Phn tn d liu c h tr bi
phn mm tc c s d liu.
Trong khi gi thnh phn cng ngy cng gim, tc x l, b nh
ngy cng tng th horizontal scalable l mt la chn ng n. Hng
trm my tnh nh c chp li to thnh mt h thng tnh ton mnh
hn nhiu so vi vi x l RISC truyn thng n l. M hnh ny tip
tc c h tr bi cc cng ngh kt ni Myrinet v InfiniBand. T
chng ta c th qun l, bo tr t xa, xy dng batch procession (x l
ng lot tp lnh) tt hn. Do nhng i hi v tc x l I/O cao,
lng cc ln d liu,... scale horizontally s thc y cc cng ngh
lu tr mi pht trin ging nh object storage devices (OSD).
-

2.6 So snh NoSQL vi cc loi c s d liu khc


thy s khc bit ca NoSQL vi cc phng thc lu tr khc, chng ti s so
snh NoSQL vi XML v RDBMS. L do la chn XML v RDBMS so snh l
v:
-

XML l phng thc lu tr d liu dng vn bn tng t nh cch lu tr

ca mt s NoSQL s dng encoding l XML hoc JSON.


RDBMS l h qun tr c s d liu rt thnh cng vi m hnh d liu quan
h cho h thng va v nh.

2.6.1
So snh NoSQL vi XML
C NoSQL v XML u c phng thc lu tr tng t nhau: lu dng vn bn.
XML dng lu tr d liu s dng cc th nh du. Tuy nhin s dng XML
nh mt c s d liu s c mt s thun li v kh khn nh sau:
-

Thun li: c th kim sot tt c, nm c lung x l ca h thng.


Kh khn: XML ch l cc file vn bn nn khng c mt platform cho truy
sut d liu do cn phi xy dng mi hon ton lp thao tc d liu vi
XML nh insert, delete, update, query nh vy rt tn chi ph. Ngoi ra vic t
xy dng nhiu khi mang n mt kt qu khng tt v d nh source code
cha c ti u, cha c gii thut tt.

Do , hiu sut hot ng c tt hay khng ph thuc rt nhiu vo lp mi m


ngi lp trnh to ra. Nn khng c mt m bo no cho vic s dng XML c th
cho hiu sut tt hn NoSQL khi m:

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 16

C s d liu NoSQL c cc nh lp trnh chuyn nghip xy dng ra vi


nhiu gii thut, kh nng ti u source code cao mang n mt hiu sut lm

vic tuyt vi.


Cc c im khc nh: kh nng phn tn d liu, nh s index, phn trang,
transaction hoc cc gi h tr nng cao nh bo mt, m ho thng tin th
kh m lp trnh ra.

Nh vy, NoSQl lm tt nhim v ca n ng thi cn l m ngun m th ta


u c l do g phi xy dng mt h thng lu tr mi d trn cc file XML y
kh khn.
2.6.2
So snh NoSQL vi RDBMS
Nh cp trn, c s d liu NoSQL sinh ra gii quyt cc vn m
RDBMS bc l nhng yu km nh tc thc thi, kh nng lu tr, cc nghip
v phc tp (phn trang, nh ch mc, ) v tht s NoSQL lm c iu .
thy hiu sut m NoSQL t c, hy xem 2 biu di y l kt qu ca
php so snh gia MongoDB (mt c s d liu NoSQL) v MSSQL 2008.

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 17

Kt qu insert data

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 18

Kt qu truy vn data

Bng so snh sau y s cho chng ta thy s khc nhau gia NoSQL v c s d liu
quan h:
c im
Hiu sut

GVHD: Ths. Phm Thi Vng

CSDL quan h
Km hn
SQL
Relational gia cc table

NoSQL
Cc tt
B qua SQL
B qua cc rng buc d liu

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 19

Kh nng m rng

Hn ch v lng.

Hiu sut c-ghi

Km do thit k m bo
s vo/ra lin tc ca d liu

Phi shutdown c h thng.


Thay i s node trong
Vic thay i s node phc
h thng
tp.
Phn cng

i hi cao v phn cng.

H tr mt lng rt ln cc
node.
Tt vi m hnh x l l v
nhng ti u v c-ghi d
liu.
Khng cn phi shutdown c
h thng.
Vic thay i s node n
gin, khng nh hng n h
thng.
i hi thp hn v gi tr v
tnh ng nht ca phn cng

Nh vy, NoSQL khc phc rt nhiu nhc im ca c s d liu quan h v mang


n mt gii php rt tt cho nhu cu lu d ln.

2.7 Cch trin khai mt ng dng NoSQL


Trong phm vi ca lun vn ny, chng ti ch tp trung vo loi ph bin nht
trong c s d liu NoSQL l loi Document Store. Do trong mc ny, chng
ti s trnh by cch trin khai mt ng dng s dng c s d liu NoSQL loi
Document Store.
hiu r cc loi ny, vui lng xem Chng 3: Tm hiu cc gii php c s
d liu NoSQL.
2.7.1

Xc nh NoSQL c ph hp

Khi lm vic vi mt lng ln d liu, bn hy ngh n NoSQL. NoSQL rt


thch hp lm vic vi d liu ln bng cch loi b cc rng buc ton vn d
liu, cch thit k m hnh phi chun ho, cch s dng index. gip NoSQL tr
nn mnh m lm vic vi lng ln d liu. Tuy nhin, c mt s tnh cht sau
y cn lu khi la chn c s d liu NoSQL.
Nh cp trong mc 2.5 Mt s thut ng lin quan, tnh nht qun cui
(Eventual consistency) cn phi c ng dng chp nhn. C ngha l ng dng
khng yu cu rng buc d liu, khng yu cu d liu phi cp nhp chnh xc ngay
tc th. Mt s ng dng ph hp nh cc trang mng x hi, cc ng dng ghi log t
ng Cc ng dng loi ny chp nhp d liu c trong mt khong thi gian ngn
trc khi c cp nhp mi. i li chng ta t c nhng tiu chun cao v kh
nng m rng v hiu qu v chi ph, trong khi phc v lin tc hng triu khch hng
t khp ni trn tri t. t bit chng ta t c mt hiu sut hot ng cao hn
gp nhiu ln nh vo vic loi b cc yu cu nht qun d liu.

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 20

Cc ng dng khng ph hp vi c s d liu NoSQL l cc ng dng yu cu


tnh nht qun d liu cao. Tnh nht qun d liu c xem nh tnh sng cn ca
ng dng. V d nh cc ng dng ti chnh, ngn hng vi cc con s lun c
cp nhp v cn c cp nhp tc th. S chm tr c th phi tr gi rt t. Bi th
nu cc ng dng ca bn thuc loi ny th hy la chn c s d liu RDBMS vi
m hnh quan h truyn thng.
Cc yu cu phn tch hin i (BI) cng khng ph hp vi c s d liu
NoSQL ny. Bi v NoSQL h tr rt t cc cu truy vn. Tt c u ph thuc vo s
tinh thng lp trnh. Nh vy, vi mt yu cu phn tch n gin th cng cn n lp
trnh trong . Trong khi vi c s d liu RDBMS s dng ngn ng SQL truy
vn, SQL gip chng ta rt nhiu vic trong truy vn, phn tch.
2.7.2

Thit k cu trc d liu dng document

NoSQL lu tr d liu khng theo mt lc c nh, n c lc ty ty


bin. Nhng iu khng c ngha rng chng ta khng nn dnh nhiu thi gian
xem xt lm th no thit k cc document m bo rng chng ta c th truy
cp tt c d liu chng ta cn phc v cc yu cu ca ngi dng mt cch hiu
qu, ng tin cy v chi ph bo tr t nht c th.
Li in hnh nht m chng ta mc phi l c gng thit k m hnh d liu ca
document database ging vi cch chng ta thit k m hnh d liu trong c s d
liu quan h.
NoSQL lu tr d liu phi quan h. C gng thit k theo m hnh quan h th
chng ta s c c nhiu kt qu tt. Nhng chng ta s t c kt qu v cng to
ln nu s dng nhng im mnh ca document database. Hy xem xt v d sau y
so snh 2 cch thit k: thit k chun ho v thit k document:
V d yu cu qun l thng tin sn phm (Product). Cc thng tin ca mt sn
phm gm c: ID, gi, m t sn phm.
-

i vi sn phm sch c thm thng tin: tc gi, tiu , ngy xut bn.
i vi sn phm Album nhc c thm thng tin: nhc s, tn Album. Trong
mi Album c nhiu bi ht, mi bi ht c tn tn bi ht.
i vi sn phm qun Jean c thm thng tin: Model, chiu di,chiu rng.

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 21

Hnh 2.4: V d v thit k d liu chun ho v document ca NoSQL


Vi thit k chun ho, cc table quan h kho ngoi vi nhau to nn tnh nht
qun d li u. Nhng vi cch thit k document, chng ta gom tt c vo m t
document v khng chia ra nhiu table. Nn khi cn truy xut d li u, chng ta ch
cn m t vi truy vn ly c tt c d li u cn thit m khng cn dng n cc
kho ngoi rm r.
Tm li, t tng thit k y l i ngc li vi thit k chun ho, mc tiu
sao cho hn ch cc php join rm r. y chng ta c th chp nh p d li u d
tha v khng thng nht trong 1 khong thi gian v sau s c c p nh p li.
B li ta nh n c m t hi u sut hot ng mnh m vi lng ln d li u.
Vn t ra khi ta cn c p nh p d li u. Nh v d sau y, tn ca
Customer cn c c p nh p . i vi thit k chun ho, ta ch cn c p nh p 1
ni l table Customer. Nhng i vi thit k document th khc, tn ca Customer
t nhiu ni: trong object Customer v trong cc object Order. n y th khng
c m t quy tt no ht. Vi c c p nh p li tn ca Customer l ph thu c vo chng
trnh. Khi xy dng chng trnh, ta phn tch xem tn ca Customer c cn c c p
nh p tt c cc ni hay ch cn 1 s ni. T ta s vit code cho vi c c p nh p

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 22

ny. Tt c u do phn tch cho tng chng trnh sao cho hi u sut hot ng tt
nht v nghi p v vn ng.
Normalization
Customer
Id
Name
Phone
Address
Order
Id
CustomerId
OrderDate

OrderDetail
Id
OrderId
ProductId
Price
Quantity

Document
Product
Id
Name
Price

Prod
uct
Id
Name
Price

Customer
Id
Name
Phone
Address
Order
Id
CustomerId
CustomerNa
me
OrderDate
ListProducts
:
ProductId
ProductNam
e
Price
Quantity

Hnh 2.5: V d v thit k d liu chun ho v document ca NoSQL


-

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 23

3 CHNG 3 PHN LOI C S D LIU NOSQL


C s d liu NoSQL c phn loi theo cch m n lu tr d liu v gm c 4
loi chnh:

3.1 Key-Value Store


C s d liu NoSQL n gin nht chnh l Key/Value stores. N n gin nht
l v nhng API ca n n gin, nhng trin khai thc t ca NoSQL thng rt phc
tp. Hu ht Key/Value stores thng c nhng API sau:
void Put(string key, byte[] data);
byte[] Get(string key);
void Remove(string key);

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 24

Hnh 3.1: Key-Vule store


Vi key-value store th vic truy xut, xa, cp nht gi tr thc (value) u
thng qua key tng ng. Gi tr c lu di dng BLOB (Binary large object).
Xy dng mt key/value store rt n gin v m rng chng cng rt d dng.
Key/value store c hiu sut rt tt bi v m hnh truy cp d liu trong key/value
store c ti u ha ti a. Key/Value store l c s cho tt c nhng loi c s d
liu NOSQL khc.
Key-value store rt hu ch khi chng ta cn truy cp d liu theo kha. V d
nh chng ta cn lu tr thng tin phin giao dch hoc thng tin gi hng ca ngi
dng th key-value store l mt s la chn hp l bi v nh vo id ca ngi dng
chng ta c th nhanh chng ly c cc thng tin lin quan trong phin giao dch
hoc gi hng ca ngi dng . Gi mua hng ca Amazon chy trn key value
store (Amazon Dynamo). V th c th thy rng key-value store c kh nng m rng
cao. Amazon Dynamo Paper l mt v d tt nht v kiu d liu key-value store.
Rhino DHT c kh nng m rng, chuyn i d phng, khng cu hnh, l dng keyvalue store trn nn tng .Net.

3.2 Column Families / Wide Column Store


Column families database l h c s d liu phn tn cho php truy xut ngu
nhin/tc thi vi kh nng lu tr mt lng cc ln d liu c cu trc. D liu c
th tn ti dng bng vi hng t bng ghi v mi bng ghi c th cha hng triu ct.
Mt trin khai t vi trm cho ti hng nghn node/commodity hardware dn n kh
nng lu tr hng Petabytes d liu nhng vn m bo hiu sut cao.
Column family databases c bit n nhiu nht thng qua s trin khai
BigTable ca Google. Nhn bn ngoi vo n ging vi c s d liu quan h nhng
thc s th c s khc bit rt ln t bn trong. Mt trong nhng khc bit chnh l
vic lu tr d liu theo ct (trong column family databases) so vi vic lu tr d
liu theo dng (trong c s d liu quan h). S khc bit ln nht chnh l bn cht
ca n. Chng ta khng th p dng cng mt gii php m chng ta s dng trong c
s d liu quan h vo trong column families database. l bi v column family

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 25

database phi quan h. Cc khi nim sau y rt quan trng hiu c column
family database lm vic nh th no:
-

Column family (ct quan h)


Super column (siu ct)
Column (ct)

Column families: Mt column family l cch thc d liu c lu tr trn a


cng. Tt c d liu trong mt ct s c lu trn cng mt file. Mt column family
c th cha super column hoc column.

Hnh 3.2: Column Famies


Super column: Mt super column c th c dng nh mt dictionary(kiu t
in). N l mt column c th cha nhng column khc (m khng phi l super
column).

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 26

Hnh 3.3: Super Column


Column: Mt column l mt b gm tn, gi tr v du thi gian (thng thng
ch quan tm ti key-value).
Mt s loi key-value store ph bin:
-

Key/value cache in RAM: memcached, Citrusleaf database, Velocity, Redis,

Tuple space...
Key/value save on disk: Memcachedb, Berkeley DB, Tokyo Cabinet, Redis...
Eventually Consistent Key Value Store: Amazon Dynamo, Voldemort,

Dynomite, KAI, Cassandra, Hibari, Project Voldemort


Ordered key-value store: NMDB, Memcachedb, Berkeley DB...
Distributed systems: Apache River, MEMBASE, Azure Table Storage,
Amazon Dynamo ...

3.3 Document database


Khi nim trung tm ca document database l khi nim document. V c
bn th document database l mt key-value store vi value nm trong mt nh dng
c bit n (known format). Mi loi document database c trin khai khc nhau
phn ci t chi tit nhng tt c documents u c ng gi v m ha d liu
trong mt s nh dng tiu chun hoc m ha. Mt s kiu m ha c s dng
bao gm XML, YAML, JSON, v BSON, cng nh kiu nh phn nh PDF v cc ti
liu Microsoft Office (MS Word, Excel ). Trn thc t, tt c document database
u s dng JSON(hoc BSON) hoc XML.
Cc document bn trong mt document database th tng t nhau, n gn
ging vi khi nim record hay row trong c s d liu quan h truyn thng
nhng n t cng nhc hn. Documents khng bt buc phi tun theo mt lc

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 27

tiu chun cng khng cn phi c tt c cc thuc tnh, kha tng t nhau. Xem v
d di y:
Document 1
{

Document 2
{

FirstName:"Bob",

FirstName:"Jonathan",

Address:"5 Oak St.",


Hobby:"sailing"

Address:"15 Wanamassa Point


Road",
Children:[

{Name:"Michael",Age:10},
{Name:"Jennifer", Age:8},
{Name:"Samantha", Age:5},
{Name:"Elena", Age:2}
]
}
C hai document trn c mt s thng tin tng t v mt s thng tin khc
nhau. Khng ging nh mt c s d liu quan h truyn thng, ni mi record(row)
c cng mt tp hp trng d liu (fields hay columns) v cc trng d liu ny
nu khng s dng th c th c lu tr rng(empty), cn trong document database
th khng c trng d liu rng trong document. H thng ny cho php thng tin
mi c thm vo m khng cn phi khai bo r rng.
Cc document c nh du trong document database thng qua mt kha duy
nht i din cho documnet . Thng thng, kha ny l mt chui n gin.
Trong mt s trng hp, chui ny c th l mt URI hoc ng dn (path). Chng
ta c th s dng kha ny ly document t c s d liu. Thng thng, c s d
liu vn lu li mt ch s (index) trong kha ca document document c th c
tm kim nhanh chng. Ngoi ra, c s d liu s cung cp mt API hoc ngn ng
truy vn cho php bn ly cc document da trn ni dung. V d, chng ta mun truy
vn ly nhng document m nhng document c tp trng d liu nht nh vi
nhng gi tr nht nh.
Cc document database ph bin l: BaseX, ArangoDB, Clusterpoint, Couchbase
Server, CouchDB, eXist, FleetDB, Jackrabbit, Lotus Notes, MarkLogic, MongoDB,
MUMPSDatabase, OrientDB, Apache Cassandra, Redis, Rocket U2, RavenDB.
Lu : hu ht XML database u l trin khai ca document database. Mt s XML
database trong danh sch cc document database ph bin l: BaseX, eXist,
MarkLogic, Sedna.
GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 28

3.4 Graph Database


Graph database l mt dng c s d liu c thit k ring cho vic lu tr
thng tin th nh cnh, nt, cc thuc tnh.

Hnh 3.7: Graph database


Chng ta c th ngh graph database nh mt document database vi cc kiu
document c bit v cc mi quan h. Mt v d in hnh chnh l mng x hi,
c th xem hnh bn di:

Hnh 3.8: V d v cc nt trong mt graph database


Trong v d trn ta c 4 document v 3 mi quan h. Mi quan h trong graph
database th c ngha nhiu hn con tr n thun. Mt mi quan h c th mt
chiu hoc hai chiu nhng quan trng hn l mi quan h c phn loi. Mt ngi
c th lin kt vi ngi khc theo nhiu cch, c th l khch hng, c th l ngi

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 29

trong gia nhMi quan h t bn thn n c th mang thng tin. Trong v d trn ta
ch n gin lu li li loi quan h v mc gn gi (bn b, ngi trong gia nh,
ngi yu).
Vi graph database, chng ta c th thc hin cc hot ng th. Mt thao tc
c bn nht l traversal (im giao nhau). V d nh nu ta mun bit nhng ngi
bn ca ta trong th trn cng i n ung th n gin. Nhng cn bn b gin tip
th sao, lm sao ta bit c h. S dng graph database chng ta c th nh ngha
truy vn sau:
new GraphDatabaseQuery
{
SourceNode = ayende,
MaxDepth = 3,
RelationsToFollow = new[]{"As Known As", "Family", "Friend", "Romantic", "Ex"},
Where = node => node.Location == ayende.Location,
SearchOrder = SearchOrder.BreadthFirst
}.Execute();

Chng ta c th thc hin nhng truy vn phc tp hn nh lc trn cc thuc


tnh quan h, xem xt trng lng ca ngi ... Graph database thng c s
dng gii quyt cc vn v mng. Trong thc t, hu ht cc trang web mng x
hi u s dng mt s hnh thc ca graph database lm nhng vic m chng ta
bit nh: kt bn, bn ca bn
Mt vn i vi vic m rng graph database l rt kh tm thy mt
th con c lp, c ngha l rt kh ta phn tn graph database thnh nhiu mnh.
C rt nhiu n lc nghin cu cho vic ny nhng cha c bt k gii php no ng
tin cy c a ra.
Mt s sn phm tiu biu ca graph database l: Neo4J, Sones, AllegroGraph,
Core Data, DEX, FlockDB, InfoGrid, OpenLink Virtuoso,...

3.5 Lm sao la chn mt gii php c s d liu tt


Nh cc phn trn cp n cc gii php c s d liu NoSQL th mi loi
trong s c nhng im mnh v im yu ring ca n. Mt cu hi chng ta
thng hay gp l: Ti mun s dng cng ngh NoSQL X cho vic Y th lm sao?.
Vi cu hi ny, chng ta thng gp phi vn l:
-

C gng p dng cc khi nim, k thut, kinh nghim ca m hnh c s d


liu quan h truyn thng vo trong NOSQL.

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 30

C gng s dng mt loi c s d liu NoSQL trn ton b ng dng m c


th c nhng phn khc nhau ca ng dng khng ph hp vi c s d liu
NoSQL ny.

Trong mt ng dng, chng ta c th s dng key-value store lu tr thng


tin phin lm vic (session), s dng graph database phc v nhng truy vn x hi
v document database lu tr cc thc th. Nu chng ta lu tr d liu theo mt
loi c s d liu NoSQl duy nht th vic ny ging nh chng ta mun lu tr tt c
code trn mt file duy nht. Chng ta c th lm c vic ny nhng c v vng v,
khng c ti u lm. iu nn lm l c gng phn chia ng dng thnh tng phn
m mi phn thch hp vi mt m hnh truy cp d liu em li hiu qu cao nht.
V d nh trong danh mc sn phm lun lm vic vi nhng truy vn bi Product
SKU v tc l ct yu th ta nn s dng key-value store. Nhng iu khng c
ngha l n t hng cng c lu tr m chng ta cn tnh linh hot hn nn
s s dng document database
Kt lun: Trong mt ng dng chng ta c th s dng nhiu cng ngh lu tr
d liu khc nhau lm cho ng dng ca chng ta hot ng tt nht v mi phn
khc nhau ca ng c th s dng cng ngh khc nhau sao cho ph hp vi mc ch
ca chng ta. iu cng ni ln rng: trong h thng s dng nhiu cng ngh lu
tr, mt cng ngh lu tr d liu mi ch thc s c ngha khi m li ch n mang li
ln hn chi ph phi tr s dng cng ngh . Nu chng ta cn h tr lu tr cc
trng d liu ngi dng t nh ngha th chng ta nhanh chng s dng document
database hn l c gng thc hin iu vi RDBMS.
Lu : Khng nn qun RDMBS. NoSQL thc s l vit tt ca Not only
SQL(khng ch SQL). NoSQL m nhn nhng phn m RDBMS cha lm tt ch
khng phi l thay th RDBMS. V th, khi chn cng ngh lu tr d liu chng
ta cn quan tm ti vic kt hp vi RDBMS. RDBMS l mt cng c rt mnh m v
khng nn b b i ch v i th cn non tr v hp dn hn.
Trong kha lun tt nghip ny, chng ti chn Document Database lm c s
d liu NoSQL xy dng ng dng chnh. Nhng l do m chng ti chn
Document Store l:
-

V c bn th ct li ca Document Database l key-value store c lu tr


theo mt nh dng c bit n. Do , document database cng p ng
c yu cu ca mt key-value store khi cn truy cp d liu theo kha.
D liu trong document database c lu tr di nh dng m c s d
liu hiu c. Cc nh dng c th l XML, JSON, Binary JSON(BSON)
min sao c s d liu hiu c cu trc ni b ca document. Thc t th
hu ht cc ng u s dng JSON (hoc BSON) hoc XML. y u l
nhng nh dng c s dng rt ph bin v con ngi c th c c.

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 31

C s d liu hiu c nh dng ca d liu th n c th thc hin thao


tc trn d liu ny pha my ch v d dng hn vit cc cng c qun l
d liu v c th hin th v chnh sa d liu.
Document database c lc ty . Chng ta khng cn phi nh ngha
trc lc v tun th theo lc ny. iu ny cho php chng ta lu
tr d liu phc tp ty . C th lu tr d liu dng cy, tp hp hay dng
t in mt cch d dng.
Li ch chnh ca vic s dng document database l ngoi vic n c tt c
li ch ca key-value store th chng ta khng b gii hn bi vic truy vn
theo kha. Bng cch lu tr d liu theo nh dng c bit n m c s
d liu c th hiu c, chng ta c th yu cu my ch lm vic chng
hn nh truy vn. V d, cc yu cu HTTP sau s tm thy tt c ti liu c
tn l Ayende:
GET /indexes/dynamic?query=name:ayende

Bn cnh vic c th truy vn d liu, document database cn c th:


Thc hin php chiu d liu ca mt document sang mt nh dng
khc.
Chy php tnh tp hp trn mt tp hp cc document.
Cp nht mt phn d liu (c ngha chng ta khng cn load ln ton
b mt thc th, thay i v lu xung li)
Li ch quan trng ca vic s dng document database l lm vic vi cc
documents. Khng c hoc c rt t tr khng khng ph hp gia i tng
v document. iu ny c ngha l vic lu tr d liu trong document
database s d dng hn rt nhiu so vi vic s dng RDBMS trong trng
hp m d liu cn lu tr c cu trc phc tp. Chng ta thng kh vt v
thit k m hnh d liu vt l trong RDBMS bi v cch chng ta t d
liu trong c s d liu v cch chng ta ngh v n trong ng dng hon
ton khc nhau. Hn na trong RDBMS cn c khi nim lc v sa i
lc l mt iu thc s kh khn nu chng ta trin khai trn nhiu node
ca h thng.
Document khng h tr mi quan h. iu c ngha l mi document l
c lp v chng ta s d dng phn tn d liu hn so vi RDBMS bi v
chng ta khng cn lu tr tt c cc quan h trn cng mt mnh ca h
thng v khng cn h tr php join trn h thng phn tn.

3.6 Tm hiu mt s loi NOSQL ph bin


3.6.1 Hadoop
Hadoop l mt framework ngun m vit bng Java cho php pht trin cc ng dng
phn tn c cng d liu ln mt cch min ph. N cho php cc ng dng c

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 32

th lm vic vi hng ngn node khc nhau v hng petabyte d liu. Hadoop ly
c pht trin da trn tng t cc cng b ca Google v m hnh MapReduce
v h thng file phn tn Google File System (GFS). Map/Reduce l m hnh m ng
dng s c chia nh ra thnh nhiu phn on khc nhau, v cc phn ny s c
chy song song trn nhiu node khc nhau. Thm vo , Hadoop cung cp 1 h thng
file phn tn (HDFS) cho php lu tr d liu ln trn nhiu node. C Map/Reduce v
HDFS u c thit k sao cho framework s t ng qun l c cc li, cc h
hng v phn cng ca cc node. Hadoop gip cc nh pht trin ng dng phn tn
tp trung ti a vo phn logic ca ng dng, b qua c mt s phn chi tit k
thut phn tn bn di (phn ny do Hadoop t ng qun l).
3.6.2 Cassandra
Cassandra l mt h qun tr c s d liu ngun m, c vit bng Java vi mc
tiu chnh l tr thnh Best of BigTable. Cassandra c thit k vi kh nng x l
mt khi d liu cc ln c tri ra trn rt nhiu my ch trong khi cung cp mt
dch v c tnh sn sng cao v khng hng. N l mt gii php NoSQL bc u
c pht trin bi Facebook.
Cassandra cung cp mt cu trc lu tr theo dng key/value vi kh nng iu hng
tnh nht qun. Cc kha nh x n nhiu gi tr, ci m c gp thnh cc nhm
ct. Cc nhm ct c c nh khi c s d liu Cassandra c to ra, nhng cc
ct c th c thm vo nhm bt c lc no. Hn na, cc ct c thm vo ch
lm cc kha xc nh, bi vy cc kha khc nhau c th c s lng ct khc
nhau. Gi tr t cc nhm ct cho mi mt kha c lu tr cng nhau. iu
khin cho Cassandra l mt h qun tr d liu lai gia hng ct hoc l hng bn
ghi.
Cassandra c dng tt nht khi bn ghi nhiu hn bn c, v d y l h thng
logging nhiu nh cc mng x hi, h thng ngn hng, ti chnh chng khon. Vi
tc ghi nhanh hn tc c, n thch hp cho vic phn tch d liu thi gian
thc.
Cc c im ni bt:
-

Tnh phn cp: Mi node trong mt cm c cng mt lut. D liu c


phn tn dc theo cc cm (do mi node li c mt d liu khc nhau),
nhng khng c master bi mi mt node c th phc v bt k mt yu cu
no.

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 33

H tr nhn bn v nhn bn nhiu trung tm d liu: Vic m phng c th


c cu hnh. Cassandra c thit k cho cc h thng phn tn, c th
trin khai mt s lng ln cc node trn nhiu trung tm d liu khc nhau.
Kin trc phn phi cc c trng kha ca Casandra thch hp cho vic trin

khai nhiu tp d liu. X l d liu d tha, phng vic hng hc.


Tnh n hi: Thng lng c v ghi u tng tuyn tnh khi cc my mi

thm vo v gim c thi gian cht hoc b gin on gia cc ng dng


Tnh dung li: D liu c nhn bn ra thnh nhiu node cho kh nng
dung li. Vic nhn bn gia cc trung tm d liu khc nhau cng c h

tr. Cc node li c th c thay th m khng mt thi gian ch i.


Tnh iu hng nht qun: c v ghi a ra mt yu cu v tnh nht qun

vi vic "vic ghi khng bao gi b li".


H tr Map/Reduce: Cassandra c tch hp thm c Hadoop ng ngha vi
vic h tr map/reduce.

C truy vn theo ngn ng ring: CQL (vit tt ca Cassandra Query


Language) l mt thay th ca SQL ging vi cc giao thc RPC truyn
thng. N c iu khin bi Java v Python .

3.6.3 MongoDB
Mongo l mt c s d liu NoSQL ngun m, hiu nng cao, c tnh m rng
cao.c vit bng C++ . Dng cch lu tr BSON (Json c bin dch) vi giy
php AGPL.Thay v lu tr d liu theo cc bng nh cc c s d liu c in.
MongoDB lu cu trc d liu thnh cc vn bn da JSON vi m hnh ng (gi
l BSON), khin cho vic tch hp d liu cho cc ng dng tr nn d dng v nhanh
hn. Vi mc tiu l kt hp cc im mnh ca m hnh key-values (nhanh m tnh
m rng cao) vi m hnh d liu quan h (giu chc nng).
Mc tiu chnh ca Mongo l gi li cc thuc tnh thn thin ca SQL. Do cc cu
truy vn kh ging vi SQL nn MongoDB kh thch hp cho cc lp trnh vin
quen vi ngn ng truy vn SQL. MongoDB c mt khi lng tnh nng ln v hiu
nng cao. Vi cc loi d liu phong ph, nhiu truy vn v vic gim thi gian pht
trin trong vic m hnh ha cc i tng.

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 34

MongoDB c s dng tt nht vi nhu cu cn truy vn ng, nu bn mun nh


ngha ch mc m khng cn cc hm map/reduce. c bit nu bn cn tc nhanh
cho mt c s d liu ln v MongoDB ngoi tc c nhanh ra th tc ghi ca
n rt nhanh.
Cc c im chnh ca mongoDB l:
-

Cc truy vn Ad hoc: Mongo h tr vic tm theo trng, khong kt qu tm


v tm theo c php. Cc truy vn c th tr v cc trng c qui nh
trong vn bn v cng c th bao gm cc hm Javascript m ngi dng

cha nh ngha.
nh ch mc: Bt c mt trng no trong MongoDB u c nh ch

mc (ging nh ch mc bn RMDBs).
M phng (nhn bn): Mongo h tr m phng Master-slave. Mt master c
th iu khin vic c v ghi. Mt slave to bn sao s liu t master v ch
c s dng cho vic c v backup (khng c quyn ghi). Slave c kh

nng chn ra mt master mi nu master c b hng.


Cn bng ti: Mongo m rng theo chiu ngang bng cch s dng Sharding.
Cc lp trnh vin chn cc kha chia s nhm xc nh d liu s c phn
tn nh th no. D liu s c tch thnh cc khong da vo kha v

phn tn dc theo cc Shard.


Lu tr file: Mongo lu tr bng file h thng, rt tt cho vic cn bng ti
v nhn bn d liu. Trong cc h thng nhiu my, cc file c phn phi
v c sao ra rt nhiu ln gia cc my mt cch trong sut. Do rt hiu
qu trong vic to ra mt h thng cn bng ti v dung li tt.

3.6.4 CouchDB
CouchDB c vit bng Erlang vi mc tiu l to ra mt c s d liu bn vng,
chu li cao, d dng trong vic s dng. Dng cch lu tr thng thng l JSON vi
giy php Apache 2.0. Vi CouchDB th mi mt c s d liu l mt tp cc vn bn
ring bit. Mi vn bn t bo qun chnh n v t n bao gm m hnh ca n (cc
trng, loi ca mi trng). Mi mt ng dng c th thc thi rt nhiu c s d
liu, v d nh chng ta dng mt c s d liu lu thng tin ngi dng in thoi
v ci cn li l lu trn server. Trn mi vn bn(bn ghi) cn bao gm cc thng tin

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 35

v phin bn, khin cho vic d dng ng b cc d liu vi nhau khi c s d liu b
mt kt ni mt thi gian gia cc thit b.
CouchDB d dng MVCC (multi-Version Concurency Control ) trnh vic
deadlock c s d liu trong sut qu trnh ghi. Tc l trong khi ghi d liu, chng ta
vn c th c d liu v CouchDB sinh ra mt bn copy v chng ta c trn bn
copy . Sau khi ghi xong n s tin hnh nhp d liu gia cc thit b v xa bn
ghi c i. Dng giao thc HTTP theo RESTful vi cch thit k c kh nng chu li
cao vi vic dng views i km vi map/reduce mang li mt tc cao. Thch hp
cho rt nhiu cc thit b khc nhau nh my ch, my bn hay in thoi thng minh.
CouchDB c s dng tt nht cho cc h thng thnh thong thay i d liu nh
cc h thng CMS, cc h thng cho php trin khai nhiu trang web.
Cc c im chnh ca CouchDB:
-

Lu tr theo hng vn bn (document storage) .


S dng ng ngha ACID: Cho php iu khin vic ng b vic ghi v c

cng rt cao m khng lo b xung t.


S dng Map/Reduce v cc ch mc: Mi view c to ra bi mt hm
javascript m thc thi c 2 hnh ng map v reduce. Hm lm cho cc

vn bn kt hp vi nhau thnh mt gi tr n nht v tr v kt qu .


Kin trc phn tn c nhn bn: CouchDB c thit k vi kh nng nhn
bn 2 chiu vi cc d liu offline. Tc l ta c th chnh sa d liu offline

v sau ng b chng sau khi c kt ni tr li.


REST API: Tt c d liu u c mt a ch duy nht c ly qua HTTP.
Giao thc REST s dng cc phng thc ca HTTP nh GET, POST, PUT
v DELETE vi 4 chc nng c bn (To, c, ghi, xa, sa)

Built for Offline: C kh nng nhn bn d liu cho tng thit b v t ng


ng b d liu khi thit b hot ng tr li.

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 36

4 CHNG 4 - TM HIU V RAVENDB


4.1 Ti sao chn RavenDB
RavenDB l mt document database nn n tha hng nhng li ch to ln ca
c s d liu NoSQL ni chung v c s d liu hng ti liu ni ring. Nhng li
ch to ln ny chng ta cp nhng phn trn. Ngoi ra, RavenDB cn c
nhng c im, tnh nng ni bt khc nh sau:
-

RavenDB l mt c s d liu hng ti liu m ngun m c h tr


transactional c vit cho nn tng .NET. RavenDB a ra m hnh d liu
linh hot nhm p ng yu cu ca cc h thng th gii thc. RavenDB
cho php xy dng nhng ng dng c hiu sut cao, tr thp mt cch
nhanh chng v hiu qu.
D liu trong RavenDB c lu tr di dng JSON documents, phi lc
(scheme-less) v c th truy vn hiu qu bng cch s dng truy vn
Linq t on m .NET hay s dng cc RESTful API. RavenDB s dng
Index (s ni r hn phn tip theo) truy vn d liu mt cch nhanh
chng.
RavenDB thch hp xy dng cc ng dng web-scale (cc ng dng web
c kh nng m rng ln). RavenDB cn h tr replication (to bn sao cho
cc document) v sharding (phn tn d liu thnh cc phn nh lu trn
nhiu server khc nhau).
Xy dng ng dng trn c s h tng c nhm m rng ng k kch
thc ca ng dng (RavenDB c th lu tr n 16 terrabytes trn mt my
n).
Chy v lm vic tt trn mi trng Windows. So vi CouchDB th mun
chy CouchDB trn Windows, chng ta cn phi bin dch t Erlang source
code.
RavenDB khng ch l Server. C th nhng RavenDB vo trong ng dng.
H tr System.Transaction v c th thc hin cc transactions trong h
thng phn tn.
H tr thc hin thao tc map/reduce trn cc documents da vo truy vn
Linq
H tr y .NET client API, thc hin mu Unit Of Work, thay di s
thay i, ti u ha thao tc c/ ghi, v nhiu gi d liu khc.
C cng c qun l (Raven Studio Management) giao din web trc quan, c
th xem, thao tc v truy vn d liu.
C th m rng bng cch vit cc plugins MEF(Managed Extensibility
Framework).
H tr partial document update c ngha l khng cn phi gi ton b d
liu ca cc document theo yu cu, ch gi nhng d liu cn thit.
Thch hp cho c sn phm m ngun m v cc sn phm thng mi.

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 37

Xem ph lc 7.2 bit thm tnh nng y ca RavenDB.

4.2 Gii thiu v RavenDB


RavenDB c vit trn C# bi Hibernating Rhinos vi giy php GNU AGPL
v3.0. RavenDB l mt gii php NoSQL trn nn tng .NET c xy dng da trn
kin trc client-server. D liu c lu tr trn mt thc th my ch v nhng yu
cu d liu c th c gi ti my ch ny t mt hoc nhiu my ngi dng khc
nhau.

Hnh 4.2: Kin trc client-server


Nhng yu cu gi ti my ch c thc hin bng cch s dng nhng Client
API c sn trong bt k ng dng .NET hoc ng dng SilverLight, hoc bng cch
truy cp trc tip ti Servers RESTful API. Nu l mt .NET developer th s
dng .NET Client API l cch d nht lm vic vi RavenDB v n cung cp mt
lng ln cc tnh nng v nhiu API h tr. RESTful API lm cho RavenDB c th
c truy cp t nhiu nn tng khc nhau nh truy vn AJAX trong trang web hoc
l cc ng dng Non-Windows c vit bng Ruby-on-Rail.
Cc c im chnh ca RavenDB:
-

Mc nh an ton d liu: H tr ACID (Atomicity, Consistency, Isolation,


Durability), No locking, Automatic batching, client/server chatter projection.
.Net client API: h tr tt cho vic lp trnh trn nn tng .NET
REST API: Tt c d liu u c mt a ch duy nht c ly qua HTTP.
Giao thc REST s dng cc phng thc ca HTTP nh GET, POST, PUT
v DELETE.
D dng trin khai ng dng mt cch nhanh chng (cha n 5 pht)
Kin trc phn tn: m rng ng dng mt cch d dng bng cch s dng
tnh nng mnh m ca RavenDB cho vic m rng l Sharding v

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 38

Replication. C th kt hp c hai tnh nng ny trong cng ng dng. C h


tr multi-database.
H tr nhiu gi tin ch hu dng nh: Versioning, Expiration,
IndexReplication, Authorization, Authentication. Chng ta c th t vit cc
gi m rng cho RavenDB bng cch s dng Triggers v Responders.

4.3 L thuyt c bn RavenDB


4.3.1 RavenDB server
Mt s cch chy RavenDB server:
-

Chy ng dng console Raven.Server.exe ( ti th mc /Server/ trong gi sn


phm)
Chy RavenDB nh l mt dch v (service)
Tch hp RavenDB vi IIS trn my ch da trn Windows ca bn
Nhng vo ng dng

bt u th bn cn ti gi chng trnh v, gii nn, v chy file


Server/Raven.Server.exe. Bn s thy mn hnh nh th ny:

Hnh 4.3: RavenDB server


4.3.2 Documents, Collections v Document xc nh duy nht:
Mt thc th d liu duy nht trong RavenDB c gi l mt document (ti
liu) v tt c cc ti liu c lu tr trong RavenDB nh cc ti liu JSON. Cc
nh dng JSON c la chn v n c th lu tr phn cp, con ngi c th c
c. Mi document u c siu d liu(metadata) gn lin vi n, theo mc nh n
ch cha d liu c s dng trong ni b ca RavenDB (v d thuc tnh RavenEntity-Name lu tr cc loi thc th cho ti liu).

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 39

Collections l mt tp hp cc ti liu chia s cng mt loi thc th RavenDB.


N khng phi l mt "bng c s d liu"(database table), m l mt cch ngh ca
cc nhm ti liu. Collection l mt cu trc hon ton o, khng c ngha vt l i
vi c s d liu.
Vi RavenDB mi document c mt ID ring v duy nht, nu chng ta c gng
lu tr hai thc th khc nhau theo cng mt id (v d nh users/1) bn ghi th hai
s ghi ln bn ghi u tin m khng c cnh bo no. Quy c trong RavenDB:
documentID c kt hp t tn b su tp(collection name) v id duy nht ca ti
liu trong b su tp( v d users / 1). Tuy nhin, ch l mt quy c. Document ID
th khng ph thuc vo loi thc th, do khng bt buc phi cha tn ca b su
tp cha n.
4.3.3 The Management Studio

Hnh 4.4: Management studio


Tt c cc thc th my ch c th qun l thng qua mt ng dng Silverlight
truy cp t xa - Management Studio. N c th c truy cp bng cch tr trnh

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 40

duyt ca bn n a ch v cng my ch lng nghe (mc nh l


http://localhost:8080).
4.3.4 To kha cho cc document
RavenDB t ng to kha: Khi chng ta khng ch nh kha cho cc
document, RavenDB s t ng to mi kha cho cc document. Raven s dng cc
GUID lin tip to cc kha. Cc GUID lin tip ny l duy nht v c li trong
vic sp xp cc indexing. Cch ny thng c dng nu chng ta khng quan tm
ti vic to kha cho cc document nh l lu li cc log hay l khi m ngi dng
khng bao gi hin th d liu cc kha ny.
T to kha cho cc document: Chng ta c th gn kha cho cc document
trc khi lu cc document ny xung c s d liu. Thng s dng trong cc
trng hp nh chng ta mun to kha cho tp hp ngi dng trong h thng, v d
nh: user/nguyenvana
Kha xc nh: Raven xc nh REST nh l kha, v d posts/1234. Nu bn
lu document vi kha kt thc bng /, Raven s t ng theo du cc s xc minh
cho tin t nu n khng tn ti v s ni thm cc s xc minh vo kha. Cch ny
c dng hu ht cho cc trng hp v n to ra kha m con ngi c th c
c.
4.3.5 Thit k cu trc document
RavenDB lu tr d liu khng theo mt lc c nh, n c lc ty
ty bin. Tuy nhin, chng ta vn nn dnh nhiu thi gian xem xt lm th no
thit k cc document nhm m bo rng chng ta c th truy cp tt c d liu
chng ta cn phc v yu cu ca ngi dng mt cch hiu qu, ng tin cy v chi
ph bo tr t nht c th.
Li in hnh nht m chng ta mc phi l c gng thit k m hnh d liu ca
document database ging vi cch chng ta thit k m hnh d liu trong c s d
liu quan h. Bi v RavenDB lu tr d liu phi quan h nn thit k cu trc
document theo cch ring ca document database s em li li ch to ln. Nh m
chng ta s tn dng nhng im mnh ca c s d liu hng document nh l
RavenDB.
4.3.5.1

Document is not flat (khng nh nhau)

Trong RDBMS, mt dng ch c th cha d liu n gin v nhng cu trc d


liu phc tp hn cn c lu tr nh l mi quan h ( c ngha l lu d liu trong
nhiu bng khc nhau v s dng kha ngoi tham chiu). i vi document
database, mt document c th lu mt i tng phc tp ty . i tng c th
l arrays, dictionaries v trees. Xem v d blog n gin di y:

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 41

Hnh 4.5: V d v blog n gin


Trong c s d liu quan h, cn t nht 4 table hin th d liu trong mt
trang n (Posts, Comments, Tags, RelatedPosts). S dng RavenDB, chng ta lu tr
tt c thng tin chng ta cn vo trong mt document.
RDBMS
RavenDB

Hnh 4.5: Cu trc mt document


trong document database

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 42

Hnh 4.4: M hnh quan h trong RDBMS

Vi cu trc document ny, chng ta c th ly mi thng tin chng ta cn hin


th ln trang ch trong mt yu cu.
4.3.5.2

Raven is not relation (phi quan h)

Khi bt u dng RavenDB , chng ta s gp nhng vn khi chng ta c gng


s dng cc khi nim ca c s d liu quan h. Vn chnh l Raven phi quan
h. Raven xem mi document nh mt thc th c lp. Bng cch lm nh vy, n
c th ti u ha vic lu tr v qun l cc documents. Mt kha cnh khc v bn
cht phi quan h ca Raven l lm sao cho nhng documents c c y thng tin
trong chnh bn thn n. V vy, chng ta nn nhm tt c thng tin chng ta cn vo
trong mt document duy nht. Nhn li v d blog trn, trong c s d liu quan h,
chng ta s c mt bng lin kt cho RelatedPosts cha id ca cc bi vit lin kt.
Nu mun ly Title ca related posts, ta cn phi join vo bng bi vit mt ln na.
C th lm iu trong Raven, nhng khng phi l phng php c xut.
Thay vo , ta nn bao gm tt c cc thng tin cn thit vo trong document. S
dng phng php ny, chng ta c th hin th y thng tin trang vi ch mt yu
cu, dn n hiu sut tng th tt hn nhiu.
Raven h tr sharding (phn tn d liu trn nhiu server khc nhau), do
khng cn phi lu tr mt tp hp d liu c lin quan vi nhau. Mi document l
c lp v c th c lu tr trn bt k shard no ca h thng.

4.4 .NET client API


4.4.1 Gii thiu .NET client API
Khi s dng RavenDB vi ch server, embedded hay remote, client API cho
php developer d dng truy cp n RavenDB t bt k ngn ng .NET no. Client
API hin thc mu Unit of work, p dng quy tc cho cc tin trnh lu tr, np d
liu, tch hp System.Transaction, gi mt tp yu cu n server, lu d liu b
nh m (caching)
4.4.2 Nguyn tc thit k .NET client API
API bao gm 2 lp chnh:
-

IDocumentSession: Document Session dng thao tc vi c s d liu,


load d liu t c s d liu, truy vn d liu, lu tr v xa d liu. i
tng Session to ra tn rt t chi ph v l tin trnh khng an ton. Mt thc
th ca Interface hin thc mu Unit of Work, theo di s thay i cng
nh nhiu tnh nng khc cp trn nh qun l Transaction. Khi s dng

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 43

.NET client API, hu ht cc thao tc vi c s d liu u thng qua i


tng Session.
IDocumentStore: L mt Session Factory v vic to DocumentStore th tn
nhiu chi ph, l tin trnh an ton v c to 1 ln cho mi ng dng.
Document Store chu trch nhim thc s cho cc giao tip gia client v
server, nm gi cc quy c lin quan n saving/loading d liu v nhiu
cu hnh cho ng dng, v d nh l http cache cho server.

4.4.3 Kt ni ti RavenDB data store


Vic to mt thc th document store th tn chi ph nhng l tin trnh an ton.
V vy ta nn to 1 documentstore/ 1 database/ 1 ng dng. Khi ng dng kt thc,
document store nn c gii phng v xa sch mt cch hp l.
-

Chy server mode


var documentStore = new DocumentStore { Url = "http://myravendb.mydomain.com/" };
documentStore.Initialize();

"http://myravendb.mydomain.com/" l a ch ca RavenDB server


-

Chy embedded mode


var documentStore = new
"path/to/database/directory" };
documentStore.Initialize();

EmbeddableDocumentStore

DataDirectory

H tr Silverlight
var documentStore = new DocumentStore { Url = "http://myravendb.mydomain.com/" };
documentStore.Initialize();

S dng chui kt ni (connection string)


new DocumentStore { ConnectionStringName = "MyRavenConStr"}

nh ngha trong file app.config


<connectionStrings>
<add name="Local" connectionString="DataDir = ~\Data"/>
<add name="Server" connectionString="Url = http://localhost:8080"/>
<add name="Secure" connectionString="Url =
http://localhost:8080;user=beam;password=up;ResourceManagerId=d5723e19-92ad-4531-adad8611e6e05c8a"/>
</connectionStrings>

4.4.4 Nhng thao tc c bn vi c s d liu


Chng ta c mt s lp c bn di y thc hin thao tc vi c s d liu:

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 44

public class BlogPost


{
public string Id { get; set; }
public string Title { get; set; }
public string Category { get; set; }
public string Content { get; set; }
public DateTime PublishedAt { get; set; }
public string[] Tags { get; set; }
public BlogComment[] Comments { get; set; }
}
public class BlogComment
{
public string Title { get; set; }
public string Content { get; set; }
}

4.4.4.1
i tng Session
i tng Session c to ra t Document Store v ta dng n thc hin
thao tc ti c s d liu. Lu : khi phng thc SaveChanges() c gi th mi
thc s thc hin thao tc xung c s d liu:
using (var session = documentStore.OpenSession())
{
// S dng session thao tc vi c s d liu
var entity = new BlogComment{ Title = "Title", Content = Content };
session.Store(entity);
session.SaveChanges();
}

Trong ng cnh ny, chng ta c th ngh rng session qun l tt c thay i ni


ti v SaveChanges s gi tt c thay i ti RavenDB server. Tt c cc thao tc
d liu trong li gi SaveChanges s c thc hin (hoc l tt c cng thnh cng,
hoc l cng tht bi).

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 45

4.4.4.2

Insert document

lu mt bi vit xung c s d liu, ta s to mt mi mt thc th bi vit:


// to thc th mi ca lp BlogPost
BlogPost post = new BlogPost()
{
Title = "Hello RavenDB",
Category = "RavenDB",
Content = "This is a blog about RavenDB",
Comments = new BlogComment[]
{
new BlogComment() {Title = "Unrealistic", Content = "This example is unrealistic"},
new BlogComment() {Title = "Nice", Content = "This example is nice"}
}
};

Lu tr bi vit va to bng cch gi hm Store() v SaveChanges()


// lu d liu xung RavenDB
session.Store(post);
session.SaveChanges();

4.4.4.3

Load v update document

Mi document c lu tr nh l mt phn ca collection. Collection l mt


tp hp cc document cng loi. Chng ta ly document nh vo id ca n:
// BlogPosts/1 l mt thc th ca collection BlogPost vi Id l 1
BlogPost existingBlogPost = session.Load<BlogPost>("BlogPosts/1");

Mun thay i thng tin ca i tng ta ch cn lm nh sau:


existingBlogPost.Title = "Some new title";

Lu li nhng thay i ny xung c s d liu bng cch gi:


session.SaveChanges(); // chng ta khng cn gi phng thc Update() hay theo di s //thay i
ca i tng. RavenDB lm iu cho chng ta.

4.4.4.4

Delete document

Xa bng cch tham chiu n i tng:

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 46

Khi ta ly c document thng qua hm load() th chng ta c th xa c


document thng qua hm delete():
session.Delete(existingBlogPost);
session.SaveChanges();

Xa da vo kha:
-

Dng lnh Defer ca tnh nng Advanced session


session.Advanced.Defer(new DeleteCommandData {Key = "posts/1234"});

Dng DatabaseCommands:
session.Advanced.DatabaseCommands.Delete("posts/1234", null);

4.4.4.5

Truy vn c bn trong RavenDB

Chng ta s dng Linq truy vn d liu. V d nh chng ta cn truy vn tt


c cc bi vit blog theo danh mc xc nh
var results = from blog in session.Query<BlogPost>()
where blog.Category == "RavenDB"
select blog;

Hoc l vi c php khc, ta c th ly nhng bi vit c t nht 10 comments:


var results = session.Query<BlogPost>()
.Where(x => x.Comments.Length >= 10)
.ToList();

4.4.5 S dng Index truy vn d liu


p ng yu cu trong khong thi gian rt nhanh, my ch RavenDB nh
ch mc d liu ca chng ta bn di nn bt k khi no mt document c thm
vo hay thay i. Tt c indexes trong RavenDB u da trn Lucene v chng ta tn
dng nhng u im ny cung cp h thng truy vn mt cch nhanh chng, y
tnh nng v linh hot. RavenDB cho php s dng c php Lunce truy vn cho
d chng c gi t Client API thng qua Linq provider hoc thng qua HTTP
RESTful API.Chng c chuyn sang truy vn Lucene v thc thi da vo nhng
index thch hp.
Mt iu quan trng cn lu l tt c truy vn ti RavenDB server u s dng
index tr v kt qu. Chng ta c th t nh ngha index ring, nu khng th
RavenDB s to t ng index.
C 2 loi index trong RavenDB:
-

Static index l index m do chnh ngi dng nh ngha

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 47

Dynamic index l index c RavenDB t ng to ra da trn truy vn ca


ngi dng nu khng c truy vn no khp vi yu cu. RavenDB s tm
index thch hp truy vn v s to index km vi truy vn nu n khng
tn ti. RavenDB s ti u ha trn cc yu cu thc t v c th quyt nh
chuyn mt index tm thi thnh mt index c lu tr trn server.

Mt khi nim cng cn ni n l khi nim stale index. Bi v phng php


tip cn ca RavenDB l better stale than offline truy vn index c th tr v kt
qu c. V d, khi ngi dng truy vn d liu trong khi c qu trnh cp nht mt
lng ln d liu. RavenDB s thng bo cho ngi dng bit c nu kt qu l
c v cng c th cho bit phi ch i cho n khi kt qu mi (non-stale result).
4.4.5.1

Static index

RavenDB cng cho php chng ta t nh ngha index v truy vn n mt cch


tng minh. Nhng index ngi dng t to c gi l static index. Mt s l do m
static index hay c s dng hn nhng index c to t ng l:
-

tr thp: To index khng phi l qu trnh t tn chi ph, m n tn mt


thi gian thc hin. V nhng dynamic index c to cng vi truy vn
u tin nn kt qu non-stale cho ln u truy vn s tn nhiu thi gian tr
v. Dynamic index c to nh l nhng index tm thi, iu ny dn n
hiu sut khi thc hin truy vn ln u.
Linh hot: Static index c h tr them nhiu chc nng khc nh sorting,
boosting, Full text Search, Live Projection, spatial search support

Trong khi s dng dynamic index th s d dng cho chng ta, vic s dng
static index th hu dng v hiu qu hn vi d liu thi gian thc. V th, nn s
dng static index trong hu ht cc thao tc ca chng trnh hay t nht cng chc
chn rng nhng index tm thi c to t nhng dynamic index s c ch nh l
nhng index thng dng.
Bt c khi no chng ta yu cu RavenDB truy vn d liu v c static index
thch hp tn ti, RavenDB s trc tip truy vn s dng index mt cch t ng.
Chng ta cng c th ch nh tn ca index m chng ta mun dng:
var results = session.Query<BlogPost>("MyBlogPostsIndex").ToArray();

Lu l RavenDb s nm ra li nu chng ta ch nh tn ca index c s


dng m index ny li khng thc s tn ti.
nh ngha static index:
-

nh ngha mt index, chng ta cn mt i tng IndexDefinition v a


n vo c s d liu. Mt index c th c truy vn ngay lp tc sau khi
qu trnh to index c bt u, nhng cho n lc qu trnh ny hon thnh

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 48

th kt qu tr v s c nh du l stale. Index s c cp nht lin tc


khi c bt k thao tc thm hay sa d liu no.
Lp IndexDefinition:
Mt nh ngha index bao gm tn index, hm map/reduce, mt hm ty
chn TransformResults v mt vi ty chn khc. Cu trc lp
IndexDefinition c th hin bn di:
class IndexDefinition
{
public string Name { get; set; }
public string Map { get; set; }
public string Reduce { get; set; }
public string TransformResults { get; set; }

public IDictionary<string, FieldStorage> Stores { get; set; }


public IDictionary<string, FieldIndexing> Indexes { get; set; }
public IDictionary<string, SortOptions> SortOptions { get; set; }
public IDictionary<string, string> Analyzers { get; set; }
}

Bt k index no cng yu cu phi c tn v hm Map. Hm Map l


cch m chng ta thng bo cho RavenDB bit lm th no tm c
nhng d liu chng ta cn n v nhng trng d liu no m chng
ta s tm kim. Hm Map c vit theo c php Linq.
Hm Reduce l mt ty chn, c vit v thc thi ging nh hm Map
nhng c thc thi trn kt qu ca hm Map. Hm Reduce thc s l
mt index th hai cho php chng ta thc hin cc thao tc tp hp t tn
chi ph v trc tip t index.
Hm th ba l hm TransformResults, mt tnh nng c gi l Live
Projections, s c ni r phn sau.
Nhng thuc tnh cn li hu ch cho vic tn dng ton b sc mnh
ca Lucene bng cch ty bin cc indexes.
To mi mt index:
Dng hm PutIndex trong i tng DocumentCommands to index:
// to mt index m chng ta s tm kim d trn thuc tnh Post Title
documentStore.DatabaseCommands.PutIndex("BlogPosts/ByTitles",
new IndexDefinitionBuilder<BlogPost>{
Map = posts => from post in posts

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 49

select new { post.Title }


});

C th to mt index (index class) bng cch tha k t


AbstractIndexCreationTask<T>. Sau thng bo cho server to ra
index thc s bng cch thm li gi vo lc ng dng khi ng (cc
index tn ti vn b nh hng):
IndexCreation.CreateIndexes(typeof(MyIndexClass).Assembly, documentStore);

4.4.5.2

Stale index (index cha kt qu c, cha cp nht)

RavenDB thc hin vic nh ch mc d liu vi mt tin trnh nn bn di


chng trnh, n s c thc thi bt c khi no c d liu mi hoc d liu c c
chnh sa, cp nht. Tin trnh chy nn bn di ny cho php server p ng yu
cu mt cch nhanh chng ngay c khi mt khi lng ln d liu b thay i. Tuy
nhin trong trng hp ny, chng ta s truy vn vi stale index.
Khi nim stale index xut pht t s nhn nhn su sc v thit k ca
RavenDB. Vic c mt kt qu c tt hn l vic mt kt ni vi d liu (it is better to
be stale than offline). V nh vy, n s tr v kt qu truy vn ngay c khi n bit l
khng th cho mt kt qu truy vn tt nht (up-to-date). V qu thc l RavenDB tr
v kt qu nhanh chng cho bt c yu cu ca ngi dng, ngay c khi lin quan n
vic nh li ch mc ca hng trm hng ngn documents. Yu cu th nht s c
server p ng rt nhanh, nhng truy vn tip theo c th c thc hin sau vi
mili giy v kt qu vn c tr v, tuy nhin n c nh du l Stale.
Kim tra kt qu stale:
-

S dng i tng RavenQueryStatistics kim tra kt qu c:


RavenQueryStatistics stats;
var results = session.Query<Product>()
.Statistics(out stats)
.Where(x => x.Price > 10)
.ToArray();
if (stats.IsStale)
{
// Nhng kt qu c
}

Khi gi tr IsStale l true th c ngha l c thao tc thm hoc thay i


Product v index khng c thi gian cp nht li thay i trc khi
chng ta truy vn.

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 50

Ly kt qu mi( non-stale):
-

Vi truy vn yu cu ly kt qu non-stale, ta c th ch nh r khi truy vn:


RavenQueryStatistics stats;
var results = session.Query<Product>()
.Statistics(out stats)
.Where(x => x.Price > 10)
.Customize(x => x.WaitForNonStaleResults(TimeSpan.FromSeconds(5)))
.ToArray();

Lu l trn v d trn th thi gian ch l 5 giy. Ta c th yu cu


RavenDB ch v thi hn cho n khi nhn c kt qu non-stale, nhng
iu ny ch nn s dng trong unit-testing v khng bao gi dng trong
nhng ng dng thc t tr khi chng ta hiu 100% v n hoc l iu
chng ta mong mun.

4.4.6 Qun l mi quan h gia cc document


Vi RavenDB, mt trong nhng nguyn tc khi thit k database l lm cho cc
documents c lp nhau, c ngha l tt c thng tin c yu cu khi x l mt
document c lu tr ton b trong document . Tuy nhin iu khng c ngha
l khng c cc mi quan h (relations) gia cc i tng. C nhng trng hp m
chng ta cn phi xc nh mi quan h ca cc i tng. Lm nh th th chng ta
s gp mt vn ln: bt c khi no chng ta np d liu i tng cha (container
object), chng ta cn phi np d liu cho nhng thc th tham chiu (referenced
entitys) (tr khi chng ta khng quan tm ti n). So vi vic lu ton b thng tin
cn thit vo mt thc th th vic tham chiu n thc th c v nh tn chi ph
lc u, nhng iu ny c chng minh l kh tn km v ti nguyn d liu v lu
lng truy cp mng.
RavenDB cung cp 3 phng php gii quyt vn ny. Mi trng hp s
s dng mt hoc nhiu phng php. Khi p dng mt cch chnh xc, cc phng
php ny s lm ci thin hiu sut, gim bng thng v tng tc pht trin mt
cch ng k.
4.4.6.1

Phng php 1: Denormalization (Phi chun ha)

Cch d nht gii quyt vn ny l phi chun ha d liu (denormalization


data) vo trong thc th cha. Thc th cha s cha nhng d liu thay cho d liu
tham chiu ti. Xem mt v d v mt JSON document:
{ // Order document with id: orders/1234
"Customer": {

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 51

"Name": "Itamar",
"Id": "customers/2345"
},
Items: [
{
"Product": {
"Id": "products/1234",
"Name": "Milk",
"Cost": 2.3
},
"Quantity": 3
}
]
}

Document Order cha d liu c phi chun ha ca 2 documents l


Customer v Product. Thng tin y ca Customer v Product documents c lu
tr mt ni khc. Lu l chng ta s khng copy ton b thuc tnh ca Customer
vo trong Order, chng ta ch copy nhng thuc tnh ca Customer m chng ta quan
tm khi cn hin th hay x l vi cc Order. Cch tip cn ny c gi l
denormalized reference.
Cch tip cn denormalization ny gip chng ta trnh vic tm kim cho d
liu v ch nhng kt qu cn thit mi c truyn ti qua mng nhng n li lm
cho mt s trng hp khc tr nn kh khn. V d, lc u chng ta c nhng thc
th c cu trc nh bn di:
public class Order
{
public string CustomerId { get; set; }
public string[] SupplierIds { get; set; }
public Referral Refferal { get; set; }
public LineItem[] LineItems { get; set; }
public double TotalPrice { get; set; }
}

public class Customer

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 52

{
public string Name { get; set; }
public string Address { get; set; }
public short Age { get; set; }
public string HashedPassword { get; set; }
}

Nu chng ta bit rng khi no chng np d liu cho Order t c s d liu,


chng ta cng cn np d liu cho Customer Name v Customer Address, chng ta c
th to ra mt trng d liu phi chun ha Order.Customer v lu thng tin ny trc
tip vo trong i tng Order. Customer Password v nhng thng tin khng cn
thit khc s khng c phi chun ha:
public class DenormalizedCustomer
{
public int Id { get; set; }
public string Name { get; set; }
public string Address { get; set; }
}

y khng phi l tham chiu trc tip gia Order v Customer. Order s cha
mt DenormalizedCustomer (cha nhng thng tin cn thit t Customer khi chng ta
x l i tng Order).
Chuyn g s xy ra nu nh Customers Address thay i? Chng ta phi thc
hin mt lot cc thao tc cp nht li tt c cc Order m Customer ny thc
hin. V iu g s xy ra nu Customer ny c rt nhiu Orders hoc l a ch ca h
thng xuyn thay i? Gi cho cc thng tin c ng b l yu cu cp thit trn
my ch. iu g s xy ra nu mt qu trnh lm vic khc cn mt tp cc thuc tnh
khc ca Customer ? DenormalizedCustomer cn phi c m rng, v nh th th
mt s lng ln Customer record c nhn bn.
4.4.6.2

Phng php 2: Includes

Tnh nng Include trong RavenDB nhm n s hn ch ca phng php


Dernormalization. Thay v i tng chnh copy nhng thng tin t nhng i
tng khc th n ch cn gi tham chiu n i tng cn quan tm. Khi
RavenDB c th ti d liu trc (pre-load) cho i tng c tham chiu n vo
thi im m i tng chnh c np d liu. Lm iu ny nh sau:
var order = session.Include<Order>(x => x.CustomerId)

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 53

.Load("orders/1234");
// cu lnh tip theo khng yu cu truy vn ti server!
var cust = session.Load<Customer>(order.CustomerId);

Vi on code trn, chng ta yu cu RavenDB ly d liu i tng Order


order/1234 v cng lc th n s include Customer vo Order c tham chiu
bi thuc tnh Order.CustomerId. Phng thc Load() th 2 s c gii quyt hon
ton pha client (khng cn mt yu cu th 2 ti RavenDB) bi v i tng
Customer thch hp c np d liu (y l mt i tng Customer y ,
khng phi l mt DenormalizedCustomer). Chng ta cng c th s dng Includes
vi truy vn sau:
var orders = session.Query<Order>()
.Customize(x => x.Include<Order>(o => o.CustomerId))
.Where(x => x.TotalPrice > 100)
.ToList();
foreach (var order in orders)
{
// khng yu cu truy vn ti server!
var cust = session.Load<Customer>(order.CustomerId);
}

RavenDB c 2 knh xuyn sut m n tr v thng tin cho mt yu cu np d


liu. Th nht l knh Results, i tng chnh s c np d liu bi phng thc
Load(). Th 2 l knh Includes, nhng documents c include s c gi v pha
client. pha Client, nhng documents c include khng c tr v bi phng
thc Load(), bi v n c thm vo session unit of work v nhng yu cu tip
theo np d liu s c lm bi session cache, khng c bt c yu cu truy vn
no gi n server na.
4.4.6.3

Live Projections

S dng Include th rt hu ch, nhng nhiu lc chng ta mun lm nhng thao


tc phc tp hn. Tnh nng Live Projection l duy nht trong RavenDB v n c th
c coi l bc th 3 trong thao tc Map/Reduce: sau khi mapped (nh x) tt c d
liu v n c reduced (nu index l Map/Reduce index), RavenDB server c th
chuyn i kt qu sang mt cu trc hon ton khc v tr v kt qu ny thay v kt
qu gc. S dng Live Projection bn c quyn kim sot nhiu hn i vi nhng g
np vo cc thc th kt qu, v v n tr v projection (php chiu) ca kt qu ban
u, chng ta c th lc ra nhng thuc tnh khng cn thit.

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 54

Li ch chnh ca vic s dng Live Projection l chng ta khng cn phi vit


nhiu code, n c thc thi pha server v n tn t bng thng mng bng cch tr
v nhng d liu m chng ta quan tm.
Lu : mt im khc bit quan trng l Include hu dng trong c 2 trng hp
np d liu bi id v truy vn d liu, cn Live Projection ch c s dng cho truy
vn d liu.
4.4.6.4

Phng php kt hp

Chng ta c th s dng kt hp cc phng php trn. S dng


DenormalizedCustomer phn trn v to ra Order s dng chng:
public class Order3
{
public DenormalizedCustomer Customer { get; set; }
public string[] SupplierIds { get; set; }
public Referral Refferal { get; set; }
public LineItem[] LineItems { get; set; }
public double TotalPrice { get; set; }
}

S dng Denormalization, n gin v nhanh chng load d liu ca Order


v nhng thng tin cn thit ca Customer c yu cu khi x l Order. V cng d
dng v hiu qu load y object Customer:
var order = session.Include<Order3, Customer2>(x => x.Customer.Id)
.Load("orders/1234");
// this will not require querying the server!
var fullCustomer = session.Load<Customer2>(order.Customer.Id);

S kt hp gia Denormalization v Include c th s dng vi List cc i


tng Denormalized.
4.4.6.5

Tng kt

Khng c quy lut c th no cho vic dng tng phng php trn. Nhng
tng chung l suy ngh theo nhiu hng khc nhau, xem xt ci hay ca tng
phng php. V d nh l, trong mt ng dng thng mi in t, tt hn l chng
ta denormalized product name v product price vo trong i tng order line, bi v
bn mun chc chn l Customer s nhn thy ng Product Name v Product Price
trong lch s mua hng. Nhng Customer Name v Customer Address nn c tham
chiu thay v Denormalized trong Order. Trong nhng trng hp m denormalized

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 55

khng phi l s la chn th Include s l phng php ph hp. Bt c khi no mt


tin trnh quan trng c yu cu sau khi cng vic Map/Reduce c hon thnh
hay khi chng ta cn mt cu trc thc th khc c tr v hn vic nh ngha mt
index, hy dng Live Projections.

4.5 Tng quan HTTP API


RavenDB h tr HTTP API cho vic truy cp v thao tc d liu trn my ch.
HTTP API cung cp hu ht cc chc nng tng t C# .NET client API, nhng vi
platform agnostic (tm dch l a nn tng) v giao din web thn thin. S dng
HTTP API chng ta c th vit c ng dng RavenDB vi y chc nng ch
cn s dng Javascript v HTML.
L mt phn ca web thn thin, HTTP API hiu c nhng nguyn tc chung
RESTful. V d, document database l nhng ti nguyn thng qua nhng a ch
URLs duy nht v nhng ngun ti nguyn c th thc thi bng cch s dng cc
ng t c trng ca HTTP nh: GET, PUT, POST v DELETE.
RESTful l mc ch ca HTTP API nhng ch l mc ch th yu so vi mc
ch trnh by d dng s dng nhng tnh nng mnh m nh batching v multidocument transactions.

4.6 M rng h thng theo chiu ngang( scaling out hay l scaling
horizontally)
RavenDB h tr sn 2 gi m rng l nhn bn(Replication) v phn tn d liu
trn nhiu my ch (sharding). C hai tnh nng ny trc giao, c ngha l chng c
th c s dng kt hp vi nhau. Sharding l mt tnh nng pha my khch, c
ngha l ton b quyt nh c thc hin pha my khch. Nhn bn c thc hin
gia 2 im u, cc my ch t thc hin vic nhn bn v cng cn nhn bit cc
trng hp khi mt trong cc nt (node) b h hng v khi mt nt bo co li xung
t khi nhn bn.
4.6.1 Replication
S dng Replication s c nhng tc dng trn h thng ca chng ta:
-

Theo di trn my ch nhng document c vit ln ln u (bn gc). Gi


nhn bn s dng thng tin ny xc nh mt document c nhn bn c
b xung t vi document tn ti hay khng.
Nhng document gp phi li xung t s c nh du thch hp v s
c thc hin t ng hoc c s tham gia ca ngi dng gii quyt.
Nhng document s c xa khi c nh du xa v gi nhn bn cng
dng du hiu ny xa nhng document c lin quan. y l mt chi tit
c thc hin m khng cn lu cho my khch.

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 56

Mt vi thit b u cui bt u p ng nhng khng gii hn


/replication/replicate v /replication/lastEtag.
Gi nhn bn s khng sao chp mt s ti liu h thng(c key bt u bng
Raven/)

Gi nhn bn s to ra mt s ti liu h thng, khng gii hn


Raven/Replication/Destinations danh sch my ch chng ta cn nhn bn v
Raven/Replication/Sources/[server] thng tin v d liu c sao chp t mt my
ch c th.
Cc my ch cn nhn bn ti liu:
-

Cc ti liu ch c lu vi ID ca Raven/Replication/Destinations v n
thng bo cho RavenDB bit nhng my cn c nhn bn. nh dng nh
sau:
{
"Destinations": [
{
"Url": "http://raven_two:8080/"
},
{
"Url": "http://raven_three:8080/"
},
]
}

Vi mt i tng c cha mt a ch cho mi my ch c nhn bn. Bt


c khi no mt document c cp nht, nhn bn c bt u v bt u
sao chp danh sch im n c cp nht.

4.6.2 Sharding
RavenDB h tr sn sharding. Sharding l cch phn tn d liu trn nhiu my
ch khc nhau. V th mi my ch s lu tr mt phn d liu. iu ny l cn thit
trong trng hp chng ta cn x l mt lng ln d liu. Gi s trong mt ng
dng cn x l d liu t rt nhiu cng ty trn khp th gii th mt s la chn s l
lu tr d liu ca mt cng ty trn mt mnh ca h thng (gi l shard) v vic lu
tr ny ph thuc vo v tr khu vc (Region) ca cng ty. V d, nhng cng ty nm
chu (Asia) s c lu tr trn mt mnh, nhng cng ty nm Trung

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 57

ng(Middle East) s c lu tr trn mt mnh khc v nhng cng ty t M s


c lu tr vo mt mnh th ba.
Y tng trn l xc nh v tr a l ca mnh gn ni m d liu c s dng.
Do cc cng ty chu s c phc v t mt my ch gn v phn hi
nhanh hn cho ngi dng nm chu . iu ny cng lm gim ti trn mi my
ch bi v n ch x l mt s phn ca d liu. Di y l mt s thc th c th
c chia vo cc mnh khc nhau da trn khu vc ca n: Company v Invoice
public class Company
{
public string Id { get; set; }
public string Name { get; set; }
public string Region { get; set; }
}
public class Invoice
{
public string Id { get; set; }
public string CompanyId { get; set; }
public decimal Amount { get; set; }
public DateTime IssuedAt { get; set; }
}

lm c iu ny, chng ta s dng ShardedDocumentStore thay cho


DocumentStore thng thng. Ngoi tr giai on khi to, ShardedDocumentStore
cng dng tng t nh DocumentStore thng thng v chng ta c quyn truy cp
tt c cc API thng thng v cc tnh nng ca RavenDB.
to mt ShardedDocumentStore chng ta cung cp mt th hin ca
ShardStrategy cha mt t in nhng mnh hot ng trn . Cc kha v gi tr
trong t in l ID ca mnh (shardID) v mt th hin DocumentStore trn mnh .
ShardStrategy thng bo cho ShardedDocumentStore bit lm th no tng tc
vi nhng mnh ca h thng. iu ny cho php chng ta ty chnh mt s kha cnh
khc nhau v cc hnh vi phn tn, cho chng ta ty chn kim sot mnh tt hn nh
th no m khi RavenDB x l d liu ca chng ta:
-

ShardAccessStrategy: mt th hin m hin thc interface


IShardAccessStrategy cho bit lm th no lin h vi mnh .
SequentialShardAccessStrategy v ParallelShardAccessStrategy l 2 hin

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 58

thc ca interface ny cho php chng ta truy cp mnh theo tun t hay l
song song. Gi tr mc nh l SequentialShardAccessStrategy.
ShardResolutionStrategy: mt th hin m hin thc interface
IShardResolutionStrategy. N quyt nh nhng mnh no c lin h
hon thnh thao tc c s d liu. Hin thc mc nh l lp
DefaultShardResolutionStrategy cho php chng ta bt u phn tn d liu
nhanh chng m khng cn hin thc mt IShardResolutionStrategy mi.
MergeQueryResults: mt delegate cho php chng ta quyt nh lm th no
hp nht cc truy vn t nhiu mnh khc nhau. C mt hin thc mc
nh cho vic ny s kt hp cc kt qu li v p dng phn loi hnh vi ti
thiu.
ModifyDocumentId: cho php chng ta lu tr shard id cho mt document
trong chnh document . Mc nh l:
(convention, shardId, documentId) => shardId + convention.IdentityPartsSeparator +
documentId

s dng sharding, chng ta c th ch s dng ShardStrategy vi hnh vi mc


nh ca n:
var shards = new Dictionary<string, IDocumentStore>
{
{"Asia", new DocumentStore {Url = "http://localhost:8080"}},
{"Middle East", new DocumentStore {Url = "http://localhost:8081"}},
{"America", new DocumentStore {Url = "http://localhost:8082"}},
};
var shardStrategy = new ShardStrategy(shards)
.ShardingOn<Company>(company => company.Region)
.ShardingOn<Invoice>(x => x.CompanyId);

var documentStore = new ShardedDocumentStore(shardStrategy).Initialize();

i vi mi trng sharding phc tp chng ta c th hin thc


IShardResolutionStrategy cho ring mnh v thit lp thuc tnh
ShardResolutionStrategy trong ShardStrategy gi nhng ty chnh thay v dng
DefaultShardResolutionStrategy. IShardResolutionStrategy c mt s phng thc
cn c hin thc:
-

GenerateShardIdFor: chng ta c th quyt nh mnh no nn c s dng


lu tr mt thc th c th.

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 59

MetadataShardIdFor: chng ta c th quyt nh mnh no nn c s


dng lu tr cc ti liu siu d liu (nh cc ti liu Hilo) cho mt thc
th c th.
PotentialShardsFor: chng ta c th quyt nh mnh no nn c lin lc
hon thnh mt hot ng truy vn. Chng ta c th quyt nh vic ny
da trn cc thng s c sn c th l DocumentKey, EntityType v the
Query.
Mc nh nu chng ta khng thit lp thuc tnh ShardResolutionStrategy
trn ShardStrategy th chng ta s s dng DefaultShardResolutionStrategy.

Default Shard Resolution Strategy:


-

Nu s dng DefaultShardResolutionStrategy chng ta c th s dng


phng thc ShardingOn trn i tng ShardStrategy ch cho
DefaultShardResolutionStrategy bit thuc tnh no lu gi thng tin shard
id ca mt thc th c th.
on code bn di cho thy Company gi shard id trong thuc tnh Region
v Invoice gi shard id trong thuc tnh CompanyId. Thuc tnh CompanyId
gi shard id theo quy tc ModifyDocumentId ca ShardStrategy.

var shardStrategy = new ShardStrategy(shards)


.ShardingOn<Company>(company => company.Region)
.ShardingOn<Invoice>(x => x.CompanyId);

Gi chng ta c th lu tr d liu trn nhiu mnh khc nhau:


using (var session = documentStore.OpenSession())
{
var asian = new Company { Name = "Company 1", Region = "Asia" };
session.Store(asian);
var middleEastern = new Company { Name = "Company 2", Region = "Middle-East" };
session.Store(middleEastern);
var american = new Company { Name = "Company 3", Region = "America" };
session.Store(american);

session.Store(new Invoice { CompanyId = american.Id, Amount = 3, IssuedAt =


DateTime.Today.AddDays(-1) });
session.Store(new Invoice { CompanyId = asian.Id, Amount = 5, IssuedAt =
DateTime.Today.AddDays(-1) });
session.Store(new Invoice { CompanyId = middleEastern.Id, Amount = 12, IssuedAt =

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 60

DateTime.Today });
session.SaveChanges();
}

Trong v d trn chng ta lu tr mi Company trn nhng mnh khc nhau,


v mi Invoice c lu tr trn cng mnh vi company ca n. Chng ta c th
thc hin thao tc nh Query, Load hay LuceneQuery v nhng mnh thc s s c
lin h hon thnh thao tc m nhng thao tc ny ph thuc vo vic hin thc
IShardResolutionStrategy.
using (var session = documentStore.OpenSession())
{
//ly tt c d liu t mi mnh mt cch t ng
var allCompanies = session.Query<Company>()
.Customize(x => x.WaitForNonStaleResultsAsOfNow())
.Where(company => company.Region == "Asia")
.ToArray();

foreach (var company in allCompanies)


Console.WriteLine(company.Name);
}

Nu chng ta ang s dng DefaultShardResolutionStrategy trong trng hp


ny th n ch gi yu cu ti mnh Asia.
4.6.3 Kt hp Replication v Sharding
Replication v Sharding l 2 tnh nng mnh m ca RavenDB. Chng ta c th
s dng kt hp Replication vi Sharding. Gi s chng ta ch lu tr d liu Users
trong RavenDB v chng ta phn tn d liu trn 2 node da vo tn ngi dng
(ngi dng tn bt u l A-M trn mt node v N-Z trn node th 2).
Phn tn vi cc node chuyn i d phng chuyn dng: Trong thit lp ny,
chng ta c hai node lu tr thng tin ngi dng v hai node phc v (slave) cho
mi node chnh (master). Nu mt trong cc node chnh b h hng th Raven t ng
chuyn i sang cc bn sao d phng.

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 61

Hnh 4.8: Phn tn vi cc nt chuyn i d phng chuyn dng


Phn tn vi node d phng ni b: Mt la chn khc l s dng sharding ch
yu nh mt phng tin gim ti trn cc my ch v thit lp nhn bn gia cc
node khc nhau m khng c cc node chuyn i d phng chuyn dng.

Hnh 4.9: Phn tn vi cc nt chuyn i d phng ni b

4.7 So snh hiu sut RavenDB vi MSSQL Express 2012


Sau khi tm hiu cch lm vic, s dng RavenDB, nhm thc hin test hiu sut
lm vic gia RavenDB vi MSSQL phin bn Express 2012 vi kt qu nh sau:

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 62

MSSQL vs RavenDB: Insert Test


35000

30150

30000
25000

18234

20000

Milisecond

14157

15000
9768

10000
5000
0

296213

1428
1116

2537
1667

1000

5000

10000

8340

5086

25000

50000

100000

Rows/Documents
MSSQL Time

RavenDB Time

Bi
u so snh kh nng Insert d liu ca RavenDB so vi MSSQL

MSSQL vs RavenDB: Select By Id Test


120000
99789

100000

80737

80000

Milisecond

60000
40000
20000
0

40 39

50 45

146117

1095
984

10

100

1000

10363
8119
10000

100000

Row(s)/Document(s)
MSSQL Time

RavenDB Time

Biu so snh kh nng Select d liu ca RavenDB so vi MSSQL


Qua 2 biu trn ta cng thy c kh nng Insert d liu v Select By ID ca
RavenDB l kh tt so vi MSSQL Express 2012.

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 63

4.8 So snh RavenDB vi CouchDB v MongDB

MongoDB

CouchDB

RavenDB

Format

BSON

JSON

JSON

Metadata

No

System

System + Custom

Versioning

No

Yes

Included Plug-in

Attachments

GridFS

Yes

Yes

Map/Reduce

JavaScript + others

JavaScript

LINQ

Bulk Load

Monogoimport utility

Yes

Yes

Adhoc Query

Yes

No

No

Sharding

Available in 1.6

Yes

Yes

Durability

Single Server will be


available in 1.8

"crash-only" design

write ahead logging and


snapshot isolation for
guaranteed crash
recovery via ESE

Transactions

No

No

Yes

Concurrency

Update in-place

MVCC (Multi-version
Concurrency Control)

Optimistic concurrency

Consistency

Strong Master /
Eventual Slave

Strong Node /
Eventual Cluster

Eventual

Replication

Master-Slave

Peer-based

Included Plug-in

Interface
Protocol

Custom protocol over


TCP/IP

HTTP/REST

HTTP/REST

.NET API

3rd Party Projects

3rd Party Projects

Included

Documents

Storage

Interface

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 64

Other
Triggers

No

Update Validation

Yes

Security
Security

Basic

Basic

Basic using included


plug-in

Written In

C++

Erlang

C#

Qua bng so snh trn chng ta thy c nhng im mnh ca RavenDB so vi


CouchDB v MongDB nh sau:

- RavenDB h tr transaction. iu ny c ngha l d liu ca chng ta c


-

lu tr v x l mt cch an ton, ng tin cy.


M rng vi RavenDB d dng hn rt nhiu vi 2 gi tnh nng mnh m
l: Replication v Sharding. Replication h tr c master slave v master
master. Vic phn tn d liu v cng n gin, khng yu cu cu hnh.

Mt my n RavenDB c th lu tr n 16 terrabytes d liu.


H tr rt tt .NET client API. y l tnh nng c sn trong RavenDB.
Ti u ha cho vic x l ng thi ca hng ngn ngi dng trn mt
lng d liu cc ln.

Ngoi nhng tnh nng trn th RavenDB cn c mt s c im m khi s dng ti


thy thch th, l:

- Vic s dng RavenDB rt n gin, ti v l c th chy c, khng yu


-

cu ci t, khng yu cu cu hnh.
Thm th vin vo trong ng dng v bt u lp trnh. Vic ny cng khng
tn thi gian nhiu. i vi nhng ai tng lp trnh trn .NET th vic lp
trnh vi RavenDB v cng n gin. RavenDB h tr c php LINQ

thc hin cc thao tc c s d liu.


Raven Studio Management l mt cng c qun l v cng hu ch. Vi giao
din web trc quan, chng ta c th xem, thm, thay i d liu mt cch d
dng vi Raven Studio Management. Ngoi ra n cn gip chng ta lm
nhiu vic khc nh: qun l logs, patching, tasks, alerts,

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 65

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 66

5 CHNG 5-XY DNG NG DNG S DNG RAVENDB


5.1 Gii thiu v ng dng
thc hnh xy dng ng dng s dng c s d liu NoSQL, m c th l c
s d liu RavenDB, chng ti xy dng mt website cho php cc ngi dng
c th tho lun v vn no (vi cc chc nng c bn nh Google
Group). Website s dng cng ngh ASP.NET MVC 4 (xem ph lc 7.1) nhm
tn dng cc u im ca m hnh pht trin web ny.

5.2 L do la chn ng dng ny


nhn thy c tc ca c s d liu NoSQL, kh nng lm vic vi
lng d liu cc k ln, kh nng phn tn d liu Website ny l mt la
chn ph hp v n cng yu cu n cc tnh nng : hiu sut cao, lu tr d
liu nhiu, phn tn d liu v c bit l khng i hi khc khe v tnh nht
qun d liu.
Website ny cn lu tr mt lng ln d liu nh: thng tin ngi dng, thng
tin nhm, ni dung cc bi ng v cc bnh lun. Website yu cu c v ghi d
liu rt nhiu, tuy nhin tn sut ca vic c din ra nhiu hn vic ghi nhiu
ln. y l mt th mnh ca RavenDB so vi cc c s d liu NoSQL cng
loi. Vi thit k c bit ca RavenDB v thit k d liu dng document s
gip ng dng t c hiu sut hot ng cao hn vic s dng c s d liu
RDBMS.
Website chp nhp vic d liu khng nht qun trong mt khong thi gian
ngn trc khi c cp nhp ng li. Cc yu cu cp nhp cha cn thit s
c x l sau, cc yu cu cn thit hin th, thng bo d liu s c u
tin trc. Nh vy iu ny cho php ng dng chy mt m hn, gim thi
gian phi ch i.
Ta vn c th s dng c s d liu RDBMS lm c s d liu cho website
ny. Tuy nhin, chi ph s t hn do cn nhiu server hn c th t hiu sut
ngang vi NoSQL. Ngoi ra trong ng dng ny, khng cn thit nhng tnh
cht c bit ca RDBMS nh: kho ngoi, m hnh d liu quan h Nh vy,
vi gii php s dng NoSQL cho ng dng ny p ng c hon ton yu
cu ra vi mt chi ph thp nht.

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 67

5.3 Phn r chc nng website


Website c 2 ngi dng: Manager (qun l) v Member (thnh vin). Quyn
Manager cao hn quyn Member v c m t chi tit nh s phn r chc
nng bn di:

S 5.1: S phn r chc nng ca Owner

S 5.2: S phn r chc nng ca Manager

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 68

S 5.3: S phn r chc nng ca Member

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 69

5.4 Y tng thit k


5.4.1 Thit k m hnh 3 tng (3 Tier): Clients Web server Database server
Clients Asia
Client 1

Clients MiddelEast
Client 1

Client 2

Client n

Clients American

Client 2

Client 1

Client n

Client 2

Client n

Web server

Model

View

Controller

Database server

Server Asia

Server MiddelEast Server American

S 5.4: S thit k m hnh 3 tng: Clients Web server Database server

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 70

Cc thnh phn trong m hnh ny:


Clients: cc client nm khp ni c th truy c p vo website qua giao thc HTTP
bng web browser.
Web server: c thit k theo m hnh MVC, s dng ASP.NET MVC 4 framework.
Tng web server s c m t chi tit mc 5.4.2 Kin trc website.
Database server: database server s dng RavenDB. S dng k thu t Sharding
phn tn d li u ra nhiu Server c th t nhiu ni. Tu vo request n t u s
i n server thch hp ly d li u .
5.4.2 Kin trc Website

Uses

S 5.5: S kin trc website


Cc thnh phn trong m hnh ny:
Project Core: Cha Domain v cc Interface. Domain lm nhi m
v i di n cho
m t i tng trong chng trnh. Interface l cc giao di n cung cp cc hm gip
cho Controller lm vi c , ch yu l ly d li u t database.
Project Server: cc lp trong ny hi n thc cc Interface trong project Core. Cc lp
ny s giao tip gia Controller v Database.
GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 71

Project Web: thit k theo m hnh MVC. Ngoi ra cn s dng UnityContainer


tim s ph thu c (Inject Dependencies) cho cc Interface trong project Core quan h
vi cc class trong project Server. Cc class trong project Web c th s dng Domain
cha i tng.

5.5 Phn tch, thit k h thng


5.5.1

Use case

S 5.6: Use case trong trng hp cha ng nhp

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 72

S 5.7: Use case ca Member

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 73

Core
Implement
Domain

Uses

Service

Interface

Uses

Injects

Uses

Web

Controller
S 5.8: Use case ca Manager

View

GVHD: Ths. Phm Thi Vng

UnityContain

Model

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 74

S 5.9: Use case ca Owner

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 75

5.5.2

M t Use case

Usecase
M t
iu kin tin
quyt
Lung x l chnh

ng nhp
Cho php ngi dng ng nhp h thng.
c ti khon ng nhp vo h thng.
Sau khi ngi dng nhp tn ng nhp v mt khu vo form ng
nhp v bm Login, h thng m ho mt khu theo chun MD5
ri kim tra tn ng nhp v mt khu c tn ti trong c s d
liu, sau thng bo kt qu.

Kt qu sau khi

Nu ng nhp thnh cng: hin th tn ngi ang ng nhp

hon tt Usecase

v cc nhm m ngi ny ang tham gia.


- Ngc li: thng bo ng nhp tht bi, yu cu nhp li tn
ng nhp v mt khu.
Lung x l khc/ Nu cha nhp tn ng nhp hoc mt khu, h thng s yu cu
nhp thng tin trc khi thc hin kim tra.
ngoi l
Bng 5.1: M t Usecase ng nhp
Usecase
M t
iu kin tin
quyt
Lung x l chnh

ng k
Cho php ngi dng ng k mt ti khon ca h thng.

Sau khi ngi dng nhp y thng tin vo form ng k v bm


Register, h thng thc hin kim tra tn ng nhp tn ti hay
cha:
- Nu tn ti: thng bo tn ng nhp tn ti v yu cu
-

ngi dng nhp tn khc


Nu cha tn ti: tip tc thc hin qu trnh ng k. H
thng thc hin m ho mt khu theo chun MD5 sau lu

Kt qu sau khi
hon tt Usecase

Lung x l khc/

xung c s d liu.
Nu ng k thnh thng: thng bo vic ng k thnh cng.
Ngc li: thng bo li v yu cu nhp li thng tin.

Nu nhp tn ng nhp tn ti: h thng thng bo yu cu

ngoi l

GVHD: Ths. Phm Thi Vng

nhp tn khc.

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 76

Nu nhp email khng ng: yu cu ngi dng nhp chnh


xc.
Bng 5.2: M t Usecase ng k

Usecase
M t
iu kin tin
quyt
Lung x l chnh

Xem Group public


Ngi dng cha ng nhp c th xem nhm c ci t public.
Nhm m ngi dng mun xem phi c ci t dng public.
Thc hin ly thng tin nhm t c s d liu ln ri kim tra xem
c phi nhm public khng.
Nu l nhm public th thc hin hin th thng tin cc bi ng ra
cho ngi dng xem.

Kt qu sau khi
hon tt Usecase

Ngi dng thy cc bi ng ca nhm .


C th xem chi tit cc bi ng v cc bnh lun.

Lung x l khc/ Nu nhm c yu cu khng phi nhm public th mt thng bo


hin ra yu cu ngi dng phi tham gia (join) nhm.
ngoi l
Bng 5.3: M t Usecase xem Group public
Usecase
M t
iu kin tin
quyt
Lung x l chnh

Tm kim
Cho php ngi dng tm kim thng tin nhm.
Bit tn, thng tin m t ca t nht 1 nhm.
Sau khi ngi dng nhp t tm kim v bm nt Search, h thng
thc hin tm kim theo tn (tm kim gn ng), tm kim theo m
t (description) ca cc nhm v hin th kt qu tm kim ln.

Kt qu sau khi

Cc nhm c tn, m t ging/ gn ging vi t tm kim.

hon tt Usecase

Lung x l khc/ Khng tm thy nhm no c tn, m t ging/ gn ging vi t tm


kim. H thng thng bo khng tm thy kt qu.
ngoi l
Bng 5.4: M t Usecase tm kim

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 77

Usecase
M t

Xem topic
Hin th ni dung ca mt bi ng (topic) v cc bnh lun ca bi

iu kin tin

ng ny
Nu khng l group public th cn ng nhp h thng

quyt
Lung x l chnh

H thng ly d liu ca bi ng v cc bnh lun ca n t c s


d liu ln. Sau kim tra quyn ca ngi ang ng nhp:
- Nu l member: cho php ng tr li
- Nu l manager/ owner: cho php ng v xo tr li.
- Nu ngi dng cha ng nhp hoc cha tham gia nhm: chi

Kt qu sau khi
hon tt Usecase

cho xem ni dung.


Ngi dng xem c ni dung ca mt bi ng cng vi cc bnh
lun.

Lung x l khc/ Nu ngi dng cha ng nhp hoc cha tham gia nhm ny v
group khng phi group public th h thng khng hin th ni dung
ngoi l
bi ng, ng thi yu cu ngi dng tham gia nhm.
Bng 5.5: M t Usecase xem topic

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 78

Usecase
M t
iu kin tin
quyt
Lung x l chnh

ng bnh lun
Cho php ngi dng ng bnh lun trong mt bi ng.
Ngi dng phi ang ng nhp v tham gia nhm.
Sau khi ngi dng nhp bnh lun v bm Post, h thng thc
hin lu bnh lun xung c s d liu ng thi cp nhp li giao
din web.

Kt qu sau khi
hon tt Usecase

Bnh lun c lu xung c s d liu v giao din c cp nhp


mi li.

Lung x l khc/ Khi ngi dng cha tham gia nhm, vic ng bnh lun b ngng li
v mt thng bo yu cu ngi dng tham gia vo nhm trc khi
ngoi l
ng bnh lun.
Bng 5.6: M t Usecase ng bnh lun
Usecase
M t
iu kin tin

ng Topic
To mi mt bi ng (topic) cho mt group.
Ngi dng cn ng nhp vo h thng v tham gia group.

quyt
Lung x l chnh Ngi dng nhp y thng tin ca topic vo form v nhn Post,
h thng thc hin lu cc thng tin sau xung c s d liu:
+ Thng tin ca Topic.
+ Thm thng tin ca Topic m ngi dng va nhp vo nhm.
Sau chuyn v trang ch.
Kt qu sau khi

Trang ch hin th tn ca topic va mi to.

hon tt Usecase
Lung x l khc/ Khi ngi dng cha tham gia nhm, vic ng topic b ngng li v
mt thng bo yu cu ngi dng tham gia vo nhm trc khi ng
ngoi l
topic.
Bng 5.7: M t Usecase ng topic
Usecase
M t
iu kin tin

Xo Topic
Cho php ngi c quyn manager v owner xo cc Topic.
ng nhp vo h thng vi quyn manager hoc owner.

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 79

quyt
Lung x l chnh

xo Topic, ngi dng tr ra trang xem danh sch cc Topic v


check vo cc checkbox trc cc Topic cn xo. Khi nt
Delete c hin th ln cho php ngi dng xo cc Topic
chn.
Khi lnh xo Topic c thc hin, cc Topic c chn s c

Kt qu sau khi
hon tt Usecase

xo ln lt di c s d liu nh sau:
+ Xo Topic c ID tng ng.
+ Xo Topic trong danh sch Topic ca nhm.
Sau thng bo xo thnh cng s c hin th.
Xo thnh cng cc Topic c chn. Trn mn hnh cc nhm c
chn b mt i.

Lung x l khc/
ngoi l
Bng 5.8: M t Usecase xo Topic
Usecase
M t
iu kin tin

To Group
To mt nhm (group) mi.
Ngi dng cn ng nhp vo h thng.

quyt
Lung x l chnh Ngi dng nhp y thng tin ca nhm vo form v nhn
Create, h thng thc hin lu cc thng tin sau xung c s d
liu.
+ Thng tin nhm m ngi dng va nhp.
+ Thm thng tin nhm vo danh sch nhm ca ngi to vi quyn
l Owner.
+ Thm thng tin quan h gia nhm v ngi to vi quyn l

Kt qu sau khi
hon tt Usecase

Owner.
Sau chuyn v trang chi tit ca nhm.
Trang chi tit ca nhm c hin th, cha c topic no trong ny.
Ngi va to chnh l ngi s hu nhm (Owner) v c quyn cao
nht.

Lung x l khc/
ngoi l
Bng 5.9: M t Usecase to group

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 80

5.5.3

Class diagram

S 5.10: S lp cung cp cc chc nng chnh cho website

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 81

5.5.4

Sequence diagram

5.5.4.1 Qun l User

S 5.11: Sequence diagram ca chc nng Login

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 82

S 5.12: Sequence diagram thc hin chc nng Register

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 83

5.5.4.2 Qun l Group

S 5.13: Sequence diagram ca chc nng Create Group

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 84

S 5.14: Sequence diagram ca trang Home

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 85

S 5.15: Sequence diagram ca chc nng Join Group

S 5.16: Sequence diagram ca chc nng Accept Member


GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 86

5.5.4.3 Qun l Topic

S 5.17: Sequence diagram ca chc nng Create Topic

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 87

S 5.18: Sequence diagram ca chc nng ng bnh lun

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 88

5.5.4.4

Tm kim

S 5.19: Sequence diagram ca chc nng tm kim

5.6 Thit k giao din


5.6.1 Danh sch mn hnh
STT

Tn mn hnh

Chc nng

Mn hnh giao din chnh

Cung cp cho ngi dng ci nhn tng


quan v chng trnh. Ti mn hnh ny,
ta c th thc hin cc thao tc thng
dng nh: Login, Register, Create
Group

Mn hnh to mi bi vit

Cho php ngi dng to mi bi vit

Mn hnh danh sch bi vit

Hin th danh sch bi vit. C th qun


l danh sch bi vit nu vai tr l
Owner hay Manager

Mn hnh bi vit v tt c bnh lun Hin th mt bi vit c th v tt c cc


bnh lun ca n. Cho php ngi dng
ng bnh lun

Mn hnh ci t group

GVHD: Ths. Phm Thi Vng

Cung cp cc chc nng ci t chnh

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 89

ca group
Bng 5.10: Danh sch mn hnh
5.6.2 M t giao din ngi dng
5.6.2.1

Mn hnh giao din chnh

Hnh 5.1: Mn hnh chnh ca chng trnh

5.6.2.2

Mn hnh to mi bi vit
Hnh 5.2: Mn hnh to mi bi vit

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 90

5.6.2.3

Mn hnh danh sch bi vit


Hnh 5.3: Mn hnh danh sch bi vit

5.6.2.4

Mn hnh bi vit v tt c bnh lun


Hnh 5.4: Mn hnh bi vit v tt c bnh lun

5.6.2.5

Mn hnh ci t Group

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 91

Hnh 5.5: Mn hnh ci t Group

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 92

6 CHNG 6 KT LUN
6.1 Kt qu t c
-

V mt l thuyt:
Tng hp v phn tch kh chi tit v c s d liu NoSQL cng vi
nhng ng dng thc tin ca n. Qua ti liu ny, ngi c c c
ci nhn bao qut v NoSQL v c th ng dng n vo cc h thng cn
lu tr rt nhiu d liu.
Trnh by v phn tch nhng loi khc nhau ca NoSQL bao gm: keyvalue store, column families, document database v graph database.
Tm hiu v tnh nng, c im v nhng li ch ca mt s loi
document database ph bin l: MongoDB, CouchDB, RavenDB.
o su kin thc v RavenDB v cc trin khai mt ng dng s dng
RavenDB .

V mt thc nghim: Xy dng c mt ng dng DaHu Groups (c cc


chc nng c bn ging Google Groups) s dng c s d liu RavenDB trn
nn Web. ng dng tuy khng qu quy m nhng cng p dng c nhng
k thut c bn v nng cao ca RavenDB v ng dng th hin tc vt
tri khi hot ng vi mt lng ln d liu, p ng c yu cu ra.

6.2 Hng pht trin


-

Tm hiu thm vn phn tn d liu nhiu my ch.


Tm hiu thm cc vn qun l transaction. c bit x l tnh hung c s
d liu phn tn trn nhiu my ch.

Mt s vn nh bo mt, config server, backup v restore d liu trn c s


d liu NoSQL.

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 93

7 PH LC
7.1 Tnh nng y ca RavenDB
- Safe by default: RavenDB m bo an ton cho vic truy cp d liu. Khng
tiu tn ti nguyn mng v h thng. Xy dng ng dng vi RavenDB, tc
chy chng trnh nhanh v ng tin cy.
- Transactional: H tr y ACID transactions (Atomicity, Consistency,
Isolation, Durability) ngay c nhng node khc nhau trong h thng.
- Scalable: H tr Sharding, Replication, Multi-Tenancy. Scaling out (m rng
theo chiu ngang) tng i d dng.
Build-in Sharding: phn tn d liu trn nhiu server khc nhau qun
l vic load d liu tt hn.
Buil-in Replication: nhn bn d liu trn nhiu server tng tnh sn
sng v ly d liu nhanh chng.
Mix replication and sharding: C th s dng kt hp c 2 tnh nng
Replication v Sharding

Hnh 7.2: Scalable


- Schema free: B qua nhng khi nim tables, rows,mappings, complex datalayers. RavenDB l c s d liu hng ti liu, v th c th lu tr c i
tng d liu.
- Get running in 5 minutes: Ch cn 5 pht l c th s dng RavenDB.
RavenDB khng yu cu ci t phc tp, ch ti v v chy. Rt n gin.
-

It Just Work: Thit k lm vic

- Fast Queries: RavenDB c th thc hin bt k truy vn vi tc cc


nhanh(tc nh sang). Tt c thao tc indexing c thc hin nn (thc hin
ngm), khng nh hng n truy vn, thao tc c vit t database.
- Best practices built-in
Unit Of Work: thay i d liu bng cch thay i i tng nhn c
t Client API.

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 94

Domain Driven Design: m hnh d liu s dng khi nim DDD


thao tc d liu tt nht.
In-memory DB for testing
Automatic-batching: t ti u bng cch gi i mt tp lnh thay v mt
lnh n.
- High performance: RavenDB lu tr rt nhanh tt c m hnh d liu. B qua
giai on mapping phc tp hay a tng DAL, ch n gin l lu tr nhng
thc th.
- Caching built-in: Nhiu tng caches thc hin t ng trn c server v
client. Caching c cu hnh sn v c ch nng cao l Aggressive
Caching.
- APIs: C th truy cp RavenDB bng nhiu ngn ng hay cng ngh khc
nhau. Giao tip Client/Server thng qua REST (HTTP API), .NET client API,
Silverlight and Javascript.
- Built-in managemet studio: D dng qun l d liu vi giao din ha trc
quan.
- Carefully designed: RavenDB c thit k rt cn thn, t m m bo mi
th hot ng tt.
- Map/Reduce: S dng indexes, d dng vit cc hm Map/Reduce s dng c
php Linq. H tr khi nim multi-maps v boosting indexes vit
Map/Reduce n gin hn v th hin sc mnh ca n.
- Feature rich and extensible: H tr nhiu tnh nng v kh nng m rng.
- Embededable: RavenDB c th nhng vo bt k ng dng .NET, v n cng
hon ton ph hp vi cc ng dng desktop.
- Bundles: Nhiu gi d liu h tr i km vi vi Server-side plugins. Ch cn
copy file DLL vo th mc Server.
- Index replication to SQL:s dng u im ca cng c reporting c sn t
RDBMS. RavenDB cho php nhn bn index sang SQL table d dng.

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 95

Hnh 7.3: Index replication to SQL


- Full-text Search built-in: Khng cn s dng cng c h tr tm kim nng
cao bn ngoi, RavenDB h tr tm kim full-text server v client API.
- Advances search techniques
- Geo-spatial search support: D dng s dng API ny.

Hnh 7.4: Geo-spatial search support


- Easy backup: Vic lu tr bt ng b m khng lm nh hng n thao tc
DB thng thng. Backup v Restore u c h tr bi DB.
- Multi-tenancy: Lu tr nhiu database trn mt RavenDB Server.

Hnh 7.5: Multi-tenancy


- Attachments: RavenDB h tr lu tr lung d liu m khng thc s l d
liu nh hnh nh hay d liu nh phn m chng ta khng mun lu tr nh
mt document, nhng vn c th lu tr.
- Online index Rebuild: Indexes c update ngm bn di m khng cn tc
ng ca ngi dng hay bt k thao tc ACID ca c s d liu.
- Fully async (C# 5 ready): RavenDB h tr API bt ng b mi c gii
thiu bi C#5
- Community
- Cloud hosting available: Chy RavenDB trn m my vi RavenHQ,
CloudBird, AppHorbor hoc Windows Azure.

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 96

Hnh 7.6: Cloud hosting available

7.2 Gii thiu m hnh ASP.NET MVC4


-

Mu kin trc Model View Controller c s dng nhm chia ng dng


thnh ba thnh phn chnh: model, view v controller. Nn tng ASP.NET
MVC gip cho chng ta c th to c cc ng dng web p dng m hnh
MVC thay v to ng dng theo mu ASP.NET Web Forms. Nn tng ASP.NET
MVC c c im ni bt l nh (lightweight), d kim th phn giao din (so
vi ng dng Web Forms), tch hp cc tnh nng c sn ca ASP.NET. Nn
tng ASP.NET MVC c nh ngha trong namespace System.Web.Mvc v l
mt phn ca name space System.Web.

Hnh 7.1: Mu kin trc Model View Controller


-

Vi nt v m hnh MVC:
Models: Cc i tng Models l mt phn ca ng dng, cc i tng
ny thit lp logic ca phn d liu ca ng dng. Thng thng, cc
i tng model ly v lu trng thi ca model trong CSDL. V d
nh, mt i tng Product s ly d liu t CSDL, thao tc trn d liu
v s cp nht d liu tr li vo bng Products SQL Server.
Trong cc ng dng nh, model thng l ch l mt khi nim nhm
phn bit hn l c ci t thc th, v d, nu ng dng ch c d
liu t CSDL v gi chng n view, ng dng khng cn phi c tng

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 97

model v cc lp lin quan. Trong trng hp ny, d liu c ly nh


l mt i tng model (hn l tng model).
Views: Views l cc thnh phn dng hin th giao din ngi dng
(UI). Thng thng, view c to da vo thng tin d liu model. V
d nh, view dng cp nht bng Products s hin th cc hp vn
bn, drop-down list, v cc check box da trn trng thi hin ti ca
mt i tng Product.
Controllers: Controller l cc thnh phn dng qun l tng tc
ngi dng, lm vic vi model v chn view hin th giao din
ngi dng. Trong mt ng dng MVC, view ch c dng hin th
thng tin, controller chu trch nhim qun l v p tr ni dung ngi
dng nhp v tng tc vi ngi dng. V d, controller s qun l cc
d liu ngi dng gi ln (query-string values) v gi cc gi tr n
model, model s ly d liu t CSDL nh vo cc gi tr ny.
-

Ngy 15-08-2012, Microsoft cho ra phin bn ASP.NET MVC 4 vi kh


nhiu tnh nng mi, giao din cng c ci thin kh nhiu so vi phin bn
trc .

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

Trang 98

TI LIU THAM KHO


Ting Vit:
1. Ebook NoSQL Nh nh Thun
2. Nhng CSDL RavenDB vo ng dng ASP.NET MVC 3 Asp.net.vn
3. Mt s bi vit nh: Mt s thng tin v NoSQL v th trng database,
NoSQL,

Nht

qun

cui

cng

ti

SQL

Vit

Blog

(http://www.sqlviet.com/blog/)
Ting Anh:
1. Ayende Rahien (Oren Eini), RavenDB Documentation - http://ravendb.net/docs
(trang tham kho chnh)
2. Ayende Rahien (Oren Eini), RavenDB Mythology Documentation Release 1.0,
November 29, 2010
3. Eelco Plugge, Peter Membrey and Tim Hawkins, The Definitive Guide to
MongoDB The NoSQL Database for Cloud and Desktop Computing.
4. Adam Freeman and Joseph C.Rattz, Jr. Pro LINQ Language Intergrated Query
In C# 2010. Apress, 2010.
5. NoSQL resources - http://nosql-database.org/
6. NoSQL in the Enterprise - http://www.infoq.com/articles/nosql-in-theenterprise
7. NoSQL wiki - http://en.wikipedia.org/wiki/NoSQL
8. Blog hay v RavenDB: Ayende's Blog (http://ayende.com/blog), Phillip
Haydon's

Blog

(http://www.philliphaydon.com/),

Gregor

Suttie's

Blog

(http://gregorsuttie.com/)
9. So snh RavenDB vi CouchDB v MongDB
(http://weblogs.asp.net/britchie/archive/2010/08/17/document-databasescompared-mongodb-couchdb-and-ravendb.aspx)

GVHD: Ths. Phm Thi Vng

SVTH: Dng Thn Dn Bi Ngc Huy

You might also like