Phân tích và thiết kế chức năng chủ cửa hàng xem được danh sách tất cả các món ăn, tất cả các nhân viên, tất cả các khách hàng .... 19 Bảng 2 : Bảng các chức năng chủ cửa hàng quản lý vi
Trang 1TRƯỜNG ĐẠI HỌC SƯ PHẠM
TÌM HIỂU NODE.JS, COUCH DB, XÂY DỰNG WEBSITE HỆ THỐNG
QUẢN LÝ BÁN THỨC ĂN NHANH
SINH VIÊN: CHU THỊ THANH VÂN
LỚP: 1OCNTT4 CÁN BỘ HƯỚNG DẪN: TH.S NGÔ ĐÌNH THƯỞNG
ĐÀ NẴNG, 5/2014
Trang 2Em chân thành cảm ơn các thầy cô trong khoa Tin Học trường Đại học
Sư Phạm, Đại học Đà Nẵng, đã truyền đạt những kiến thức quý báu cho em trong những năm học vừa qua và nhất là đã tạo điều kiện thuận lợi cho em học tập và thực hiện đề tài tốt nghiệp này
Đặc biệt, em xin chân thành cảm ơn thầy giáo Th.s Ngô Đình Thưởng đã trực tiếp, tận tình giúp đỡ và hướng dẫn em trong suốt thời gian thực hiện đề tài
Mặc dù đã có nhiều cố gắng để hoàn thành đồ án nhưng trong phạm vi và khả năng cho phép chắc chắn đồ án không tránh khỏi những thiếu sót Em rất mong nhận được sự thông cảm, góp ý và tận tình chỉ bảo của quý thầy cô
và các bạn
Một lần nữa em xin chân thành cảm ơn!
Đà Nẵng, ngày 10 tháng 5 năm 2014
Sinh viên thực hiện
Chu Thị Thanh Vân
Trang 3Tôi xin cam đoan:
1 Những nội dung trong luận văn này là do em thực hiện dưới sự hướng dẫn trực tiếp của thầy Th.s Ngô Đình Thưởng
2 Mọi tham khảo dùng trong luận văn đều được trích dẫn rõ ràng tên tác giả, tên công trình, thời gian, địa điểm công bố
3 Mọi sao chép không hợp lệ, vi phạm quy chế đào tạo, hay gian trá, em xin chịu hoàn toàn trách nhiệm
Sinh viên
Chu Thị Thanh Vân
Trang 4LỜI CẢM ƠN 2
LỜI CAM ĐOAN 3
LÝ DO CHỌN ĐỀ TÀI 1
1 Bối cảnh đề tài: 1
2 Mục đích đề tài 2
CHƯƠNG I CƠ SỞ 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Ề CƠ SỞ DỮ LIỆU NoSQL 10
I.2.1 Giới thiệu NoSQL 10
I.2.2 Xác định NoSQL có phù hợp 12
I.2.3 Tìm hiểu về CouchDB 13
CHƯƠNG II 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ức ăn nhanh trực tuyến 18
II.1.2 Phân tích yêu cầu bài toán 18
II.1.3 Xác định các chức năng chính của hệ thống 19
II.2 PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG : 21
Trang 5II.2.2 Biểu đồ UseCase sử dụng 21 II.2.1 Phân tích và thiết kế chức năng đăng ký 26 II.2.2 Phân tích và thiết kế chức năng đăng nhập 28 II.2.3 Phân tích và thiết kế chức chủ cửa hàng quản lý việc đặt hàng của khách hàng 30
II.2.4 Phân tích và thiết kế chức năng chủ cửa hàng xem được danh sách tất cả các món ăn, tấ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ức năng chủ cửa hàng thêm món ăn, thêm nhân viên 32
II.2.6 Phân tích và thiết kế chức năng chủ cửa hàng chỉnh sửa thông tin món
ăn (nhân viên) 34 II.2.7 Phân tích và thiết kế chức năng chủ cửa hàng xóa món ăn, xóa nhân viên, xóa khách hàng 37 II.2.8 Phân tích và thiết kế chức năng chủ cửa hàng tìm kiếm thông tin món ăn, nhân viên, khách hàng 39 II.2.9 Phân tích và thiết kế chức năng khách hàng xem được danh sách các món ăn 40
II.2.10 Phân tích và thiết kế chức năng khách hàng thực hiện việc đặt hàng trực tuyến 42
II.3 Phân tích và thiết kế cơ sở 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
CHƯƠNG III TRIỂN KHAI CHƯƠNG TRÌNH … 49
III.1 CÁC CÔNG CỤ SỬ DỤNG 49
Trang 6III.3 KỸ THUẬT VÀ CÔNG NGHỆ SỬ DỤNG 49
III.4 CÀI ĐẶT MÔI TRƯỜNG 49
III.4.1 Cài đặt node.js 49
III.4.2 Cài đặt couchdb 49
III.5 DEMO 50
KẾT LUẬN 58
Trang 7DANH 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
Hình 5 : UseCase Đăng ký, đăng nhập 22
Hình 6 : UseCase Quản lý danh sách thực đơn 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ản lý đặ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ực đơn 25
Hình 12: UseCase khách hàng đặt hàng 25
Hình 13 : Biểu đồ hoạt động đăng ký 27
Hình 14 : Biểu đồ tuần tự - Đăng kí 27
Hình 15: Biểu đồ hoạt động - Đăng nhập 29
Hình 16: Biểu đồ tuần tự - Đăng nhập 29
Hình 17 : Biểu đồ hoạt động quản lý đặt hàng 30
Hình 18 : Biểu đồ tuần tự chủ cửa hàng quản lý đặt hàng 31
Hình 19: Biểu đồ hoạt động – danh sách thực đơn 32
Hình 20 : Biểu đồ hoạt động đăng nhập 32
Hình 21: Biểu đồ hoạt động – Thêm món ăn 33
Hình 22 : Biểu đồ tuần tự chủ cửa hàng thêm món ăn 34
Trang 8Hình 23: Biểu đồ hoạt động chủ cửa hàng chỉnh sửa thông tin món ăn 35
Hình 24 : Biểu đồ tuần chủ cửa hàng chỉnh sửa thông tin món ăn 36
Hình 25: Biểu đồ hoạt động chủ cửa hàng quản lý thực đơn 38
Hình 26 : Biểu đồ tuần tự chủ cửa hàng xóa món ăn 38
Hình 27 : Biểu đồ tuần tự tìm kiếm món ăn 40
Hình 28 : Biểu đồ hoạt động khách hàng xem danh sách thực đơn 41
Hình 29 : Biểu đồ tuần tự khách hàng xem danh sách thực đơn 42
Hình 30 : Biểu đồ hoạt động khách hàng đặt hàng 43
Hình 31: Biểu đồ tuần tự khách hàng đặt hàng 43
Hình 32: Trang đăng nhập 50
Hình 33: Trang đăng ký tài khoản mới 53
Trang 9DANH MỤC BẢNG BIỂU
Bảng 1 : Bảng các chức năng đăng ký, đăng nhập 19
Bảng 2 : Bảng các chức năng chủ cửa hàng quản lý việc đặt hàng của khách hàng 19 Bảng 3 : Bảng chức năng chủ cửa hàng quản lý danh sách thực đơn món ăn 20
Bảng 4 : Bảng chức năng chủ cửa hàng quản lý danh sách nhân viên 20
Bảng 5 : Bảng chức năng chủ cửa hàng quản lý danh sách khách hàng 20
Bảng 6 : Bảng chức năng khách hàng xem danh sách thực đơn món ăn 21
Bảng 7 : Bảng chức năng khách hàng thực hiên việc đặt hàng 21
Bảng 8 : Doc Users 44
Bảng 9 : Doc thực đơn 45
Bảng 10 : Doc nhân viên 45
Bảng 11 : Doc nhân viên 46
Trang 10LÝ DO CHỌN ĐỀ TÀI
1 Bối cảnh đề tài:
Ngày nay với kỉ nguyên công nghệ bùng nổ, thời kì của mạng xã hội đã khiến cho
số lượng người dùng truy cập vào cùng một hệ thống ngày càng tăng.Điển hình như Facebook một ngày phục vụ hơn 1000 tỉ lượt xem với khoảng hơn 800 triệu lượt khách vào ra trong một tháng thì ta mới hình dung được sự bùng nổ của thông tin như thế nào.Để giải quyết vấn đề bùng nổ như trên thì chúng ta đã mở rộng các hệ thống máy chủ siêu lớn, phân thành nhiều các cụm đặt khắp nơi trên thế giới.Nhưng với tốc độ tăng trưởng theo cấp số hiện nay thì việc tăng số lượng máy chủ lên thôi có lẽ không đủ.Ta cần xem xét và nâng cấp các giải pháp xây dựng web cho tương lai
Đầu tiên là về mặt ngôn ngữ và máy chủ.Các websever hiện hay với cách truyền thống là phục vụ theo luồng tự nó đã giới hạn khả năng của các máy chủ cho việc đáp ứng số lượng yêu cầu đến từ người dùng và không tốt cho các bài toàn cần tính toán thời gian thực Giải pháp hướng sự kiện của nodeJS có vẻ khả khi trong trường hợp này.Nó sẽ giảm số luồng hoạt động của máy chủ xuống, giảm thời gian trễ nên đáp ứng rất tốt các ứng dụng thời gian thực hiên
Thứ hai là về mặt cơ sở dữ liệu.Với các hệ thống với số lượng lên đến hàng triệu cho đến hàng tỉ thì việc hiệu năng tốt là việc bắt buộc.Hệ thống máy chủ cơ sở dữ liệu đòi hỏi phải rất mạnh mẽ nếu không máy chủ sẽ bị quá tải.Ngôn ngữ SQL là ngôn ngữ thông dịch với các ràng buộc trong các bảng khiến cho hiệu năng thực sự của hệ thống cơ sở dữ liệu khi thực thi là khá ì ạch với hệ thống lớn như kể trên.Chưa
kể là với hệ thống lớn thì vấn đề phân tán dữ liệu, tính toàn vẹn dữ liệu là việc rất quan trọng.NoSQL đáp ứng được tất cả các yêu cầu này.Với tốc độ nhanh do không phải qua các câu truy vấn SQL, có tính sẵn sàng, phân tán cao và độ ổn định tuyệt vời.Rất thích hợp cho các hệ thống có lượt truy vấn lớn.Ở trong khóa luận của tôi, tôi
sẽ nghiên cứu về một NoSQL khá phổ biến - CouchDB.Với khả năng chịu lỗi tốt và tính ổn định cao, đồng bộ giữa các thiết bị tốt, hỗ trợ các phiên bản khi offline tốt.CouchDB xứng đáng là một cơ sở dữ liệu đáng tin cậy
Trang 112 Mục đích đề tài
Luận văn tốt nghiệp trên ý tưởng đề tài với ba mục đích chính:
Tìm hiểu về Node.JS
Tìm hiểu về cơ sở dữ liệu phi quan hệ NoSQL, couchDB
Xây dựng ứng dụng bán thức ăn nhanh
Các bước thực hiện
Tìm tài liệu,tìm hiểu về NodeJS và CouchDB
Phân tích yêu cầu hệ thống bán thức ăn nhanh trực tuyến
Xây dựng cơ sở dữ liệu CouchDB, các view và các doc
Xây dựng giao diện hệ thống
Xây dựng các chức năng quản lý
Tìm hiểu về socket.io , xây hệ thống đặt thức ăn “realtime”
Tiến hành kiểm thử đảm bảo chất lượng
Viết báo cáo tổng kết đề tài và đề ra hướng phát triển
Bố cục luận văn
Luận văn gồm có 3 chương
Chương I: Cơ sở lý thuyết
Chương II: Phân tích thiết kế hệ thống
Chương III: Triển khai chương trình
Trang 12CHƯƠNG I CƠ SỞ 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 ngăn 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
Điề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 hơn thế 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ạy trên môi trườ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 Javascript trên server Và vì được porting từ C nên về mặt tốc độ 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ộ, nghĩa 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 đang 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ì đã biế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 13thời gian thực một cách dễ dàng
Một lợi ích lớn lao của NodeJS đó là nó được viết bằng javascript Nó cũng 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-based) thì hãy tưởng tượng một ngân hàng đang
á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ầu khác Trong đó nhân viên trong ngân hàng Tương ứng mỗi nhân viên là một Thread Và mỗi một yêu cầu tương ứng là 1 request đế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ải điền 1 số form như tên ngườ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ạn điề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ạn đã "khóa" cô ấy không cho cô ấy phục vụ các khách hàng khác vì lúc đó cô ấy đang rảnh vì phải đợi bạn Hành động đợi ở đây phần lớn là hành động vào/ra, truy suất file, hoặc đợi kết quả truy vấn SQL trong Webservice Đó là cơ chế Blocking Theo cách này Nếu ngân hàng đang quá tải vì có quá nhiều người chờ được phục vụ Thì ngân hàng chỉ còn một cách duy nhất là Tăng thêm số nhân viên phục vụ lên Ở trường hợp này trong ví dụ chúng ta là tăng số server phục vụ lên
Vấn đề xảy ra ở đây ra Khi tăng số lượng nhân viên lên để đáp ứng nhu cầu phục
vụ khách hàng thì ngân hàng phải tăng chi phí (tiền để trả lương, mặt bằng văn phòng ) (tương ứng với việc tăng phần cứng máy chủ lên để đáp ứng) Như thế sẽ gây
ra các vấn đề về lãng phí Và không tận dụng được nguồn lực và tiết kiệm được chi phí
Trang 14Hình 1: Mô tả blocking
I.1.3.2 Non-Blocking
Ở một ngân hàng khác, họ lại áp dụng theo một phương thức mới (eventdriven): Tận dụng mọi khả năng củ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ền như ở trên
Cô nhân viên chỉ cần đưa bạn bút và giấy để bạn điền vào và bảo bạn hãy ngồi ở ghế chờ để điền xong thông tin gửi tiền Trong khi đó cô ấy có thể phục vụ những vị khách tiếp theo Ở đây bạn đã không "khóa" cô ấy lại Và cô nhân viên tranh thủ lúc đợi bạn điền các thông tin Cô ấy có thể làm việc khác Thành ra ở đây không có hành động đợi
vô nghĩa ở đây Khi bạn điền xong thông tin, bạn có thể trở lại gặp cô ấy báo là đã hoàn thành Cô ấy sẽ tiếp tục phục vụ bạn để bạn hoàn thành việc của mình Đây là cơ chế 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ụng đượ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ều khách hàng hơn so với ngân hàng dùng mô hình theo cách cũ ở trên Nếu
có quá tải Bạn chắc chắn vẫn phải thêm nhân viên để đáp ứng kịp thời Nhưng
Trang 15chắc chắn sẽ thêm ít nhân viên hơn Tiết kiệm được rất nhiều tài nguyên (Đây cũng là
mô hình được áp dụng phổ biến ở các ngân hàng)
Hình 2 : Mô tả non-blocking
I.1.3.3 Kiến trúc event loop:
Event loop
Cho phép tiếp tục nhận request khác, khi đã nhận 1 request, cho phép sử lý
đa luồng, mỗi luồng thực hiện 1 task của request
Trả lại callback của request tương ứng
Hình 3 : Mô tả event loop
Trang 16I.1.4 Socket.io
Giới thiệu Socket.io Socket.IO là một thư viện javascript có mục đích tạo ra các ứng dụng realtime trên trình duyệt cũng như thiết bị di động Việc sử dụng thư viện này cũng rất đơn giản và giống nhau ở cả server lẫn client
Cách sử dụng socket.io
Để import thư viện này mở cửa sổ console và cài đặt Socket.io bằng lệnh sau: npm install socket.io
Với Node.js chỉ cần biết vài hàm cơ bản như requires() để import thư viện
Công việc còn lại, chỉ cần dùng Socket.IO
Cơ chế làm việc của socket.io:
Server: tạo một đối tượng socket bằng phương thức listen(port) Phương thức
này chờ đợi một yêu cầu kết nối từ client
Client: Kết nối đến server bằng phương thức connect(url,{port:server_port})
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
Connect: tạo kết nối
Message: nhận được thông điệp
Để gửi dữ liệu, ta dùng lệnh send() Dữ liệu có thể là đối tượng và sẽ nhận
được qua sự kiện message
Ví dụ: socket.send("Hello world");
Trang 17Socket.IO có thể gửi và nhận các event tự tạo với phương thức emit() Hai phía
gửi và nhận phải biết được tên của event đó để thực hiện giao tiếp:
Javascript được tạo ra là để làm ngôn ngữ lập trình cho client web
Tất cả các web developer đều biết JS, do đó, việc cả phía client và phía server đều sử dụng JS cũng mang nhiều ý nghĩa
Hơn nữa, việc cả hai phía C/S cùng sử dụng một ngôn ngữ chung đem tới khả năng hấp dẫn là cả hai phía có thể sử dụng chung một đoạn code, một module, làm giảm thời gian phát triển, ít lỗi hơn, và thời gian kiểm thử, fix bug cũng ngắn hơn
Bộ nhớ node.js sử dụng cho từng request cũng nhỏ hơn nhiều, do đó nó có thể đáp ứng được số lượng client nhiều hơn hàng trăm lần so với ngôn ngữ khác
3 Sẵn sàng cho một thế hệ ứng dụng web thời gian thực
Trang 18Công nghệ web phát triển tới chóng mặt, và ứng dụng web thời gian thực đang nhen nhóm phát triển Các công nghệ như WebSocket đã sẵn sàng cho việc hàng triệu người dùng có thể tận hưởng việc tương tác web gần như hoàn toàn không có
Mỗi ứng dụng viết trên Node.JS có thể đáp ứng hàng ngàn kết nối đồng thời ngay
cả khi sử dụng những phần cứng thông thường
5 Tận dụng tối đa khả năng của phần cứng
Bộ nhớ là một cái gì đó đắt đỏ khi bạn cần host một ứng dụng Với khả năng của mình Node.JS cho phép bạn tối ưu hóa việ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ền hơn
6 Cộng đồng đông đảo và năng động
Cộng đồng Node.JS phát triển với tốc độ điên rồ, thu hút được những developer thông minh nhất tham gia Điều này có nghĩa là hệ sinh thái Node phát triển mau lẹ từng ngày, nên chúng ta có thể có được những hỗ trợ miễn phí và thương mại từ nhiều nguồn khác nhau
Trang 19Do có cộng đồng đông đảo, nên việc tìm được những module, package opensource phù hợp với sản phẩm của bạn cũng không phải là khó, điều này làm giảm công sức phát triển, tăng độ hài lòng của đội phát triển
Một đội phát triển hạnh phúc là một đội phát triển hữu hiệu
9 Thời gian phát triển ngắn và hiệu suất thu được cao hơn
Với những đặc điểm của mình: ngôn ngữ đồng nhất, cộng đồng năng động, dễ dàng tìm trợ giúp, tính sử dụng lại cao, một ứng dụng được phát triển trên Node.JS
sẽ có thời gian sản xuất ngắn hơn nhiều, tăng cơ hội sớm xuất hiện và chiếm lĩnh thị trường
10 Nhiều lựa chọn hosting cho doanh nghiệp
Rất nhiều nhà cung cấp dịch vụ đám mây đã đang và sẽ 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Ề CƠ SỞ 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ểu khác thì có nghĩa là Not only SQL (không chỉ là SQL) NoSQL đặc biệt nhấn mạnh đến mô hình lưu trữ cặp giá trị khóa và hệ thống lưu trữ phân tán Hệ CSDL này có thể lưu trữ, xử lý từ lượng rất nhỏ đến hàng petabytes dữ liệu với khả năng chịu tải, chịu lỗi cao nhưng chỉ đòi hỏi về tài nguyên phần cứng thấp NoSQL thiết kế đơn giản, nhẹ, gọn hơn so với RDBMs, thiết kế đặc biệt tối ưu về hiệu suất, tác vụ đọc-ghi, ít đòi 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 ảnh hưởng tới toàn hệ thống,
So sánh NoSQL và RDBMS Các RDBMS hiện tại đã bộc lộ những yếu kém như việc đánh chỉ mục một lượng lớn dữ liệu, phân trang, hoặc phân phối luồng dữ liệu media (phim, ảnh, nhạc, ) Cơ
sở dữ liệu quan hệ được thiết kế cho những mô hình dữ liệu nhỏ thường xuyên đọc viết
Trang 20trong khi các Social Network Services lại có một lượng dữ liệu cực lớn và cập nhật liên tục do số lượng người dùng quá nhiều ở một thời điểm Thiết kế trên Distributed NoSQL giảm thiểu tối đa các phép tính toán, I/O liên quan kết hợp với batch processing đủ đảm bảo được yêu cầu xử lý dữ liệu của các mạng dịch vụ dữ liệu cộng đồng này
Về cơ bản, các thiết kế của NoSQL lựa chọn mô hình lưu trữ tập dữ liệu theo cặp giá trị key-value Khái niệm node đượ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ệc lưu trữ 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ết cũng không ảnh hưởng nhiều tới toàn bộ hệ thống Để đảm bảo tính realtime trong các hệ thống xử
lý lượng lớn, thông thường ngườ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ục, khi đạt tới ngưỡng thời gian hoặc dung lượng, database nhỏ sẽ được gộp (merge) vào database lớn có thiết kế tối ưu cho phép đọc (read operation) Mô hình đó cho phép tăng cườ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
Tính năng Cơ sở dữ liệu quan hệ Cơ sở dữ liệu NoSQL
bảo sự vào ra liên tục của
dữ liệu
Tốt với một mô hình sử lý theo lô ( Batch process) và tối ưu về đọc ghi dữ liệu Phần cứng Đòi hỏi cao về phần cứng Đòi hỏi thấp hơn về giá trị
và tính đồng nhất của phần cứng
Trang 21Đăc điểm NoSQL
Phi quan hệ (hay không ràng buộc): Các mối quan hệ giữa các bảng trong cơ sở
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ụ (primary key + foreign key) để 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
Lưu trữ phân tán: mô hình lưu trữ 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ặc Internet dưới sự kiểm soát của phần mềm
Nhất quán cuối: tính nhất quán của dữ liệu không cần phải đả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 ảnh hưởng theo phương thức lan truyền và sau một khoảng thời gian (không phải ngay tức khắc), thay đổi sẽ đi đến mọi điểm trong hệ thống để cuối cùng dữ liệu trên hệ thống sẽ trở lại trạng thái nhất quán
Triển khai đơn giản, dễ nâng cấp và mở rộng
Mô hình dữ liệu và truy vấn linh hoạt …
I.2.2 Xác định NoSQL có phù hợp
Khi làm việc với một lượng lớn dữ liệu, bạn hãy nghĩ đến NoSQL NoSQL rất thích hợp để 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ụng index… Đã giúp NoSQL trở nên mạnh mẽ để làm việc với lượng lớn dữ liệu Tuy nhiên, có một số tính chất sau đây cần lưu ý khi lựa chọn cơ sở dữ liệu NoSQL
Tính nhất quán cuối (Eventual consistency) cần phải được ứng dụng chấp nhận
Có nghĩa là ứ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ợp như các trang mạng xã hội, các ứng dụng ghi log tự động… Các ứng dụng loại này chấp nhập dữ liệu cũ trong một khoảng thời gian ngắn trước khi được cập nhập mới Đổi lại chúng ta đạt được những tiêu chuẩn cao về khả năng mở 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ắp nơi trên trái đất Đặt biệt chúng ta đạt được một hiệu suất hoạt động cao hơn gấ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 22Các ứng dụng không phù hợp với cơ sở 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ệu được xem như tính sống còn của ứng dụng Ví dụ như các ứng dụng tài chính, ngân hàng… với các con số luôn được cập nhập và cần được cập nhập tức thì Sự chậm trễ có thể phải trả giá rất đắ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ọn cơ sở 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ện đại (BI) cũng không phù hợp với cơ sở 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ập trình Như vậy, với một yêu cầu phân tích đơn giản thì cũng cần đến lập trình trong
đó Trong khi với cơ sở dữ liệu RDBMS sử dụng ngôn ngữ SQL để 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ị cơ sở dữ liệu NoSQL lưu trữ theo hướng văn bản, nguồn mở, có khả năng khả chuyển cao trong việc tương tác dữ liệu giữa các nút Điều này khiến cho nó rất thích hợp trong các trường hợp liên quan đế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 (ở đây là các view) làm cho nó là nền tảng lý tưởng cho việc đồng bộ hóa dữ liệu giữa điện thoại di động, máy tính và máy chủ Couchdb không có mô hình cố định Thay vào đó nó lưu trữ các bản ghi (hay văn bản) theo đị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ệc lưu trữ dữ liệu
Các đặc điểm của CouchDB
Document storage
Trong CouchDB, tài liệu được lưu trữ như các đối tượng JSON có chứa cặp “khóa và giá trị” (key and value) và file đính kèm Mỗi tài liệu được định danh duy nhất trong cơ sở dữ liệu, có thể chứa những loại tài liệu khác nhau (text, number, boolean, list, array ) và không giới hạn kích thước hay số lượng phần tử Nó cũng bao gồm các siêu dữ liệu được duy trì bởi hệ thống như _id, _rev:
Trang 23_id là định danh duy nhất của tài liệu Điều này có nghĩa là _id là bắt buộc, và không
có hai tài liệu có thể có cùng giá trị _id Nếu bạn không xác định một _id khi tạo một tài liệu,CouchDB sẽ tạo một ID duy nhất cho bạn
_rev là phiên bản sửa đổi của các tài liệu, giúp vận hành hệ thống kiểm soát phiên bản
của CouchDB Một trong những điều độc nhất về hệ thống sửa đổi của CouchDB là mỗi lần một tài liệu được lưu giữ, tài liệu gốc sẽ không bị ghi đè
Việc xử lý truy vấn đượ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ển đổi chúng từ cấu
trúc ban đầu vào một cặp key-value mới
Trang 25 Tạo một tài liệu
Trang 27CHƯƠNG II 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ức ăn nhanh trực tuyến
Bài toán bán thức ăn nhanh trực tuyến nhằm phục vụ cho các cửa hàng bán thức ăn nhanh trực tuyến đang rất phổ biến hiên nay
Yêu cầu đặt ra là việc đặt thức ăn của khách hàng không bị gián đoạn nếu có quá nhiều người đặt hàng, chủ cửa hàng phải được biết được việc đặt hàng của khách một cách nhanh chóng và phải biết được vị trí của khách hàng, ngoài ra cửa hàng còn phải quản lý được đội ngũ nhân viên, thực đơn các món ăn, thời gian giao hàng
Công nghệ NodeJS với đặc điể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ức năng
Có 2 đối tượng sử dụng là khách hàng và chủ cửa hàng
Yêu cầu đối với hệ thống dành cho chủ cửa hàng:
Quản lý được việc đặt hàng của khách hàng(thời gian, địa điểm) một cách nhanh chóng, chính xác
Quản lý được danh sách thực đơn
Quản lý được đội ngũ nhân viên cửa hàng
Yêu cầu đối với hệ thống dành cho khách hàng:
Xem được danh sách thực đơn
Đặt hàng được nhanh chóng
Yêu cầu phi chức năng
Chương trình có thể đảm bảo làm việc 24/7
Chương trình có thể vận hành tốt khi cơ sở dữ liệu về người dùng tăng đột biến trong tương lai
Chương trình phải đơn giản, dễ sử dụng
Trang 28Công nghệ Các công nghệ sử dụng trong chương trình
Ứng dụng hoàn toàn có thể triển khai trên thực tế
Nhu cầu đặt thức ăn nhanh trực tuyến ngày càng tăng do tính chất công việc ngày càng bận rộn
II.1.3 Xác định các chức năng chính của hệ thống
Đăng ký, đăng nhập
Mã chức năng Tên chức năng
Bảng 1 : Bảng các chức năng đăng ký, đăng nhập
Chủ cửa hàng quản lý việc đặt hàng của khách hàng
Mã chức năng Tên chức năng
Fx.2.1 Chủ cửa hàng biết thông tin đặt hàng của khách hàng
ngay sau khi khách hàng đặt Fx.2.1 Chủ cửa hàng biết được chính xác thời gian, địa điểm
giao hàng
Bảng 2 : Bảng các chức năng chủ cửa hàng quản lý việc đặt hàng của khách hàng
Chủ cửa hàng quản lý danh sách thực đơn các món ăn
Mã chức năng Tên chức năng
Trang 29Fx.3.1 Chủ cửa hàng xem được danh sách thực đơn tất cả các
món ăn
Fx 3.2 Chủ cửa hàng thêm được món ăn và thông tin của món
ăn vào thực đơn Fx.3.3 Chủ cửa hàng chỉnh sửa được thông tin các món ăn Fx3.4 Chủ cửa hàng xóa được các món ăn
Fx3.5 Chủ cửa hàng tìm kiếm được các món ăn
Bảng 3 : Bảng chức năng chủ cửa hàng quản lý danh sách thực đơn món ăn
Chủ cửa hàng quản lý danh sách các nhân viên của cửa hàng
Mã chức năng Tên chức năng
Fx.4.1 Chủ cửa hàng xem được danh sách tất cả các nhân viên Fx4.2 Chủ cửa hàng thêm được nhân viên và thông tin của nhân
viên Fx.4.3 Chủ cửa hàng chỉnh sửa được thông tin các nhân viên Fx4.4 Chủ cửa hàng xóa được thông tin các nhân viên
Fx4.5 Chủ cửa hàng tìm kiếm được thông tin nhân viên
Bảng 4 : Bảng chức năng chủ cửa hàng quản lý danh sách nhân viên
Chủ cửa hàng quản lý thông tin khách hàng khách hàng
Mã chức năng Tên chức năng
Fx.5.1 Chủ cửa hàng xem được danh sách,thông tin các khách
hàng Fx.5.2 Chủ cửa hàng xóa được thông tin các khách hàng
Fx.5.3 Chủ cửa hàng tìm kiếm được thông tin các khách hàng
Bảng 5 : Bảng chức năng chủ cửa hàng quản lý danh sách khách hàng
Khách hàng xem được danh sách thực đơn các món ăn
Mã chức năng Tên chức năng
Fx.6.1 Khách hàng xem được danh sách thực đơn tất cả các món
ăn, danh sách các món ăn theo từng danh mục
Trang 30Fx 6.2 Khách hàng xem được danh sách các món ăn theo từng
danh mục
Fx 6.3 Khách hàng tìm kiếm được thông tin các món ăn
Bảng 6 : Bảng chức năng khách hàng xem danh sách thực đơn món ăn
Khách hàng thực hiên được việc đặt hàng
Mã chức năng Tên chức năng
Fx.7.1 Khách hàng đặt hàng theo món ăn thấy trên danh sách
Fx 7.2 Khách hàng chọn món ăn để đặt hàng
Fx 7.3 Khách hàng có thể chọn được số lượng, thời gian giao
hàng, vị trí giao hàng
Bảng 7 : Bảng chức năng khách hàng thực hiên việc đặt hàng
II.2 PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG :
Khách hàng sẽ được cung cấp các dịch vụ của hệ thống nhằm mục đích: xem được danh sách thực đơn các món ăn, đặt được các món ăn mong muốn theo thời gian giao,
số lượng và vị trí cần giao
II.2.2 Biểu đồ UseCase sử dụng
Sơ đồ dưới thể hiện UseCase tổng quát của hệ thống với tác nhân là người dùng gồm hai đối tượ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 31Hình 4 : UseCase tổng quát
UseCase mức 1 đăng ký, đăng nhập
Hình 5 : UseCase Đăng ký, đăng nhập
Trang 32UseCase chủ cửa hàng quản lý danh sách thực đơn
Hình 6 : UseCase Quản lý danh sách thực đơn
UseCase chủ cửa hàng quản lý danh sách nhân viên
Trang 33
Hình 7: UseCase chủ cửa hàng quản lý danh sách nhân viên
UseCase chủ cửa hàng quản lý danh sách khách hàng
Hình 8 : UseCase chủ cửa hàng quản lý danh sách khách hàng
UseCase chủ cửa hàng quản lý đặt hàng
Hình 9 : UseCase chủ cửa hàng quản lý đặt hàng