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

Tìm hiểu node js couch DB và xây dựng website xây dựng hệ thống quản lý bán thức ăn nhanh

69 9 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

Định dạng
Số trang 69
Dung lượng 0,93 MB

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

Nội dung

Phân tích và thiӃt kӃ chӭc chӫ cӱa hàng quҧn lý viӋFÿһt hàng cӫa khách hàng 30 II.2.4.. Giӟi thiӋ u Blocking và Non-Blocking Blocking Theo cách truyӅn thӕng thread-EDVHG WKuKm\WѭӣQJWѭӧn

Trang 1

.+2$7,1+Ӑ&

-

/8Ұ19Ă17Ӕ71*+,ӊ3&Ӱ1+Æ1 1*¬1+&Ð1*1*+ӊ7+Ð1*7,1

Trang 2

0ӝWOҫQQӳDem xin FKkQWKjQKFҧPѫQ

Ĉj1ҹQJQJj\WKiQJQăP

6LQKYLrQWKӵFKLӋQ

&KX7Kӏ7KDQK9kQ

Trang 4

LӠI CҦ0Ѫ1 2

LӠ,&$0Ĉ2$1 3

LÝ DO CHӐ1Ĉ ӄ TÀI 1

1 Bӕi cҧQKÿӅ tài: 1

2 MөFÿtFKÿӅ tài 2

&+ѬѪ1*, &Ѫ6 Ӣ LÝ THUYӂT 3

I.1 GIӞI THIӊU NODE.JS 3

I.1.1 Javascript và lұp trình Server 3

I.1.2 Node.JS là gì 3

I.1.3 Giӟi thiӋu Blocking và Non-Blocking 4

I.1.4 Socket.io 7

I.1.5 10 lý do nên sӱ dөng Node JS: 8

I.2 GIӞI THIӊU Vӄ &Ѫ6Ӣ DӲ LIӊU NoSQL 10

I.2.1 Giӟi thiӋu NoSQL 10

I.2.2 ;iFÿӏnh NoSQL có phù hӧp 12

I.2.3 Tìm hiӇu vӅ CouchDB 13

&+ѬѪ1*,, PHÂN TÍCH VÀ THIӂT Kӂ Hӊ THӔNG 18

II.1 PHÂN TÍCH YÊU CҪU 18

II.1.1 Mô tҧ bài toán quҧn lý cӱa hàng bán thӭFăQQKDQKWUӵc tuyӃn 18

II.1.2 Phân tích yêu cҫu bài toán 18

II.1.3 ;iFÿӏnh các chӭFQăQJFKtQKFӫa hӋ thӕng 19

II.2 PHÂN TÍCH VÀ THIӂT Kӂ Hӊ THӔNG : 21

Trang 5

II.2.2 BiӇXÿӗ UseCase sӱ dөng 21

II.2.1 Phân tích và thiӃt kӃ chӭFQăQJÿăQJNê 26

II.2.2 Phân tích và thiӃt kӃ chӭFQăQJÿăQJQKұp 28

II.2.3 Phân tích và thiӃt kӃ chӭc chӫ cӱa hàng quҧn lý viӋFÿһt hàng cӫa khách

hàng 30

II.2.4 Phân tích và thiӃt kӃ chӭFQăQJFKӫ cӱDKjQJ[HPÿѭӧc danh sách tҩt cҧ

FiFPyQăQWҩt cҧ các nhân viên, tҩt cҧ các khách hàng 31

II.2.5 Phân tích và thiӃt kӃ chӭFQăQJFKӫ cӱDKjQJWKrPPyQăQWKrPQKkQ

II.3 Phân tích và thiӃt kӃ FѫVӣ dӳ liӋu 44

II.3.1 ThiӃt kӃ các doc 44

II.3.2 ThiӃt kӃ các View :(hiên thӏ các thông tin cҫn thiӃt lҩy tӯ các doc) 46

&+ѬѪ1*,,, TRIӆ1.+$,&+ѬѪ1*75Î1+ « 49

III.1 CÁC CÔNG CӨ SӰ DӨNG 49

Trang 6

III.3 KӺ THUҰT VÀ CÔNG NGHӊ SӰ DӨNG 49

III.4 &¬,ĈҺ70Ð,75ѬӠNG 49

III.4.1 &jLÿһt node.js 49

III.4.2 &jLÿһt couchdb 49

III.5 DEMO 50

KӂT LUҰN 58

Trang 7

DANH MӨC HÌNH VӀ

Hình 1: Mô tҧ blocking 5

Hình 2 : Mô tҧ non-blocking 6

Hình 3 : Mô tҧ event loop 6

Hình 4 : UseCase tәng quát 22

+uQK8VH&DVHĈăQJNêÿăQJQKұp 22

Hình 6 : UseCase Quҧn lý danh sách thӵFÿѫQ 23

Hình 7: UseCase chӫ cӱa hàng quҧn lý danh sách nhân viên 24

Hình 8 : UseCase chӫ cӱa hàng quҧn lý danh sách khách hàng 24

Hình 9 : UseCase chӫ cӱa hàng quҧQOêÿһt hàng 24

Hình 10 : UseCase khách hàng xem lӏch sӱ ÿһt hàng 25

Hình 11 : UseCase khách hàng xem danh sách thӵFÿѫQ 25

+uQK8VH&DVHNKiFKKjQJÿһt hàng 25

Hình 13 : BiӇXÿӗ hoҥWÿӝQJÿăQJNê 27

Hình 14 : BiӇXÿӗ tuҫn tӵ - ĈăQJNt 27

Hình 15: BiӇXÿӗ hoҥWÿӝng - ĈăQJQKұp 29

Hình 16: BiӇXÿӗ tuҫn tӵ - ĈăQJQKұp 29

Hình 17 : BiӇXÿӗ hoҥWÿӝng quҧQOêÿһt hàng 30

Hình 18 : BiӇXÿӗ tuҫn tӵ chӫ cӱa hàng quҧQOêÿһt hàng 31

Hình 19: BiӇXÿӗ hoҥWÿӝng ± danh sách thӵFÿѫQ 32

Hình 20 : BiӇXÿӗ hoҥWÿӝQJÿăQJQKұp 32

Hình 21: BiӇXÿӗ hoҥWÿӝng ± 7KrPPyQăQ 33

Hình 22 : BiӇXÿӗ tuҫn tӵ chӫ cӱa hàQJWKrPPyQăQ 34

Trang 8

Hình 23: BiӇXÿӗ hoҥWÿӝng chӫ cӱa hàng chӍnh sӱDWK{QJWLQPyQăQ 35

Hình 24 : BiӇXÿӗ tuҫn chӫ cӱa hàng chӍnh sӱDWK{QJWLQPyQăQ 36

Hình 25: BiӇXÿӗ hoҥWÿӝng chӫ cӱa hàng quҧn lý thӵFÿѫQ 38

Hình 26 : BiӇXÿӗ tuҫn tӵ chӫ cӱDKjQJ[yDPyQăQ 38

Hình 27 : BiӇXÿӗ tuҫn tӵ tìm kiӃPPyQăQ 40

Hình 28 : BiӇXÿӗ hoҥWÿӝng khách hàng xem danh sách thӵFÿѫQ 41

Hình 29 : BiӇXÿӗ tuҫn tӵ khách hàng xem danh sách thӵFÿѫQ 42

Hình 30 : BiӇXÿӗ hoҥWÿӝQJNKiFKKjQJÿһt hàng 43

Hình 31: BiӇXÿӗ tuҫn tӵ NKiFKKjQJÿһt hàng 43

Hình 327UDQJÿăQJQKұp 50

Hình 337UDQJÿăQJNêWjLNKRҧn mӟi 53

Trang 9

DANH MӨC BҦNG BIӆU

Bҧng 1 : Bҧng các chӭFQăQJÿăQJNêÿăQJQKұp 19

Bҧng 2 : Bҧng các chӭFQăQJFKӫ cӱa hàng quҧn lý viӋFÿһt hàng cӫa khách hàng 19 Bҧng 3 : Bҧng chӭFQăQJFKӫ cӱa hàng quҧn lý danh sách thӵFÿѫQPyQăQ 20

Bҧng 4 : Bҧng chӭFQăQJFKӫ cӱa hàng quҧn lý danh sách nhân viên 20

Bҧng 5 : Bҧng chӭFQăQJFKӫ cӱa hàng quҧn lý danh sách khách hàng 20

Bҧng 6 : Bҧng chӭFQăQJNKiFKKjQJ[HPGDQKViFKWKӵFÿѫQPyQăQ 21

Bҧng 7 : Bҧng chӭFQăQJNKiFKKjQJWKӵc hiên viӋFÿһt hàng 21

Bҧng 8 : Doc Users 44

Bҧng 9 : Doc thӵFÿѫQ 45

Bҧng 10 : Doc nhân viên 45

Bҧng 11 : Doc nhân viên 46

Trang 10

WUѭӡQJKӧSQj\1yVӁJLҧPVӕOXӗQJKRҥWÿӝQJFӫDPi\FKӫ[XӕQJJLҧPWKӡLJLDQ WUӉ

Trang 11

2 MөFÿtFKÿ Ӆ tài

/XұQYăQWӕWQJKLӋSWUrQêWѭӣ QJÿӅWjLYӟLEDPөFÿtFKFKtQK :

x Tìm hiӇu vӅ Node.JS

x Tìm hiӇu vӅ FѫVӣ dӳ liӋu phi quan hӋ NoSQL, couchDB

x Xây dӵng ӭng dөng bán thӭFăQnhanh

Trang 12

&+ѬѪ1*, &Ѫ6 Ӣ LÝ THUYӂT

I.1 GIӞI THIӊU NODE.JS

I.1.1 Javascript và lұ p trình Server

Mһc dù các ӭng dөng trên nӅn web trӣ nên phә biӃn trong nhӳng năm gҫn ÿây, nhѭng chúng vүn rҩt khó ÿӇ phát triӇn, duy trì và mӣ rӝng NhiӅu thách thӭc ӣ ÿây là viӋc QJăQ cách giӳa các thành phҫn client và server Các thành phҫn phía client thѭӡng ÿѭӧc sӱ dөng bao gӗm HTML, CSS, Javascript, Ajax (mӝt phҫn cӫa javascript), ҧnh

và các file mà ta có thӇ tҧi vӅ tӯ trình duyӋt Phía server, thì ta cҫn lҳng nghe tӯ các yêu

cҫu, xuҩt ra tài nguyên hoһc thông tin và thao tác vӟi chúng ÿӇ chúng có thӇ gӱi trҧ

vӅ phía client Mӛi mӝt công nghӋ mang lҥi mӝt trҧi nghiӋm khác nhau Các ngôn ngӳ phía server ÿѭӧc dùng phә biӃn ÿӃn bây giӡ là PHP, java và NET

ĈLӅu này dүn ÿӃn viӋc cҫn có mӝt chuҭn ÿӇ thӕng nhҩt lұp trình giӳa server

và client Hӑ xây dӵng server dӵa theo Javascript có thӇ làm web server và nhiӅu KѫQthӃ nӳa

Chúng ta sӁ tұp trung vào mӝt Javascript-server-side khác: Nodejs

I.1.2 Node.JS là gì

Node.js là 1 nӅn tҧng (platform) chҥ\WUrQP{LWUѭӡng V8 Javascript runtime Node.js cho phép lұp trình viên xây dӵng các ӭng dөng có tính mӣ rӝng cao sӱ dөng -DYDVFULSWWUrQVHUYHU9jYuÿѭӧc porting tӯ C nên vӅ mһt tӕFÿӝ xӱ lý thì khá nhanh Nodejs, sӱ dөng mӝt sӵ kiӋn lһp thay cho các luӗng, và nó có thӇ mӣ rӝng lên hàng triӋu kӃt nӕi mӝt lúc

Mӛi mӝt xӱ lý vào ra trong Nodejs là không ÿӗng bӝ, QJKƭD là máy chӫ có thӇtiӃp tөc xӱ lý các request ÿӃn trong khi các xӱ lý vào ra ÿDQJ diӉn ra Javascript mà

mӝt ngôn ngӳ phù hӧp cho viӋc lұp trình hѭӟng sӵ kiӋn bӣi vì nó có các hàm không ÿӗng bӝ và sӵ bao ÿóng cái mà tҥo ra mӝt hàm callbacks ÿҧm bҧo Và lұp trình viên Javascript thì ÿmELӃt cách lұp trình theo cách này rӗi Mô hình hѭӟng sӵ kiӋn khiӃn cho Nodejs chҥy rҩt nhanh và có thӇ triӇn khai và mӣ rӝng cho các ӭng dөng

Trang 13

thӡi gian thӵc mӝt cách dӉ dàng

Mӝt lӧi ích lӟn lao cӫa NodeJS ÿy là nó ÿѭӧc viӃt bҵng javascript Nó FNJQJ hӛ

trӧ các hӋ NoSQL dùng javascript ÿӇ truy vҩn Tӯ ÿây ta chӍ cҫn hӑc mӝt ngôn ngӳ

là javascript ÿӇ thӵc thi tӯ phía trình duyӋt, phía webserver và cҧ cho database server

I.1.3 Giӟi thiӋ u Blocking và Non-Blocking

Blocking Theo cách truyӅn thӕng (thread-EDVHG WKuKm\WѭӣQJWѭӧng mӝWQJkQKjQJÿDQJ

áp dөng mô hình phөc vө: Phөc vө hoàn toàn mӝt yêu cҫu rӗi mӟi chuyӇn sang

yêu cҫXNKiF7URQJÿyQKkQYLrQWURQJQJkQKjQJ7ѭѫQJӭng mӛi nhân viên là mӝt Thread Và mӛi mӝt yêu cҫXWѭѫQJӭQJOjUHTXHVWÿӃn server Bҥn yêu cҫu là muӕn

gӱi tiӅn vào ngân hàng Bҥn sӁ phҧLÿLӅn 1 sӕ IRUPQKѭWrQQJѭӡi gӱi, sӕ tài khoҧn cӫa

hӑ, sӕ tiӅn cҫn gӱi.v v Trong thӡi gian bҥQÿLӅn thông tin cҫn rút tiӅn vào tӡ khai Cô

nhân viên phҧi chӡ bҥn BҥQÿmNKyDF{ҩy không cho cô ҩy phөc vө các khách hàng

NKiFYuO~FÿyF{ҩ\ÿDQJUҧnh vì phҧLÿӧi bҥQ+jQKÿӝng ÿӧi ӣ ÿk\SKҫn lӟn là hành

ÿӝng vào/ra, truy suҩt file, hoһFÿӧi kӃt quҧ truy vҩQ64/WURQJ:HEVHUYLFHĈyOjFѫchӃ Blocking Theo cách này NӃXQJkQKjQJÿDQJTXiWҧi vì có quá nhiӅXQJѭӡi chӡ

ÿѭӧc phөc vө Thì ngân hàng chӍ còn mӝt cách duy nhҩWOj7ăQg thêm sӕ nhân viên

phөc vө lên Ӣ WUѭӡng hӧp này trong ví dө FK~QJWDOjWăQJVӕ server phөc vө lên

VҩQÿӅ xҧy ra ӣ ÿk\UD.KLWăQJVӕ OѭӧQJQKkQYLrQOrQÿӇ ÿiSӭng nhu cҫu phөc

vө khách hàng thì ngân hàng phҧLWăQJFKLSKt WLӅQÿӇ trҧ lѭѫQJPһt bҵQJYăQ

SKzQJ  WѭѫQJӭng vӟi viӋFWăQJSKҫn cӭng máy chӫ OrQÿӇ ÿiSӭQJ 1KѭWKӃ sӁ gây

ra các vҩQÿӅ vӅ lãng phí Và không tұn dөQJÿѭӧc nguӗn lӵc và tiӃt kiӋPÿѭӧc chi phí

Trang 14

I.1.3.2 Non-Blocking

Ӣ mӝt ngân hàng khác, hӑ lҥi áp dөng theo mӝWSKѭѫQJWKӭc mӟi

(eventdriven): Tұn dөng mӑi khҧ QăQJFӫa tҩt cҧ các nhân viên khi hӑ rҧnh và nhân viên

khi có yêu cҫu mӟi phөc vө.Tӭc là khi bҥn có mӝt yêu cҫu muӕn gӱi tiӅQQKѭӣ trên

Cô nhân viên chӍ cҫn ÿѭDEҥn bút và giҩ\ÿӇ bҥQÿLӅn vào và bҧo bҥn hãy ngӗi ӣ ghӃ

chӡ ÿӇ ÿLӅn xong thông tin gӱi tiӅQ7URQJNKLÿyF{ҩy có thӇ phөc vө nhӳng vӏ khách

tiӃp theo Ӣ ÿk\EҥQÿmNK{QJNKyDF{ҩy lҥi Và cô nhân viên tranh thӫ O~Fÿӧi bҥn

ÿLӅn các thông tin Cô ҩy có thӇ làm viӋc khác Thành ra ӣ ÿk\NK{QJFyKjQKÿӝQJÿӧi

Y{QJKƭDӣ ÿk\.KLEҥQÿLӅn xong thông tin, bҥn có thӇ trӣ lҥi gһp cô ҩ\EiROjÿmKRjQ

thành Cô ҩy sӁ tiӃp tөc phөc vө bҥQÿӇ bҥn hoàn thành viӋc cӫDPuQKĈk\OjFѫFKӃ

Non-Blocking

Bҥn có thӇ thҩy, theo mô hình áp dөng cӫa ngân hàng này (event-driven), hӑ sӁ

tұn dөQJÿѭӧc khoҧng thӡi gian rӛi cӫa nhân viên KhiӃn cho viӋc mӝt nhân viên có thӇ

phөc vө nhiӅXNKiFKKjQJKѫQVRYӟLQJkQKjQJGQJP{KuQKWKHRFiFKFNJӣ trên NӃu

có quá tҧi Bҥn chҳc chҳn vүn phҧLWKrPQKkQYLrQÿӇ ÿiSӭng kӏp thӡi 1KѭQJ

Trang 15

chҳc chҳn sӁ WKrPtWQKkQYLrQKѫQ7LӃt kiӋPÿѭӧc rҩt nhiӅXWjLQJX\rQ Ĉk\FNJQJOjP{KuQKÿѭӧc áp dөng phә biӃn ӣ các ngân hàng)

+uQK0{WҧQRQ -blocking

I.1.3.3 KiӃn trúc event loop:

Event loop

x Cho phép tiӃp tөc nhұQUHTXHVWNKiFNKLÿmQKұn 1 request, cho phép sӱ lý

ÿDOXӗng, mӛi luӗng thӵc hiӋn 1 task cӫa request

x Trҧ lҥi callback cӫDUHTXHVWWѭѫQJӭng

+uQK0{WҧHYHQWORRS

Trang 16

I.1.4 Socket.io

*LӟLWKLӋX6RFNHWLR6RFNHW,2OjPӝWWKѭYLӋQMDYDVFULSWFyPөFÿtFKWҥRUDFiFӭQJGөQJUHDOWLPHWUrQWUuQKGX\ӋWFNJQJQKѭWKLӃWEӏGLÿӝQJ9LӋFVӱGөQJWKѭYLӋQQj\FNJQJUҩWÿѫQJLҧQYjJLӕQJQKDXӣFҧVHUYHUOүQFOLHQW

&iFKVӱGөQJVRFNHWLRĈӇLPSRUWWKѭYLӋQQj\ PӣFӱDVәFRQVROHYjFjLÿһW6RFNHWLREҵQJOӋQKVDX

Socket.IO cung cҩp 3 event chính là connect, message và disconnect Chúng

ÿѭӧc kích hoҥt khi client/server kӃt nӕi

ĈӇ gӱi dӳ liӋu, ta dùng lӋnh send() Dӳ liӋu có thӇ Ojÿӕi Wѭӧng và sӁ nhұn

ÿѭӧc qua sӵ kiӋn message

Ví dө: socket.send("Hello world");

Trang 17

Socket.IO có thӇ gӱi và nhұn các event tӵ tҥo vӟLSKѭѫQJWKӭc emit() Hai phía

gӱi và nhұn phҧi biӃWÿѭӧc tên cӫDHYHQWÿyÿӇ thӵc hiӋn giao tiӃp:

-DYDVFULSWÿѭӧc tҥRUDOjÿӇ làm ngôn ngӳ lұp trình cho client web

Tҩt cҧ các web deYHORSHUÿӅu biӃW-6GRÿyYLӋc cҧ phía client và phía server

ÿӅu sӱ dөQJ-6FNJQJPDQJQKLӅXêQJKƭD

+ѫQQӳa, viӋc cҧ hai phía C/S cùng sӱ dөng mӝt ngôn ngӳ FKXQJÿHPWӟi khҧ

QăQJKҩp dүn là cҧ hai phía có thӇ sӱ dөng chung mӝWÿRҥn code, mӝt module, làm

giҧm thӡi gian phát triӇn, ít lӛLKѫQYjWKӡi gian kiӇm thӱIL[EXJFNJQJQJҳQKѫQ

2 Khҧ QăQJP ӣ rӝng

ViӋc thiӃt kӃ mӝt ӭng dөng có khҧ QăQJPӣ rӝng là mӝt thách thӭc lӟn TӕFÿӝ

xây dӵng và mӣ rӝng mӝt ӭng dөng Node.JS gây ҩQWѭӧng mҥnh

Mӝt trong nhӳng bí mұWÿӇ Node.JS có thӇ có ÿyOjHYHQW-loop KiӃn trúc này

cӫa Node.JS khiӃQQyÿiSӭng các yêu cҫu tӯ client hoàn toàn khác so vӟi các công

Trang 18

Công nghӋ web phát triӇn tӟi chóng mһt, và ӭng dөng web thӡi gian thӵFÿDQJ

nhen nhóm phát triӇn Các công nghӋ QKѭ :HE6RFNHWÿmVҹn sàng cho viӋc hàng

triӋXQJѭӡi dùng có thӇ tұQKѭӣng viӋFWѭѫQJWiFZHEJҫQQKѭKRjQWRjQNK{QJFy

ÿӝ trӉ

1RGH-6FNJQJKѭӟng tӟi viӋc xӱ lý sӕ Oѭӧng kӃt nӕLÿӗng thӡi khәng lӗ QKѭNӇ

WUrQ'RÿyEҵng viӋc sӱ dөng Node.JS bҥQFNJQJÿDQJOjPFKRF{QJty mình bҳWÿҫu

sӱ dөng nhӳng thӃ mҥnh trên ngay bây giӡ

4 HiӋ XQăQJ

Node.JS sӱ dөng engine V8 cӫa Google - mӝt thӭ nhanh mӝWFiFKÿLrQUӗ và

QJj\FjQJÿѭӧc cҧi thiӋn Cùng vӟi mô hình non-blocking IO, viӋc tҥo ra mӝt ӭng

dөng web chұm chҥp bҵng Node.JS OjÿLӅu không thӇ

Mӛi ӭng dөng viӃt trên Node.JS có thӇ ÿiSӭng hàng ngàn kӃt nӕLÿӗng thӡi ngay

cҧ khi sӱ dөng nhӳng phҫn cӭQJWK{QJWKѭӡng

5 Tұ n dөng tӕ LÿDNK ҧ QăQJF ӫa phҫn cӭng

Bӝ nhӟ là mӝWFiLJuÿyÿҳWÿӓ khi bҥn cҫn host mӝt ӭng dөng Vӟi khҧ năQJFӫa

mình Node.JS cho phép bҥn tӕLѭXKyDYLӋc sӱ dөng hҥ tҫng hiӋn tҥi, hoһc là host

ӭng dөng trên nhӳng máy ҧo rҿ tiӅQKѫQ

6 Cӝ QJÿ ӗQJÿ{QJÿ ҧRYjQăQJÿ ӝng

CӝQJÿӗng Node.JS phát triӇn vӟi tӕFÿӝ ÿLrQUӗWKXK~Wÿѭӧc nhӳng developer

thông minh nhҩWWKDPJLDĈLӅXQj\FyQJKƭDOjKӋ sinh thái Node phát triӇn mau lҽ

tӯng ngày, nên chúng ta có thӇ Fy ÿѭӧc nhӳng hӛ trӧ miӉQSKtYjWKѭѫQJPҥi tӯ

nhiӅu nguӗn khác nhau

7 Tìm kiӃ m developer

NӃu bҥn là doanh nghiӋSYjÿDQJWuPNLӃm developer cho viӋc phát triӇn mӝt

ӭng dөng trên Node.JS thì rҩt dӉ dàng, chӍ cҫn tìm mӝt developer biӃW-6Ojÿѭӧc

/jPFKRÿ ӝi phát triӇ n cӫa bҥ n hҥ nh phúc

Trang 19

Do có cӝQJ ÿӗQJ ÿ{QJ ÿҧo, nên viӋF WuP ÿѭӧc nhӳng module, package

opensource phù hӧp vӟi sҧn phҭm cӫa bҥQFNJQJNK{QJSKҧLOjNKyÿLӅu này làm

giҧm công sӭc phát triӇQWăQJÿӝ hài lòng cӫDÿӝi phát triӇn

MӝWÿӝi phát triӇn hҥnh phúc là mӝWÿӝi phát triӇn hӳu hiӋu

9 Thӡi gian phát triӇ n ngҳ n và hiӋ u suҩ WWKXÿѭ ӧFFDRKѫQ

Vӟi nhӳQJÿһFÿLӇm cӫa mình: ngôn ngӳ ÿӗng nhҩt, cӝQJÿӗQJQăQJÿӝng, dӉ

dàng tìm trӧ giúp, tính sӱ dөng lҥi cao, mӝt ӭng dөQJÿѭӧc phát triӇn trên Node.JS

sӁ có thӡi gian sҧn xuҩt ngҳQKѫQQKLӅXWăQJFѫKӝi sӟm xuҩt hiӋn và chiӃPOƭQKWKӏ

WUѭӡng

10 NhiӅ u lӵa chӑ n hosting cho doanh nghiӋ p

Rҩt nhiӅu nhà cung cҩp dӏch vө ÿiP Pk\ ÿm ÿDQJ Yj VӁ hӛ trӧ Node.JS, doanh

nghiӋp có thӇ thoҧi mái lӵa chӑn nhà cung cҩp phù hӧp vӟi mong muӕn cӫa mình

I.2 GIӞI THIӊU Vӄ &Ѫ6 Ӣ DӲ LIӊU NoSQL

I.2.1 Giӟi thiӋ u NoSQL

Giӟi thiӋu NoSQL, viӃt tҳt cӫa non-relational, hoһc theo cách hiӇXNKiFWKuFyQJKƭDOj1RWonly SQL (không chӍ Oj64/ 1R64/ÿһc biӋt nhҩn mҥQKÿӃQP{KuQKOѭXWUӳ cһp giá

trӏ khóa và hӋ thӕQJOѭXWUӳ phân tán HӋ CSDL này có thӇ OѭXWUӳ, xӱ lý tӯ Oѭӧng rҩt

nhӓ ÿӃn hàng petabytes dӳ liӋu vӟi khҧ QăQJFKӏu tҧi, chӏu lӛLFDRQKѭQJFKӍ ÿzLKӓi vӅ

tài nguyên phҫn cӭng thҩp NoSQL thiӃt kӃ ÿѫQJLҧn, nhҽ, gӑQKѫQVRYӟi RDBMs,

thiӃt kӃ ÿһc biӋt tӕLѭXYӅ hiӋu suҩt, tác vө ÿӑc-JKLtWÿzL hӓi vӅ phҫn cӭng mҥnh và

ÿӗng nhҩt, dӉ dàng thêm bӟt các node không ҧQKKѭӣng tӟi toàn hӋ thӕng,

So sánh NoSQL và RDBMS Các RDBMS hiӋn tҥLÿmEӝc lӝ nhӳng yӃXNpPQKѭYLӋFÿiQKFKӍ mөc mӝWOѭӧng

lӟn dӳ liӋu, phân trang, hoһc phân phӕi luӗng dӳ liӋu media (phim, ҧnh, nhҥF &ѫ

sӣ dӳ liӋu quan hӋ ÿѭӧc thiӃt kӃ cho nhӳng mô hình dӳ liӋu nhӓ WKѭӡQJ[X\rQÿӑc viӃt

Trang 20

trong khi các Social Network Services lҥi có mӝWOѭӧng dӳ liӋu cӵc lӟn và cұp nhұt liên

tөc do sӕ OѭӧQJQJѭӡi dùng quá nhiӅu ӣ mӝt thӡLÿLӇm ThiӃt kӃ trên Distributed NoSQL

giҧm thiӇu tӕLÿDFiF phép tính toán, I/O liên quan kӃt hӧp vӟLEDWFKSURFHVVLQJÿӫ ÿҧm

bҧRÿѭӧc yêu cҫu xӱ lý dӳ liӋu cӫa các mҥng dӏch vө dӳ liӋu cӝQJÿӗng này

VӅ FѫEҧn, các thiӃt kӃ cӫa NoSQL lӵa chӑQP{KuQKOѭXWUӳ tұp dӳ liӋu theo cһp

giá trӏ key-value Khái niӋPQRGHÿѭӧc sӱ dөng trong quҧn lý dӳ liӋu phân tán.Vӟi các

hӋ thӕng phân tán, viӋFOѭXWUӳ có chҩp nhұn trùng lһp dӳ liӋu Mӝt request truy vҩn tӟi

data có thӇ gӱi tӟi nhiӅu máy cùng lúc, khi mӝt máy nào nó bӏ chӃWFNJQJNK{QJ

ҧQKKѭӣng nhiӅu tӟi toàn bӝ hӋ thӕQJĈӇ ÿҧm bҧo tính realtime trong các hӋ thӕng xӱ

OêOѭӧng lӟQWK{QJWKѭӡQJQJѭӡi ta sӁ tách biӋt database ra làm 2 hoһc nhiӅu database

Mӝt database nhӓ ÿҧm bҧo vào ra liên tөFNKLÿҥt tӟLQJѭӥng thӡi gian hoһFGXQJOѭӧng,

database nhӓ sӁ ÿѭӧc gӝp (merge) vào database lӟn có thiӃt kӃ tӕLѭXFKRSKpSÿӑc (read operation) Mô KuQKÿyFKRSKpSWăQJFѭӡng hiӋu suҩt I/O - mӝt trong nhӳng

nguyên nhân chính khiӃn performance trӣ nên kém

7tQKQăQJ &ѫVӣ dӳ liӋu quan hӋ &ѫVӣ dӳ liӋu NoSQL

tӕLѭXYӅ ÿӑc ghi dӳ liӋu Phҫn cӭng ĈzLKӓi cao vӅ phҫn cӭng ĈzLKӓi thҩSKѫQYӅ giá trӏ

YjWtQKÿӗng nhҩt cӫa phҫn

cӭng

Trang 21

ĈăFÿLӇm NoSQL

x Phi quan hӋ (hay không ràng buӝc): Các mӕi quan hӋ giӳa các bҧQJWURQJFѫVӣ

dӳ liӋu quan hӋ (RDBM) sӱ dөng mô hình gӗm 2 loҥi khóa: khóa chính và khóa

phө SULPDU\NH\IRUHLJQNH\ ÿӇ ràng buӝc dӳ liӋu nhҵm thӇ hiӋn tính nhҩt

quán dӳ liӋu tӯ các bҧng khác nhau Non-relational là khái niӋm không sӱ dөng

các ràng buӝc dӳ liӋu cho nhҩt quán dӳ liӋu

x /ѭXWUӳ SKkQWiQP{KuQKOѭXWUӳ phân tán các tұp tin hoһc dӳ liӋu ra nhiӅu máy

khác nhau trong mҥng LAN hoһF,QWHUQHWGѭӟi sӵ kiӇm soát cӫa phҫn mӅm

x Nhҩt quán cuӕi: tính nhҩt quán cӫa dӳ liӋu không cҫn phҧLÿҧm bҧo ngay tӭc

khҳc sau mӛi phép ghi Mӝt hӋ thӕng phân tán chҩp nhұn nhӳng ҧQKKѭӣng theo

SKѭѫQJWKӭc lan truyӅn và sau mӝt khoҧng thӡi gian (không phҧi ngay tӭc khҳc),

WKD\ÿәi sӁ ÿLÿӃn mӑLÿLӇm trong hӋ thӕQJÿӇ cuӕi cùng dӳ liӋu trên hӋ thӕng sӁ

trӣ lҥi trҥng thái nhҩt quán

x TriӇQNKDLÿѫQJLҧn, dӉ nâng cҩp và mӣ rӝng

x Mô hình dӳ liӋu và truy vҩn linh hoҥW«

I.2.2 ;iFÿ ӏ nh NoSQL có phù hӧp

Khi làm viӋc vӟi mӝWOѭӧng lӟn dӳ liӋu, bҥQKm\QJKƭÿӃn NoSQL NoSQL rҩt

thích hӧSÿӇ làm viӋc vӟi dӳ liӋu lӟn bҵng cách loҥi bӓ các ràng buӝc toàn vҽn dӳ liӋu,

cách thiӃt kӃ mô hình phi chuҭn hoá, cách sӱ dөQJLQGH[«ĈmJL~S1R64/WUӣ nên

mҥnh mӁ ÿӇ làm viӋc vӟLOѭӧng lӟn dӳ liӋu Tuy nhiên, có mӝt sӕ tính chҩWVDXÿk\Fҫn

OѭXêNKLOӵa chӑQFѫVӣ dӳ liӋu NoSQL

Tính nhҩt quán cuӕi (Eventual consistency) cҫn phҧLÿѭӧc ӭng dөng chҩp nhұn

&yQJKƭDOjӭng dөng không yêu cҫu ràng buӝc dӳ liӋu, không yêu cҫu dӳ liӋu phҧi cұp

nhұp chính xác ngay tӭc thì Mӝt sӕ ӭng dөng phù hӧSQKѭFiFWUDQJPҥng xã hӝi, các

ӭng dөng ghi log tӵ ÿӝQJ«&iFӭng dөng loҥi này chҩp nhұp dӳ liӋXFNJWURQJPӝt

khoҧng thӡi gian ngҳQWUѭӟFNKLÿѭӧc cұp nhұp mӟLĈәi lҥi chúng WDÿҥWÿѭӧc nhӳng

tiêu chuҭn cao vӅ khҧ QăQJPӣ rӝng và hiӋu quҧ vӅ chi phí, trong khi phөc vө liên tөc

hàng triӋu khách hàng tӯ khҳSQѫLWUrQWUiLÿҩWĈһt biӋt FK~QJWDÿҥWÿѭӧc mӝt hiӋu suҩt

hoҥWÿӝQJFDRKѫQJҩp nhiӅu lҫn nhӡ vào viӋc loҥi bӓ các yêu cҫu nhҩt quán dӳ liӋu

Trang 22

Các ӭng dөng không phù hӧp vӟLFѫVӣ dӳ liӋu NoSQL là các ӭng dөng yêu cҫu

tính nhҩt quán dӳ liӋu cao Tính nhҩt quán dӳ liӋXÿѭӧF[HPQKѭWtQKVӕng còn cӫa ӭng

dөng Ví dө QKѭFiFӭng dөng tài chính, ngân hàQJ«Yӟi các con sӕ OX{Qÿѭӧc cұp

nhұp và cҫQÿѭӧc cұp nhұp tӭc thì Sӵ chұm trӉ có thӇ phҧi trҧ giá rҩWÿҳt Bӣi thӃ nӃu

các ӭng dөng cӫa bҥn thuӝc loҥi này thì hãy lӵa chӑQFѫVӣ dӳ liӋu RDBMS vӟi mô

hình quan hӋ truyӅn thӕng

Các yêu cҫu phân tích hiӋQÿҥL %, FNJQJNK{QJSKKӧp vӟLFѫVӣ dӳ liӋu NoSQL

này Bӣi vì NoSQL hә trӧ rҩt ít các câu truy vҩn Tҩt cҧ ÿӅu phө thuӝc vào sӵ tinh thông

lұSWUuQK1KѭYұy, vӟi mӝt yêu cҫXSKkQWtFKÿѫQJLҧQWKuFNJQJFҫQÿӃn lұp trình trong

ÿy7URQJNKLvӟLFѫVӣ dӳ liӋu RDBMS sӱ dөng ngôn ngӳ 64/ÿӇ truy vҩn, SQL giúp

chúng ta rҩt nhiӅu viӋc trong truy vҩn, phân tích

I.2.3 Tìm hiӇ u vӅ CouchDB

Giͣ i thi͏ u CouchDB

CouchDB là mӝt hӋ quҧn trӏ FѫVӣ dӳ liӋX1R64/OѭXWUӳ WKHRKѭӟng

YăQEҧn, nguӗn mӣ, có khҧ QăQJNKҧ chuyӇn cao trong viӋFWѭѫQJWiFGӳ liӋu giӳa các

Q~WĈLӅu này khiӃn cho nó rҩt thích hӧSWURQJFiFWUѭӡng hӧSOLrQTXDQÿӃn viӋc thӕng

nhҩt và bӅn vӳng dӳ liӋu.ViӋc tích hӧp các bҧn sao (ӣ ÿk\OjFiFYLHZ OjPFKRQyOj

nӅn tҧQJOêWѭӣng cho viӋFÿӗng bӝ hóa dӳ liӋu giӳDÿLӋn thoҥLGLÿӝng, máy tính và

máy chӫ Couchdb không có mô hình cӕ ÿӏQK7KD\YjRÿyQyOѭXWUӳ các bҧn ghi (hay

YăQEҧQ WKHRÿӏnh dҥng JSON, khá nhҽ và dӉ hiӇu cҩu trúc dӳ liӋu, rҩt thích hӧp cho

viӋFOѭXWUӳ dӳ liӋu

CiFÿһFÿLӇm cӫa CouchDB

Trang 23

_id OjÿӏQKGDQKGX\QKҩWFӫDWjLOLӋXĈLӅXQj\FyQJKƭDOjBLGOjEҳWEXӝFYj không

có hai WjLOLӋXFyWKӇFyFQJJLiWUӏ BLG1ӃXEҥQNK{QJ[iFÿӏQKPӝWBLG NKLWҥR PӝW

WjLOLӋX&RXFK'%VӁ WҥR PӝW ,'GX\QKҩW FKREҥQ

_rev OjSKLrQEҧQVӱDÿәLFӫDFiFWjLOLӋX giúp YұQKjQK KӋWKӕQJNLӇPVRiWSKLrQEҧQ

FӫD&RXFK'% 0ӝWWURQJQKӳQJÿLӅX ÿӝF QKҩWYӅKӋWKӕQJVӱDÿәLFӫD&RXFK'%Oj

PӛLOҫQPӝWWjLOLӋXÿѭӧFOѭXJLӳ WjLOLӋXJӕF VӁ không Eӏ JKLÿq

x Design Document

CouchDB không có khái niӋPWDEOHKD\FROOHFWLRQÿӇ cӕ ÿӏnh hay liên kӃt các

tài liӋu vӟi nhau, vì vұy nó trang bӏ cho bҥn mӝt thӭ YNJNKtÿһc biӋt gӑi là tài liӋu thiӃt

kӃ Chúng có các WUѭӡng tiêu chuҭn: _id và _rev, và có thӇ ÿѭӧc tҥRÿӑc, cұp nhұt, và

[yD 1KѭQJ không giӕQJ QKѭ FiF tài liӋu EuQK WKѭӡng, chúng chӭa mã ӭng dөng

trong form cӫa JavaScript và có mӝt cҩu trúc ÿһFWUѭQJ-DYD6FULSWQj\FyWKӇ phân

quyӅn, hiӇn thӏ view vӟi các hàm map/reduce, và nhiӅu thӭ khác

ViӋc xӱ lý truy vҩQ ÿѭӧc thӵc hiӋn qua mӝt thành phҫn trong CouchDB gӑi

là view View gӗm hai thành phҫn: map (ánh xҥ) và reduce (rút gӑn)

Map là mӝt hàm javascript có thӇ phân tích các tài liӋu, rӗi chuyӇQÿәi chúng tӯ cҩu

WU~FEDQÿҫu vào mӝt cһp key-value mӟi

Trang 24

x Tính nhҩt quán cuӕi cùng

&RXFK'%ÿҧm bҧo tính nhҩt quán cuӕi cùng: Mӛi tài liӋu tӵ Qyÿmÿҧm bҧRWtQKÿҫ\ÿӫ,

mӛLGRFXPHQWÿӅu có mӝt resivion, mӝt version riêng

&iFWKDRWiFFѫEҧn trên Couch DB

x Tҥo mӝt Database

PUT http://localhost:5984/demo

x Lҩy danh sách tҩt cҧ Database

GET http://localhost:5984/_all_dbs

Trang 27

&+ѬѪ1*,, PHÂN TÍCH VÀ THIӂT Kӂ Hӊ THӔNG

II.1 PHÂN TÍCH YÊU CҪU

II.1.1 Mô tҧ bài toán quҧ n lý cӱa hàng bán thӭFăQQKDQKWU ӵc tuyӃ n

Bài toán bán thӭFăQ nhanh trӵc tuyӃn nhҵm phөc vө cho các cӱa hàng bán thӭFăQ

nhanh trӵc tuyӃQÿDQJUҩt phә biӃn hiên nay

Yêu cҫXÿһt ra là viӋFÿһt thӭFăQFӫa khách hàng không bӏ JLiQÿRҥn nӃu có quá

nhiӅXQJѭӡLÿһt hàng, chӫ cӱa hàng phҧLÿѭӧc biӃWÿѭӧc viӋFÿһt hàng cӫa khách mӝt

cách nhanh chóng và phҧi biӃWÿѭӧc vӏ trí cӫa khách hàng, ngoài ra cӱa hàng còn phҧi

quҧQOêÿѭӧFÿӝLQJNJQKkQYLrQWKӵFÿѫQFiFPyQăQ thӡi gian giao hàng

Công nghӋ NodeJS vӟLÿһFÿLӇm sӱ dөng event-drivenvà non-blocking I/O làm

cho nó nhҽ và hiӋu quҧ, thích hӧp cho xӱ lý dӳ liӋu trong ӭng dөng thӡi gian thӵc trên

nhiӅu thiӃt bӏ phân tán sӁ phù hӧp vӟi bài toán này

II.1.2 Phân tích yêu cҫ u bài toán

Yêu cҫu chӭFQăQJ

&yÿӕLWѭӧng sӱ dөng là khách hàng và chӫ cӱa hàng

Yêu cҫXÿӕi vӟi hӋ thӕng dành cho chӫ cӱa hàng:

x QuҧQOêÿѭӧc viӋFÿһt hàng cӫa khách hàng(thӡLJLDQÿӏDÿLӇm) mӝt cách

nhanh chóng, chính xác

x QuҧQOêÿѭӧc danh sách thӵFÿѫQ

x QuҧQOêÿѭӧFÿӝLQJNJQKkQYLrQFӱa hàng

Yêu cҫXÿӕi vӟi hӋ thӕng dành cho khách hàng:

Trang 28

Công nghӋ Các công nghӋ sӱ dөQJWURQJFKѭѫQJWUuQK

II.1.3 ;iFÿ ӏ nh các chӭFQăQJFKtQKF ӫa hӋ thӕng

giao hàng

%ҧQJ 2 %ҧQJFiFFKӭFQăQJ FKӫFӱDKjQJ TXҧQOê YLӋFÿһWKjQJFӫDNKiFKKjQJ

&KӫFӱDKjQJTXҧQOêGDQKViFKWKӵFÿѫQFiFPyQăQ

0mFKӭFQăQJ 7rQFKӭFQăQJ

Trang 30

viӋc giao hàng,quҧQOêÿѭӧc danh sách thông tin thӵc ÿѫQFiFPyQăQTXҧQOêÿѭӧc

danh sách thông tin nhân viên, quҧQOêÿѭӧc danh sách khách hàng

Khách hàng sӁ ÿѭӧc cung cҩp các dӏch vө cӫa hӋ thӕng nhҵm mөFÿtFK[HPÿѭӧc

danh sách thӵFÿѫQFiFPyQăQÿһWÿѭӧFFiFPyQăQPRQJPXӕn theo thӡi gian giao,

sӕ Oѭӧng và vӏ trí cҫn giao

II.2.2 BiӇ Xÿ ӗ UseCase sӱ dөng

6ѫÿӗ Gѭӟi thӇ hiӋn UseCase tәng quát cӫa hӋ thӕng vӟLWiFQKkQOjQJѭӡi dùng gӗm

KDLÿӕLWѭӧng là khách hàng và chӫ cӱa hàng UseCase này chӍ ӣ mӭc tәng quát (mӭc

0) cӫa hӋ thӕng

Trang 31

Hình 4 8VH&DVHWәQJ quát

8VH&DVHPӭFÿăQJNêÿăQJQKұS

Hình 5 8VH&DVHĈăQJNêÿăQJQKұS

... thӭc lӟn TӕFÿӝ

xây dӵng mӣ rӝng mӝt ӭng dөng Node. JS gây ҩQWѭӧng mҥnh

Mӝt nhӳng bí mұWÿӇ Node. JS có thӇ có ÿyOjHYHQW-loop KiӃn trúc

cӫa Node. JS khiӃQQyÿiSӭng yêu... viӋc truy vҩn, phân tích

I.2.3 Tìm hiӇ u vӅ CouchDB

Giͣ i thi͏ u CouchDB

CouchDB mӝt hӋ quҧn trӏ FѫVӣ dӳ liӋX1R64/OѭXWUӳ WKHRKѭӟng...

Node. JS sӱ dөng engine V8 cӫa Google - mӝt thӭ nhanh mӝWFiFKÿLrQUӗ

QJj\FjQJÿѭӧc cҧi thiӋn Cùng vӟi mô hình non-blocking IO, viӋc tҥo mӝt ӭng

dөng web chұm chҥp bҵng Node. JS

Ngày đăng: 26/06/2021, 13:16

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

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

w