1. Trang chủ
  2. » Luận Văn - Báo Cáo

Tìm hiểu mongodb và xây dựng ứng dụng web minh họa

136 2 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Tìm hiểu MongoDB và xây dựng ứng dụng web minh họa
Tác giả Thực Sĩ Dũng Tuấn Nghĩa, Quae Thiên An, Le Long Dânh
Trường học Trường Đại Học Ngoại Ngữ - Tin Học TP. Hồ Chí Minh
Chuyên ngành Công Nghệ Thông Tin
Thể loại Đề cương môn học
Năm xuất bản 2013
Thành phố TP. Hồ Chí Minh
Định dạng
Số trang 136
Dung lượng 18,3 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

+ Tham chiSu: Chung ta se dung ung dVng dS quan ly lien kSt b~ng cach them m9t truemg trong document nay chua jd cua document khac.. Chuong 1: T6ng quan v~ NoSQL & MongoDB 8• nhau nen vi

Trang 1

BO GIAO DUC vA DAo TAO

TRUONG DHDL NGOAI NGU - TIN HOC TP HO CHi MINH

KHOA CONG NGH~ THONG TIN

"-J bI) ~

~

GIANG VlEN HUaNG DAN:

SINH VIEN THVe HIEN:

Th~c si D~NG TuAN NGHiA viJ Quae THIEN AN - MSSV: 09DH11155

LE eONG DANH - MSSV: 09DHl1188

TP.HO CHi MINH - 2013

Trang 2

LmMODAu

Thai de;ticong ngh~ thong tin ngay cang phM triSn va cac trang web

me;tngxa hQi cling ngay cang nO' rQ Noi dSn me;tngxa hQi la nguai ta nghI dSn

ngay trang web co s6 lUQ'ngtruy c~p cao, t~ng su~t hoe;ttdQng lien t\lc.

Vi d~c thu clla no nen co So' dfr lieu, noi luu trfr thong tin dfr li~u clla no cling khong gi6ng cac trang web dQng thong thuO'ng No co thS dap ling hang tri~u yeu c~u clla nguai dung cung mQt hk MongoDB la mQt trong co So' dfr li~u co kha nang dap ung s6 IUQ'ngyeu c~u Ian do.

Trong phe;tmvi clla dS tai, ta se tim hiSu vS MongoDB, mQt database NoSQL va so sanh hi~u su~t hoe;ttdQng so vai co So' dfr li~u thong thuang

thong qua ung d\lng web minh hQa.

Trang 3

1.2.4 Rang bUQcdfr li~u trong MongoDB 5 1.3 Cli phap MongoDB so vm RDBMS truySn th6ng: 6

1.5.3 LUll trfr va quan ly file dung lugng 16n vm GridFS 9

2.1.2 Thu?t toan va mo hinh thl'r nghi~m 11

2.1.6 Hi~u su~t insert theo thread song song du6i diSu ki~n kh~c nghi~t: 15

2.2 So sanh MongoDB vm SQL Server 2008 17

Trang 4

Mucluc 2

CO

2.2.2 M6 hinh va c~u hinh may thir nghi~m 17

2.2.4 So sanh t6c d9 truy v~n dan gi~m 21 2.2.5 So sanh t6c t9 truy v~n phuc t?p 22 CHUONG 3: SO SA.NH UA.NH GIA HI$U NANG MONGODB 25

3.4.3 Th\fc hi~n so sanh hi~u su~t insert 43

3.5.1 ling dVng t?O dfr li~u m~u, insert MongoDB: 47 3.5.2 ling dVng t?O dfr li~u m~u, insert MySQL: 54 3.5.3 Th\fChi ~n so sanh hi ~u su~t insert: 55

3.6.1 ling dVng truy v~n cua MongoDB 59

3.6.3 Th\fc hi~n so sanh hi~u su~t truy v~n 66

Trang 5

Mucluc 3

3.7.5 Thl,Ic hi~n so sanh hi~u su~t troy v~n 87

3.8.1 Vng dVng troy v~n cua MongoDB: 89

3.8.3 Thl,Ic hi~n so sanh hi~u su~t 99

Trang 6

Chuang 1: T6ng quan v~ NoSQL & MongoDB 4

CHUaNG 1:

NoSQL 1a mQt cong ngh~ 1uu trll' dll' li~u, 1a mQt thu~t ngll' dugc Slr d\lng dS noi t6i cac h~ th6ng co sa duo1i~uco d?c tinh ban ch~t m6i trong m6i quan h~ gill'a cac dll' li~u No dugc Slr d\lng nhiSu trong cac tmg d\lng web 2.0, cac trang m~mg xa hQi, cac trang kho 1uu tru' theo mo hinh quan h~ dll' 1i~u, bang gill' dQ 1inh ho?t nhu co thS anh X?S\l' thay d6i trong nQi dung d6ng thCri dam bao duy tri hi~u su~t t6i uu cua no Day cling la 1y do t?i sao cac trang web nhu face book, twitter da ch~p nh~n co sa dfi' 1i~uNoSQL dS lUlltrll' t~t ca cac dll' li~u cua h<;>.

NoSQL dugc chia thanh 4 10?i chinh:

• Key-value: dfi' 1i~udugc lUlltrll' 1a cac C?Pkhoa - gia tri

• Column-base: co sa dll' 1i~u t6 chuc trong bang, r~t t6t cho cac tmg d\lng kho dll' li~u

• Document-base: dll' 1i~udugc t6 chuc va lUlltm nhu mQt bQSU'U

t~p, trong m6i collection 1a cac document

• Graph-based: co sa dll' li~u ap d\lng 1y thuy~t d6 thi khoa h<;>c may tinh dS lUll trll' va l~y dll' li~u, t~p trung vao S\l' k~t n6i lien thong gill'a cac node.

1.2.1 Giai thieu

MongoDB 1a mQt database thuQc nhom Document-based, Slr d\lng cong ngh~ NoSQL dugc ph at triSn bCri 10gen (mQt cong ty co tr\l sa d?t t?i Hoa Ky), co rna ngu6n rna dugc vi~t b~ng C.

MongoDB co cac d?c diSm nhu sau:

• DS tim hiSu, it nh~t 1aso v6i cac database NoSQL khac.

• Khong c~n dinh nghla c~u trUc cua dfi' li~u c6 dinh truoc.

• Co kha nang rna rQng cao.

• Khong co quan h~ rang bUQcthich hgp dfi' 1i~uphi c~u truc.

• D?c bi~t phil hgp voi cac tmg d\lng co s6 luqng truy c~p IOn vi t6c

dQ t6t han so v6i RDBMS truySn th6ng.

Trang 7

Chuang 1: ring quan vJ NoSQL & MongoDB 5

MQt di~u cua MongoDB la duQ'c cung cfrp miSn phi tren Internet nen chung ta co thS dS dang tiSp c?n.

-1.2.3 [Jae aiim eila MongoDB

MongoDB co mQt diSm thong minh la tlJ dQng t?O database, collection

~n Di~u nay co nghla la chung ta khong co diu CREATE TABLE hay ALTER TABLE khi lam vi~c vcn MongoDB Chung ta chi dua ten cua database, collection vao Slr d\illg, nSu tren h~ th6ng khong co thi no se tv dQng,t?O ngam.

MongoDB Slr dl,lng cong ngh~ NoSQL nen vi~c truy vfrn no khong Slr dl,lng ngon ngfr truy vfrn SQL thong thuemg rna thay vao do no Slr dl,lng cac ham thu vi~n v6i cu phap rieng Day la mQt lqi thS trong vi~c phong ch6ng tfrn cong SQL Injection.

1.2.4 Rcmg bUGe dfr lieu {rong MongoDB

Trong MongoDB khong co cac rang bUQc, day la mQt lqi thS giup no ch?y nhanh, nhung trong cac ling dl,lng thlJc tS, dli it hay nhi~u thi cling c~n

Trang 8

Chuang 1: T6ng quan v~ NaSQL & MongoDB 6

cac lien kSt gifra cac document V 61 MongoDB chung ta co hai cach dS giai,

quyet:

+ Nhung document: Vi dinh d~mgdfr li~u cua MongoDB suodVng

hi BSON nen chung ta co thS nhung m9t document vao trong m9t document khac, di~u nay r~t co lqi vi khi troy v~n, MongoDB chi cfin troy v~n m9t lfin.

+ Tham chiSu: Chung ta se dung ung dVng dS quan ly lien kSt b~ng cach them m9t truemg trong document nay chua jd cua document khac Cach nay khong duQ'c khuySn khich, vi khi lien kSt nhu V?y, MongoDB phai load dSn it nh~t la hai lfin m61 l~y duQ'ctoan b9 dfr li~u lien quan.

1.3 eu phap MongoDB so vOl RDBMS truyJn thang:

Du6i day la m9t s6 cu phap cua ngon ngfr troy v~n SQL so v61 MongoDB tren shell.

Luu y: Trang cac ngon ngfr l?p trinh khac nhau thi cu phap sir dVng se khac nhau.

rrIN-sE-RTINTo-u'sEis.vALUES(-3-,5)r'.'-. dbo:~;~~~:i~~~rt( {a:3.,b~5,})-."o,-, ".oo".'1

I SELECT a,b FROM users

0-SELECT * FROM users WHERE db.users.find( {age:33} ).sort( {name: :

SELECT * FROM users WHERE

db.users.find( {age: {$ne:33} }) age!=33

Trang 9

Chuong 1: T6ng quan v~ NoSQL & MongoDB 7

I

SELECT * FROM users ORDER BY

db.users.findO.sort( {name:-I}) name DESC

I SELECT * FROM users WHERE a= I

II

,Idb.users.eountO I,

J

SELECT COUNT(*y) db.users.find( {age: {'$gt':

FROM users where AGE> 30 30} }).eountO

!

CREATE INDEX myindexname ON

db.users.ensureIndex( {name: I})I

H~u h~t cae ngon ngfr I?p trinh d~u h6 trQ' driver nen bim vi~e vm MongoDB khong kh6 khan MongoDB eh~y tat tren hai h~ di~u hanh ph6 bi~n hi~n nay d6 1a Windows, Linux Vi ban ehftt eua hai h~ di~u hanh khae

Trang 10

Chuong 1: T6ng quan v~ NoSQL & MongoDB 8

nhau nen vi~c triSn khai cai d?t cling co mQt s6 diSm khac bi~t, nhung nhin chung thi vi~c thiSt I?p MongoDB tren hai h~ diSu hanh nay tuong d6i dS Chung ta se khong di vao cach cai d?t, v?n hanh cling nhu c~u hinh MongoDB trong ph~n nay.

Trong gim h~n cua dS tai nay, chung ta se suod\lng MongoDB cling

vm ngon ngfr PHP dS minh hQa code tren h~ diSu hanh Windows.

1.5.1 MapReduce

MapReduce Ia mQt mo hinh thiSt kS dS xu Iy dfr Ii~u Y tUOng chinh cua MapReduce r~t don giim MQt cong vi~c IOn duQ'c chia ra thanh nhiSu cong vi~c nha hon M6i cong vi~c nha han duQ'c xu Iy dQc I?p KSt qua cua cac cong vi~c nay duQ'c kSt hgp I~i thanh kSt qua cu6i cling Noi r5 han Ia MapReduce co hai giai do~n chinh:

• Giai do~n map: Chia nha cong vi~c thanh cong vi~c nha hon va

xu Iy no dS duQ'ckSt qua trung gian.

• Giai do~n reduce: KSt hgp cac kSt qua trung gian va t6ng hgp kSt qua cu6i cling

Google da: I~y y tUOng don gian nay va ap d\lng no tren cac h~ th6ng phan tim Nam 2004, Google da:phat hanh tai Ii~u mfiu chUng minh cach rna

mo hinh MapReduce su d\lng dS xu Iy mQt Iugng IOn dfr Ii~u d6ng thCritren h~ th6ng may tinh Mo hinh I?p trinh rna Google dS xu~t da: sOm duQ'c cac cong ty va I?p trinh vien ap d\lng, va hQ da:cho ra nhfrng Framework dva tren MapReduce (Apache Hadoop co Ie Ia mQt trong nhfrng cai ten n6i b?t) Co' sa dfr li~u NoSQL b~t d~u su d\lng mo hinh nay khi xu Iy tac V\lva cac truy v~n kSt hgp.

1.5.2 Capped collection

Capped collection Ia mQt collection d?c bi~t, duQ'c xac dinh kich thuac Khi rna collection nay IOn hon kich thuac quy dinh thi no se thay thS cac document cli nh~t.

Capped collection co thu tv tv nhien DiSu nay co nghla Ia nSu chung

ta truy v~n khong yeu c~u s~p xSp thi chung ta se nh?n duQ'c cac document dung vai thu tv Iuc insert, diSu rna khong duQ'c dam bao trong collection thuemg.

Trang 11

Chuang 1: T6ng quan vi NoSQL & MongoDB 9

1.5.3 Luu [rei'va quan lV file dung luang Ian vOi GridFS

GridFS la m<)t giai phap Clla MongoDB dung dS luu trt• dfi' li~u nhi phan trong database No la m<)td?c ta, khong phai la m<)ttinh nang va khong

co code thlJc thi Theo thiSt kS thi m<)tdocument dinh d~ng BSON khong IOn han 16MB, diSu nay giup cho hi~u su~t ho~t d<)ng t6t GridFS quy dinh c~u truc vi~c chia m<)tfile thanh nhiSu document.

Theo GridFS thi file dugc luu trfi' trong 2 collection rieng bi~t la files

Du6i day la m<)ts6 ly do dS thuYStphvc Slr dVng GirdFS:

• V 6i GridFS chung ta co thS luu hang tri~u file trong mQt ch6 rna khong lam anh huang dSn hi~u su~t.

• Trong moi truOng phan tan co nhiSu may c~n truy C?P file, GridFS la IlJa ch<;mt6t han Cong cv tai t~o cua MongoDB co thS t~o mQt ban sao va dbng b<)file tren nhiSu may.

• Khi backup dfi' li~u Clla MongoDB, no se backup luon ca cac file luu trong GridFS.

• Chung ta co thS luu trfi' metadata nao chung ta mu6n cung file

do Vi dV, nSu site cho phep user upload hinh, video, chung ta

co thS luu comment, like, rating chung v6i file do

• M<)tkhi file dugc luu trfi' trong chunks, chung ta co thS truy C?P ng~u nhien tUng ph~n Clla file Cac cong cv thong thuOng cua file h~ th6ng thuOng h6 trg tinh nang nay khong t6t l~m.

1.5.4 Index vi [ri tlia lV

Geospatial index la rnQt kiSu index d?c bi~t, no dugc thiSt kS dS truy

v~n vi tri tren ban db Geospatial index se biSn rn<)tcollection tra thanh m<)t

ban db 2 chiSu M6i diSm tren ban db (m6i document trong collection) dugc gan mQt gia tri d?c bi~t la geohash Khi truy v~n thi no se ch~y vang I?p chia ban db thanh 4 ph~n nh6 han l~n luqt dSn vi tri c~n tim Vi~c chia nhiSu I~n

Trang 12

Chuang 1: T6ng quan vJ NoSQL & MongoDB 10

nhu v~y khiSn cho vi~c truy v~n vi tri r~t nhanh rna MongoDB khong c~n phai quet nguyen toan bQ collection.

V 6i index vi tri, chung ta co thS truy v~n da di;mgtheo btm kinh, theo hinh di;mg(da giac).

N goai ra con co Geospatial haystack index la ki Su rna rQng cua geospatial index, no giup cho vi~c index them cac tieu chi khac Vi d\l nhu chung ta co thS kiSm nha hang g~n vi tri hi~n t(;li,nha hang a day la mQt tieu chi truy v~n.

1.5.5 Tinh nang khac

Cling gi6ng nhu RDBMS truySn th6ng, MongoDB cling h6 trQ'nhiSu kiSu index nhu index mang, index nhiSu truOng, index duy nh~t, index document nhung, dS tang t6c truy v~n Tuy nhien mQt nhuQ'c diSm cua vi~c index la no se tang dung lUQ'llgRAM len nhiSu

MongoDB cling cung c~p cac cong C\l dS phan giai truy v~n, ghi l(;li cac truy v~n bi ch~m, b~t bUQcquet bang, toan vyn dfr li~u, nhan ban giup cho ngmJi quan tri chu dQng trong vi~c kiSm soat h~ th6ng.

Co dt nhiSu cac trang web su d\lng MongoDB cho toan bQ h~ th6ng ho~c mQt ph~n h~ th6ng (su d\lng chung MongoDB vm RDBMS truySn th6ng) dS tang hi~u su~t cua trang web nhu:

Trang 13

Chuang 2: Hieu nang MongoDB dU'ait1anh gia cae tac gia

Theo tac gia Huy NguySn, cach dan gian dS rna rQng theo chiSu ngang

la su dVng database nhu rnQt trinh I~p lich, gill cac tac vv chua duQ'cxu 1ydSn

cac node khac Cho N xu Iy va K tac vv (K Ian han N r~t nhiSu), xung dQt

th~p nh~t V m rnQt s6 thu~t toan co K giarn nhanh thi phep do tra nen du thua

khi K g~n b~ng ho~c nho han N Nhung khi vm thu~t toan khac nhu

WebCrawler, no se giup K Ian han nhiSu so v6i N vi cac duemg dfrn lien tvc

duQ'c them vao ben trong hang dqi.

Hai giai phap database ph6 biSn hi~n nay duQ'c dua ra so sanh la MySQL va MongoDB MQt ben d:;lidi~n cho RDBMS truySn th6ng, con rnQt ben d:;lidi~n cho cong ngh~ NoSQL.

2.1.2 Thud! toan va rna hinh thit nghiern

6 day chung ta su dVng hai thu~t toan cho vi~c so sanh MySQL va MongoDB Thu~t toan thu nh~t la nhan hai rna tr~n tUng cQt v6i tUng dong ngfru nhien Thu~t toan thu hai la su dVng WebCrawler dan gian Khi xu 1y duemg link chung ta se nh~n vS rna HTML Vm hai bai toan nay thi v~n dS c~n giai quySt 1a 1uqng d11'li~u duQ'c chuySn di Bai tmln nhan rna tr~n xu Iy rnQt kh6i Iuqng d11'li~u kha Ian co thS dfrn dSn nghen bang thong, Trang khi

do Web Crawler it bi nghen han vi dUOng link tuang d6i nho.

Trong qua trinh insert va t:;lOindex thich hqp, chung ta khong thay d6i c~u hinh rn~c dinh dS th~y duQ'c S\f khac nhau gi11'ahai nSn tang database Du6i day 1a quy trinh nhan rna tr~n va phan 10:;liWebCrawling:

I L~y d11'Ii~u chua duQ'cxu Iy (dong/cQt ho~c duemg dfrn urI).

2 Th\fc hi~n xu Iy (nhan dong/cQt ho~c I~y rna htrnl).

3 Luu tr11'kSt qua xu6ng database.

Trang 14

Chuang 2: Hieu nang MangaDB duo'i aemh gia cac tac gia 12

4 Danh d~u tac V\l da dugc xu ly.

Mo hinh thu nghi~m bao g6m 9 may M6i may g6m 6 Wi t6c d(>3.2 Ghz (t6ng c(>ng la 54 Wi) Server Database trung tam co 12 Wi AMD vm 64 GBRAM.

Lugc d6 cua database MySQL:

CREATE TABLE pMatrix (processed TINYINT(l), row MEDIUMTEXT, col MEDIUMTEXT, value INTEGER, i INTEGER, j INTEGER) ENGINE

= InnoDB' ,

Yes NULL eJ , ••X ~';iIOO.~ €i

Yes NULL IE , • X !DYes NULL IE , •• X

EEl ,," X ~ a1 ~

Collation

[] processed tinyint( 1)

o col mediumtext latinl_generaLci

C i int(ll)

[J j int(l1)

!f.: Check All / Uncheck All With selected:

Lugc d6 m(>tdocument cua MongoDB:

record = {

'processed' : boolean, 'row' : list of integers, 'col' : list ofntegers, 'value' : int,

'i' : int , 'j' : in

}

2.1.3 Hieu sudt insert twin tu

6 day chung ta do t6c d(>n?p dfr li~u vao database su d\lng client la MySQLdb va PyMongo (ch?y tren nSn python) Ph~n d~u tien la do insert lien t\lC tren may local rna khong chuySn dfr li~u qua m?ng.

Trang 15

Chuang 2: Hieu nang MongoDB duai ilanh gia cae tac gia

KSt qua thu duQ'c:

2.1.4 Hieu sudt so vai Memeaehed:

D6i vm rnQt s6 ling d\mg, n?p dfr li~u co nghla la lay dfr li~u trong file text va lUll no xu6ng rna MQt s6 khac nghla la lay dfr li~u, n?p no vao bQ nh6.

Nhfrng ngum cfin xu Iy rnQt TB dfr li~u ho?c IOn han thi giai phap luu trfr

chung tren rna su d\mg NoSQL cho dfr li~u kh6ng cau trUc va RDBMS truySn th6ng cho dfr li~u co cau trUc la hoan toan co thS.

D6i vm dfr li~u nh6 han thi co rnQt giai phap khac la luu trong

Merncached Gia su dfr li~u do duQ'c luu tren file text, su d\lllg Merncache co thS dS dang thay d6i va ch?y I?i thu?t toan rna kh6ng cfin xu Iy va n?p I?i dfr li~u trong file text Vi V?y chung ta se so sanh t6c dQ cua Merncache so vm MySQL va MongoDB khi dfr li~u nh6.

Du6i day la kSt qua test so sanh vm Merncached:

Trang 16

Chu'ong 2: Hieu ncmg MongoDB duai aanh gia cae tac gia 14

MongoDB nhanh hon nhiSu so vm MySQL khi insert 2/\14 record, khoang 14 1c1nso vm MySQL va 7 1c1nso vm Memcached Khi insert vao memcached thi se co it nhfit me)t thu?t toan C?P nh?t be) dSm gim h,:m cua be) nh6.

2.1.5 Hieu sudt bulk insert:

Bulk insert la me)t qua trinh insert nhiSu d6i tm;mg vao database cung me)t thai di~m D6i vm me)t s6 client, bulk insert 1a cach bao quat cua insert tuc1nt\l' Me)t s6 khac, bulk insert kh6ng th~ kS thua duQ'c nhfrng gi dff t6i Uticua kiSn trUc TCP va buffer 6 day chung ta kh6ng tim hi~u cach rna database

kS thua, th\l'c thi bulk insert KSt qua so sanh khi dung bulk insert cho thfiy no nhanh hon nhiSu so vm insert tuc1nt\l' (bao gam ca Memcached):

Trang 17

Chuang 2: Hieu nang MangaDB duai danh gia cac tac gia 15

3 Memcache co gim h(;lnkich thu6c khoa la 250 bytes

4 Client python cho Memcache va MongoDB dS su d\lllg han so

vm MySQL vm ngon ngfr SQL truySn th6ng

5 Memcache va MongoDB khong 6n dinh khi insert nhiSu MB dfr li~u D6i vm instance, kSt n6i se bi timed out khi insert entry Ian Trong phep so sanh nay, chung ta th\!c hi~n bulk insert dSn khi duQ'c 10KB dfr 1i~u Thu th\!c hi~n bulk insert cho m(>tMB dfr li~u h~u nhu bi timed out LUll y la dfr li~u khong chuy~n qua m(;lng.

6 InnoDB la m(>tchS d(>theo phi en, no khong h6 trQ'delay insert

2.1.6 Hieu sudt insert thea thread sang sang duai di~u hen khiic nghiet:

V m nhiSu ling d\lllg dfr li~u chuyen sau, ngum ta c~n m(>tcong C\l luu

tm co kha nang xu ly nhiSu yeu c~u cling m(>tluc Vi d\l la rn(>th~ th6ng cua nhiSu b(>xu ly SlT d\lng m(>tmay luu trfr t~p trung cho vi~c l~y va luu trfr dfr li~u Memcached duQ'c thiSt kS d~ giam b6t kh6i lugng cong vi~c cua m(>t may chu co sa dfr li~u rna cac truy v~n duQ'c lUll trfr vao m(>t c\lm b(>nh6 MySQL dff duQ'c thiSt kS cho cac c~u trUc dfr li~u quan h~, va MongoDB la m(>tnoi nao do a gifra.

Nhfrng thread la cac tiSn trinh nh~ truy xu~t d6ng thm va chia se tai nguyen nhu b(>nh6, I/O, c~u truc dfr li~u M~t khac, cac tiSn trinh la cac c~u truc tinh toan v~t ly, chua cac tai nguyen ao va tai nguyen v~t ly nhu socket, file handle, memory, Day la diSu quySt dinh cho vi~c insert song song ho~c theo lu6ng khi rna h~u hSt cac b(>may dfr li~u co gim h(;lns6 lugng kSt n6i M~c dinh khoang 100, 16, 1024 cho MySQL, MongoDB va Memcached theo thu t\! s6 lugng kSt n6i nay chung ta co th~ chinh trong file c~u hinh d~ tang hi~u su~t.

DiSu quan tn.mg la gi6i h(;lnv~t ly cua s6 lugng kSt n6i va tran b(> chuy~n m(;lchn(>idung D~u tien, m6i kSt n6i yeu c~u m(>ts6 t~p tin mo ta va gi6i h(;ln cua h~ th6ng V6i server d~u cu6i, no n~m trong khoang 50k dSn lOOk Thu hai, m(>tkSt n6i logic la m(>ttiSn trinh truy xu~t V6i qua nhiSu tiSn trinh truy xu~t, tran b(>nh6 se d~n dSn vi~c bi d~y ra kh6i cache Trong m(>ts6 truemg hgp, h~ th6ng co th~ danh toan b(>thm gian trong vi~c chuy~n d6i gifra cac tiSn trinh thay vi xu ly chung.

Chung ta su d\lng mpi4py cho m\lc dich l~p lich cac tiSn trinh tren m(>t

C\lm va cac lu6ng python d~ insert Du6i day la kSt qua:

Trang 18

Chu'Ong 2: Hieu nang MongoDB duai tJanh gia cac tac gia 16

Parallel & Threaded Inserts in MongoDB with Sequential Insertions

U6i vm insert theo lu6ng, chung ta kh6ng Stl' dVng bulk insert rna tang buffer cho m6i thread dS thvc hi~n insert M9t 19i feh ra rang cua vi~c insert theo lu6ng la no chia se kSt n6i cua database.

Thay vi hang tram tiSn trinh xu ly, dung hang tram kSt n6i cua database thi m9t nhiSu tiSn trinh co thS dung lu6ng dS chia se m9t kSt n6i.

Trang 19

Chu'ong 2: Hieu nang MongoDB du'6'idimh gia cae tac gia 17

Khi chung ta viSt m(>ttrng dVng co lien quan t61 nhiSu dan vi dfr li~u khac nhau N Su co 1 h~ quan tri ca So' dfr Ii~u nao do ho?t d(>ng nhanh han SQL Server nhiSu Ic1n,miSn phi, dS giam sat va xu Iy, toan b(>h~ th6ng trng dVng cua b?n vai LINQ thi MongoDB ch~c ch~n se Ia S\f l\fa chQn kh6ng th@ t6t han.

Va khi co h~ quan tri ca So' dfr Ii~u nhu V?y thi chung ta co th@tri@n khai va ho?t d(>ngtren hc1uhSt cac thiSt bi phc1nCtrng ph6 biSn hi~n nay, chu kh6ng phai Ia dong thiSt bi may chu cao c~p va chuyen dVng D6ng nghTa vm

vi~c do la kh6ng cc1nphai mua ho?c thue server nhu truac, va t~t nhien chi phi

ban dc1uphai b6 ra th~p han r~t nhiSu, trong khi lqi nhu?n ho?c doanh thu thi gc1nnhu kh6ng thay d6i.

2.2.2 M6 hinh va cdu hinh may thit nghiem

M(>trna hinh ca So' dfr li~u chuyen sau danh cho trng dVng tr\fC tuySn

duqc tang cuemg d@cai thi~n kha nang h6 trq s6 luqng ngum dung cang nhiSu dmg t6t Se co nhiSu tai khoan ngum dung tu trng dVng web tr\fC tuySn, tu cac ham API va nhiSu ung dVng khac co lien quan VS m?t ky thu?t, nguai dung se tuang tac tr\fc tiSp vOl duo1i~ub~ng cach th\fc hi~n cau l~nh truy v~n, m6i thao tac cua hQ I?i tuang trng vm tUng manh dfr li~u nh6 trong toan b(>h~ th6ng Tuy nhien, th\fc tS va 1y thuySt l?i hoan toan khac nhau, cac thu

nghi~m ben duai chi m6 ta m(>tcach dan gian nh~t rna nguai dung tuang tac vai ca So' dfr li~u.

T~t ca cac bai so sanh duqc ch?y tren Lenovo T61 ch?y Windows 7 phien ban 64 bit vm CPU Dual-Core 2.8 Ohz Ca hai phien ban SQL Server

2008 Standard va MongoDB dSu Ia 64 bit

Trang 20

Chuang 2: Hieu nang MongoDB duo'i tlanh gia cae tac gia 18

Day 1a diSm khac bi~t ro rang nh~t gifra MongoDB va SQL Server Lugc d6 clla SQL Server 1amQt bang dan gian g6m 3 truang nhu sau:

Properties

.m::.Jill TheTime

Lugc d6 CllaMongoDB co C~utrUc mQt document nhu sau:

Trang 21

ChU'ang 2: Hieu nang MongoDB dU'ai t1imh gia cae tac gia 19

MongoDB

SQL Server 2008

Trang 22

Chuong 2: Hieu nang MongoDB duai tlemh gia cac tac gia

Chung ta se th~y ph~n thai gian th\fc hi~n insel1 nhu sau:

MongoDB

SQL Ser'ver' (11 ent l'larmi ng up

Building insert data

Waiting on mutex Running!. -~iIii", titFinished with: )000 SQL inser'ts 1n 204::>11\ <;,

Va duai day la kSt qua t6ng qmit khi insert theo tUng s6 1uqng dfr 1i~u:

Trang 23

Chuang 2: Hieu nang MongoDB dum danh gia cae tac gia 21

2.2.4 So sanh t6c do truy van dan gian

Chung ta se tach IQcdfr li~u til' dmg d6i tm;mg khac nhau trong truang

ID cua m6i record M6 hinh cfru truc dfr li~u cua hai database duQ'c dung dS so sanh nhu trong phep so sanh insert KSt qua duQ'cnhu sau:

Trang 24

Chuang 2: Hieu nang MongoDB dum i1cinhgiQ cae tae gia 22

TIme in seconds

I ienl SQLTime Mo

100 0.381,000 2.8

10,000 28

a Time0.080.1

." c:

15

8 U't

0 5

NSu nhin v~lObiSu d6 tren thi chung ta thay r5 rang MongoDB v~n vuq1:trQi han h~n sa vai SQL Server (khoang 3 Ian).

2.2.5 So sanh t6e to truy vein phue tap

M6 hinh dfr Ii~u cho troy van phuc t~p nay g6m co khoa ngo~i Foreign Key va kSt bang Join nhu sau:

Trang 25

-Chuang 2: Hieu nang MongoDB duai iJcinhgia cac tac gia 23

Trang 26

Chuang 2: Hieu nang MongoDB duai iJanh gia cae tae gia 24

Queri s

Trang 27

Chuang 3: So simh tlcinh gici hieu ncmg MongoDB

3.1 cau hinh may thu nghifm

Model: ASUS A52J CPU: Core i5 460M, 2.53 Ghz RAM: 8 GB

Phien ban PHP: 5.4 Phien ban MongoDB: 2.4.5 Phien ban MySQL: 5.5.32 Trinh duy~t: Chrome 28.0.1500.72 m

3.2.1 M6 hinh 1

MySQL:

Trang 28

SET SQL_MODE="NO_!\lnO.Yl\LUE ON :~ERO";

SET time zone = "t.C(i: ::;()";

CREATE TABLE IF NOT EXISTS 'tableins''id' int(i 1) NOT NULL,

'time_insert' int(:L) NOT NULL,'uniqueID' varchar(jG) NOT NULL,

lD duy nh~t tuang tv nhu ben MongoDB Truang id se dugc index.

Va 6 day chung ta su dVng storage engine la lnnoDB vi storage engine nay ho?t d9ng theo co ch8 Row Level Locking nen khi c~p nh~t (Them,xoa,sua) 1 bang thi chi co ban ghi dang bi thao tic bi khoa rna thai, cac ho?t d9ng khac tren table nay v~n diSn ra binh thuang Do do Storage Engine nay thich hgp su dVng cho cac trang web co t~n su~t c~p nh~t dfr li~u cao nhu m?ng xa h9i, diSn dim

Trang 29

Chuang 3: So sGnh aGnh giG hieu ncmg MongoDB 27

Lu<;ycd6 cua MongoDB g6m co 3 truOng, trong do truOng jd If! cua MongoDB tv phcit sinh, hai truOng con l~i 1atruOng time_insert du<;ycdung dS luu thai gian insert ho~c STT (tuy phep so simh) va truOng uniqueID dung dS 1uu ID duy nh~t dVa tren micro giay tuang tv MySQL TruOng jd m~c dinh cua MongoDB se du<;ycindex, hai truOng con l~i khong index.

** SIT : int( 11)

@ Ten: varchar(50)

@ Ho : varchar(50) , ** NgaySinh : int(11)I

I ** active: int(11)l_~ _._ _ _ _ _ _

SET SQL_MODE="N,)_AUTC ';,j]\U1E, CN_ZERO";

SET time zone = ";-C[,:()(;";

DROP TABLE IF EXISTS 'tbl_group';

CREATE TABLE IF NOT EXISTS 'tbl_group''_idnhom' int(::n NOT NULL,

'Ten' varchar (')~) NOT NULL,'Quyen' varchar(:jO) NOT NULL,UNIQUE KEY '_idnhom ' (' _ idnhom ' )ENGINE=InnoDB DEFAULT CHARSET=latinl;

Trang 30

Chuang 3: Sa sanh tlanh gia hieu nang MangaDB

UNIQUE KEY 'nickname' ('nickname'),UNIQUE KEY 'iduser' ('iduser' )ENGINE=InnoDB DEFAULT CHARSET=latinl;

DROP TABLE IF EXISTS 'tbl user';

CREATE TABLE IF NOT EXISTS 'tbl user''_id' int(ll) NOT NULL,

'STT' int(ll) NOT NULL,,Ten' varchar (,,:c) NOT NULL,,Ho' varchar (';U) NOT NULL,'NgaySinh' int(ll) NOT NULL,'DiaChi' varchar C:.t) NOT NULL,,SOT' varchar (:2::;) NOT NULL,'NgayTao' int (1n NOT NULL,'Nhom' int(ll) NOT NULL,UNIQUE KEY '_id' ('_id'),KEY 'Nhom' ('Nhom ')ENGINE=InnoDB DEFAULT CHARSET=latinl;

28

ALTER TABLE 'tbl_login'ADD CONSTRAINT 'tbl_login_ibfk l' FOREIGN KEY ('iduser') REFERENCES'tbl_user' ('_id') ON DELETE CASCADE ON UPDATE CASCADE;

ALTER TABLE 'tbl user'ADD CONSTRAINT 'tbl_user_ibfk_l' FOREIGN KEY ('Nhom') REFERENCES'tbl_group' ('_idnhom') ON DELETE NO ACTION ON UPDATE NO ACTION;

Trong mo hinh nay d1Ja tren y tuemg quan ly ngum dung, gom co 3 bang, bang thu nh~t la bang user, dung dS chua thong tin cua ngum dung Bang thu hai la bang login, dung dS chua thong tin dang nh~p user Bang cu6i cung la bang group, day la bang chua danh sach nhom dung dS phan quy~n ngum Slr d\mg Ben qmh 3 bang chung ta con t?O cac lien kSt khoa ngo?i nhu hinh, va t?O index cua cac khoa phu hqp (MySQL yeu c~u index khi rang bUQckhoa ngo?i).

Trang 31

tbl user Nhu v~y chung ta se gifr dugc m6i lien h~ gifra cac record.

m?c dinh.

Trang 32

Chu'ong 3: So sGnh aGnh giG hieu nang MongoDB 30

r

3.3 Quan Ij kit qua

3.3.1 Lu'U kit qua

us thu?n ti~n cho vi~c quan 1y kSt qua, chung ta se viSt mQt ung dVng php cho phep luu kSt qua do dugc xu6ng co sa dfr 1i~uMongoDB.

Ten t?P tin: ResultSave.php

<':~php

/Is~ d~ng MongoDB d6 lUll k~t qu~

I!

!!M6i 100i test dUQc IUD trong m9t collection

//SQ: Simple Query//CQ: Complex Quey"y//CQ2:Corn.pl.~::x Query l.tJith computing

$typeActionArray = array("S!", "eI",IS(!",ICQI,"C\.i2");

!/MoQ: MangoDE Query//MoA: MangoDE App

!/MyQ: MySQL Query

!11'-1yi\: t.1ySQL n.pp

$typeDBArray = array ("["'101)" 1 t1r':lo~ H, "i ly.Q" 1 "r.lyP- ") i

//Ki~m tra c6 dO li~u chua

if (! (isset ($_GET ['type']) && isset ($_GET ['db']) &&

isset($_GET['amount']) && isset($_GET['time'])))

$amount =(int) $_GET['amount'];

$time = (float) $_GET['time'];

//Lo~i so sanh (SI, el, CO, )//Lo~i D8 do (cau truy v~n ho~c

/;s6 lUQ11g truy vAn

!/Th6i gian th~c hi$n//Kiemtra d0 li~u hqp 1~

$mongo = new Mongo();

$collection = $mongo->testdb->$typeAction;

!/Lby record c0a lo~i DB

$db = $collection >findOne (array ("typc'L'B"=>$typeDB)) ;

Trang 33

Chuang 3: So sGnh aGnh giG hieu nang MongoDB

!!Th~m dG li~u v~o n~u d5 c6 test tru6c

if ($db!='NULL)

{

if lisset ($db [' T.(;8"Lt'] [$amount] ) )

$time 0 ($db['c-',sult'] [$amount]+$time) 12;

$db [ 'n;'sul t ' ][$amount] =$time;

!/T~o ra dO li~u c2n dua vao

$db = array I "r:ypeDl?"<">$typeDB,"r,:;suLt"=>$resul t) ;

/leAy vAo k~t qua Luu trv

D~u tien chung ta quy uac cae tu khoa tuang tmg vm cae phep so

sanh, tuO'ng tmg vm m6i phep so sanh chung ta se co 4 record dS lUll kSt qua nhu MoQ - t6c d<) truy v~n Mongo, MyQ - t6c d<) truy v~n MySQL, MoA-

//CQ2:Complez Query witll computing

!/MoQ: MangoDB Query

!/MoA: MangoDE App

I/MyQ: MySQI.; Que.ty

,: /l":jy,l:J : I\1ySC.~L App

DuOng d~n yeu c~u IUD dfr li~u co cu phap sau:

I php?type=<lo?i so sanh>&db=<lo?i t6c d<) db>&amount=<s6 luqng truy I

Trang 34

Chuong 3: So sanh aanh gia hieu nang MongoDB

I v~n>&time=<thai gian d<;ltduQ'c>

32

Khi dff l~y duQ'c cac thong s6 yeu c~u va kiSm tra cac thong s6 do h<;>p l~, chung ta kSt n6i dSn Mongo v6i collection tucmg ung 10<;liso sanh b~ng ham:

/!K~t nbi d~n MongoDS v~ lAy collection lo~i test

$mongo = new Mongo();

$collection = $mongo->testdb->$typeAction;

Sau do l~y document 10<;li DB kSt qua tuong ung yeu c~u:

/!L~y record eGa lo~i DB

$db = $collection->findOne(array("typeDB"=>$typeDB));

Khi co duQ'c document c~n thiSt, chung ta se them dfr li~u vao record

do m6i ho?c la chia trung binh vm kSt qua dff co:

if ($db! =NULL)

if (isset($db['resiJ Lt'][$amount]))

$time = ($db [•n:;sult IJ [$amount J +$time) /2;

$db [,r'esult:: ' ] [$amount] =$time;

}

else

$result = array();

$result[$amount]=$time;

$db = array ("typeDB"==>$typeDB, "result:: "=>$resul t) ;

Cu6i cung lil dung thao tac upsert trong MongoDB dS lUllkSt qua:

$collection->update(array("_id"=>new

Mongo Id ($id) ),$db, array (I'-'p::'ert •=>TRUE) );

3.3.2 Truy xucit kit qua

Ung dVng nay cho phep kSt xu~t ra t?P tin csv dS xem va ve biSu d6 trong Microsoft Excel nhfrng dfr li~u dff do duQ'ctrong cac bai so sanh.

Ten t?P tin: ResultDownload.php

//M6i .1001 "tes1: dllQC 1.ulJtrong m~t col.J_ec:t::.j_()n

Trang 35

Chu'ang 3: So sGnh tlGnh giG hieu nang MongoDB

/ /CQ2: Com[)lez Query \-'lith ::omput:e

/ /Ylo;' : 1"1on(JoDB AP:p

I/MyQ: MySQIJ Query

./ /I"lY Q: £-:1y8QL App

!!Ki~In tra c6 dG li&u chua

/!L~y c~c dO li~u d~u vaG

$typeAction = $_GET['type']i /ILo?i so s~nh (SI, CI, CQ, )

!/Ki&rn tra da lieu hQp Ie

if (!in array($typeAction,$typeActionArray))

echo "Du J i.eu k:h.CIV:1 nDp le! n;

returni

//K~t n6i d~rl MorlgoDB v~ l~y collection

$rnongo = new Mongo();

/!PhAt sinh ra rn~ng output d~ xuAt

rE:;cord", $value, $allresult ["[:]o;'\"J [$key );

}

Trang 36

Chuong 3: So scmh (tanh gia hieu nang MongoDB

)

else

34

//NguQc l~i rlghla l~ s~ c6 4 tee 09

$output[$i]=array("J.\rnount:", nf-.1ySQL Query TirnE:H, "t"lySQT.J L\.•.p:;"

foreach ($allresult["MyA"] as $key => $valuel {

if(isset ($allresul t [ "[':]yQ" ] [$ key] l&&isset ($allresul t ["["loA"] [$ key] )&&isset ($allresult ["['loQ"] [$ key] ) )

Snow = gmdate("D, d Ivl Y H:i:s");

header ("L:pi.r.:::s: ius, 03 Ju~L 20J.5 G6:0C:CO Gt,/;i");

header (t'Cactle-Colltrol: Il13x-age=O, rlo-cactle, mllst-r"CV31idat2,

header ("Last.-'IvJodi£i(<:l: {Snow}CHT");

II force download

header (tlCont:f;,nt.-~Type: aF)plic-:ltion/f()rcf;~-dol"Jrll()adH);

header ("Content.-'Typt?: ar: p1.:i ca,t.:i,,<,:-'n/cctet-st.re •.=:t:m,n);

header ("Conterlt-Type: application/download");

$typeAction =". csv";

header ("Con t:ent - D.:i.;:~f'GS:i t:i~Jn: 's.tt:a.chment; f.:!.l.;:n::trft.,"=, {$typeAction} ") ;header ("Content-Transfer-Encoding: binary");

Trang 37

Chuang 3: So sGnh tlGnh giG hieu nang MangaDB 35

Khi da: kiSm tra lo?i so sanh dua van hgp l~, tmg dVng kSt n6i dSn collection tuang ung:

$moogo = new Mongo();

foreach ($allresult["[VlyPI"]as $key => $value)

array_push($output[$i],$key."

:cec,ycd",$value, $allresult ["["lah"] [$key]);

I/Ket qua insert co 2 cot

$df = fopen ("php:! !,'utput", ','I');

foreach ($output as $row)

fputcsv($df, $row);

fclose ($df) ;

echo ob get clean();

3.3.3 X6a kit qua

U ng dVng nay cho phep x6a toan b<) dfr 1i~u da: duoc insert trong MySQL va MongoDB (bao g6m ca kSt qua so sanh thCrigian).

Ten t?P tin: ResultDelete.php

Trang 38

Chuong 3: So simh tlanh gia hieu nang MongoDB

I set time limit(0);

T;;tokSt n6i Va x6a cac dfr li~u trong cac database:

Trang 39

Chuong 3: So simh dimh gia hieu nang MongoDB

$rnongo = new Mongo();

Do~n javascript thlJChi~n back ira v~ trang truac cho thu?n ti~n:

<script typ",,="text/javascript" S]~c="jquery min js"></ script>

<script>

setTirneout(function (){history back () ;}, 20CO);

</script>

Trong phep so sanh d~u tien nay, chung ta se S11 dl)ng mo hinh thu nhfrt do thai gian insert thong thuang vao hai database vm nhi~u s6 luqng record/document khac nhau tir 1 client Day la phep thll' thong thuang nhfrt duqc S11 dl)ng, vi no sat vm mo hinh thlJc tS cac website hay S11 dl)ng.

3.4.1 Ung dung insert vao MongoDB

Chung ta viSt trng dl)ng cho phep di~n s6 luqng document c~n insert vao MongoDB nhu sau:

S6- luqng document

IInsert I

Khi nhfrn nut insert thi se hiSn thi kSt qua nhu sau:

Trang 40

Chuong 3: So sanh tlanh gia hieu nang MongoDB 38

f)o tc)'cde} insert vao MongoDB

Toe dQinsert record: mi Ii giay

Ten t~p tin: InsMo.php

<?ph:p

!/Or19 d~ng insert tt16rlg thu6ng vaG MangoDB

include '_QuJckLi';unch.hem.:!' ;

ini set (IrL~:;~rH()I"~/ ~.l.i.rui.t f, t'1 C ~ 4 1:'1' ) ;

!/Kj.~m tra d~ shew .for'ITt hay submit

$action=(!empty($ POST['bt.n c:;ubmit'j)&&

($ POST ['bt::n_5ubmit ' ]===' In.s':?rc ' ) )?'i.nsert ':'ShO'd_ form' ;

!iLay so lUQng insert

$insnum = ~!empty I$ POST ['i nsn tF ' ~ ))?$ POST ['i.nsnum' ] : (:;

!/T&t gi6i h~rlth6i ~)la[l c0a PH?

set time limit(C);

//Ch~y v6ng l~p insertfor ($i=0;$i<$insnum;$i++)

$collection->insert (array (1tim(? .:i nse.:rl:1=>time(), 'uniqueID'=> uniqid()));

!/Nq0ng stm th6i gianSend = microtime(true);

$duration = ($end-$start)*:Qor;

Ngày đăng: 01/09/2023, 21:57

🧩 Sản phẩm bạn có thể quan tâm

w