You are on page 1of 35

BỘ GIÁO DỤC VÀ ĐÀO TẠO

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ TP. HỒ CHÍ MINH

BÁO CÁO

TIỂU LUẬN MÔN HỌC


Tìm hiểu về công cụ tìm kiếm Elasticsearch
và ứng dụng tìm kiếm vào website thương mại
điện tử

Môn học: Các hệ cơ sở dữ liệu


Ngành: CÔNG NGHỆ THÔNG TIN

Giảng viên: PGS.TS. Nguyễn Thị Thúy Loan


Nhóm học viên thực hiện
MSHV Họ và Tên Lớp
2241860001 Trần Minh Duyệt 22SCT01

Tháng 9 - 2022
Mục lục
Chương 1. Kiến thức nền tảng ............................................................................................................... 1
1.1. Elasticsearch:................................................................................................................................. 1
1.1.1. Elasticsearch là gì? ................................................................................................................. 1
1.1.2. Elasticsearch hoạt động như thế nào: ..................................................................................... 2
1.1.3. Các khái niệm cần biết về Elasticsearch ................................................................................ 2
1.1.3.1. Document ....................................................................................................................... 2
1.1.3.2. Index............................................................................................................................... 3
1.1.3.3. Shard .............................................................................................................................. 3
1.1.3.4. Node ............................................................................................................................... 3
1.1.3.5. Cluster ............................................................................................................................ 3
1.1.4. Ưu nhược điểm của Elasticsearch .......................................................................................... 4
1.1.4.1. Ưu điểm.......................................................................................................................... 4
1.1.4.2. Nhược điểm .................................................................................................................... 5
1.1.5. Cách cài đặt: ........................................................................................................................... 5
1.1.6. Các lệnh cơ bản để truy vấn trong Elasticsearch ................................................................... 6
1.1.6.1. Tạo một index ................................................................................................................ 6
1.1.6.2. Chỉnh sửa, cập nhật tài liệu ............................................................................................ 6
1.1.6.3. Xoá tài liệu ..................................................................................................................... 6
1.1.6.4. Truy vấn tìm kiếm cơ bản .............................................................................................. 6
1.2. Kibana ............................................................................................................................................ 7
1.3. Docker ............................................................................................................................................ 7
1.3.1. Giới thiệu ............................................................................................................................... 7
1.3.2. Container ................................................................................................................................ 7
1.3.3. Khái niệm liên quan ............................................................................................................... 8
1.4. MongoDB ....................................................................................................................................... 9
1.4.1. Giới thiệu MongoDB .............................................................................................................. 9
1.4.2. Một số câu lệnh cơ bản trên MongoDB ................................................................................. 9
1.4.3. Ưu điểm của MongoDB ....................................................................................................... 10
1.4.4. Nhược điểm của MongoDB ................................................................................................. 11
1.5. NodeJS ......................................................................................................................................... 11
1.3.1. Giới thiệu ............................................................................................................................. 11
1.3.2. Những ứng dụng nên viết bằng Nodejs ............................................................................... 11
1.6. Express ......................................................................................................................................... 12
1.7. Restful Api .................................................................................................................................... 12
1.7.2. Đặc điểm của Resful API....................................................................................................... 12
1.8. React JS ........................................................................................................................................ 13
1.8.1. Lợi ích của việc sử dụng react js .......................................................................................... 13
Chương 2. Phát biểu bài toán .............................................................................................................. 14
2.1. Các chức năng cơ bản.................................................................................................................. 14
2.2. Kiến trúc tổng thể phần mềm ....................................................................................................... 14
Kiến trúc tổng thể của phần mềm ............................................................................................................ 14
Chương 3. Đặt tả yêu cầu: .................................................................................................................... 15
3.1. Sơ đồ và CSDL .................................................................................................................................. 15
3.2. Đặc tả Use Case................................................................................................................................ 18
Chương 4. Các giao diện của đề tài ..................................................................................................... 23
4.1. Kibana .......................................................................................................................................... 23
4.2. Studio 3T ...................................................................................................................................... 24
4.3. Docker .......................................................................................................................................... 24
4.4. Trang chủ ..................................................................................................................................... 24
4.5. Trang admin ................................................................................................................................. 26
4.6. Chi tiết một sản phẩm .................................................................................................................. 26
4.7. Giỏ hàng....................................................................................................................................... 27
4.8. Bộ lọc sản phẩm ........................................................................................................................... 28
4.9. Đăng nhập .................................................................................................................................... 28
4.10. Đăng ký .................................................................................................................................... 29
Tài liệu tham khảo ..................................................................................................................................... 30

Mục lục hình ảnh


Hình 1. 1 Sơ đồ hoạt động của Elasticsearch ................................................................................................. 2
Hình 1. 2 Cách hoạt động của Elasticseach .................................................................................................... 4
Hình 1. 3 Giao diện kibana ............................................................................................................................. 7

Hình 3. 1 Sơ đồ giao tiếp của hệ thống ........................................................................................................ 15


Hình 3. 2 Cơ sở dữ liệu của dự án ................................................................................................................ 17
Hình 3. 3 Sơ đồ usecase ............................................................................................................................... 18

Hình 4. 1 Giao diện dev tool của kibana ...................................................................................................... 23


Hình 4. 2 Giao diện chính của Studio 3T ...................................................................................................... 24
Hình 4. 3 Giao diện chính của docker desktop ............................................................................................ 24
Hình 4. 4 Giao diện chính trang web............................................................................................................ 26
Hình 4. 5 Giao diện chính trang admin ........................................................................................................ 26
Hình 4. 6 Giao diện chi tiết của sản phẩm ................................................................................................... 27
Hình 4. 7 Giao diện chi tiết của sản phẩm ................................................................................................... 27
Hình 4. 8 Giao diện bộ lọc sản phẩm ........................................................................................................... 28
Hình 4. 9 Giao diện đăng nhập ..................................................................................................................... 28
Hình 4. 10 Giao diện đăng ký tài khoản ....................................................................................................... 29
NHIỆM VỤ ĐỀ TÀI
1. Nội dung và các yêu cầu cần giải quyết trong báo cáo môn học.
o Lập trình NodeJS, ReactJS, Express Framework.
o Công cụ tìm kiếm Elasticsearch.
o Hệ quản trị cơ sở dữ liệu MongoDB.
o Kết nối NodeJS, Elasticsearch với MongoDB.
2. Các tài liệu, số liệu cần thiết
Sử dụng số liệu thực tế thu thập trên mạng internet
Chương 1. Kiến thức nền tảng
1.1. Elasticsearch:
1.1.1. Elasticsearch là gì?
Elasticsearch là một dạng Search Engine (Công cụ tìm kiếm) phát triển dựa trên nền
tảng Apache Lucene. Elasticsearch được ra mắt năm 2010 bởi Shay Banon, được xây
dựng bằng ngôn ngữ Java, với giao diện web HTTP có hỗ trợ JSON. Nó cho phép ta chuyển
dữ liệu vào và tìm kiếm trực tiếp, thay vì tìm kiếm trong một hệ quản lý cơ sở dữ liệu thông
thường như Oracle, MySQL,…

Elasticsearch cung cấp cho người dùng một hệ thống tìm kiếm dạng phân tán, phù hợp
với tệp dữ liệu lớn. Elasticsearch thường được sử dụng trong việc tìm kiếm đơn giản trên
trang web, chỉ mục và thu thập dữ liệu, cho đến phân tích và trực quan hóa dữ liệu kinh
doanh.

Elasticsearch thường hoạt động với các thành phần khác trong ELK
Stack, Logstash và Kibana, trong đó đóng vai trò lập chỉ mục dữ liệu.

Được các công ty lớn sử dụng :


• Wikimedia • FDA
• athenahealth • CERN
• Adobe Systems • Stack Exchange
• Facebook • Center for Open Science
• StumbleUpon Mozilla, • Reverb
• Amadeus IT Group • Netflix
• Quora • Pixabay
• Foursquare • Motili
• Etsy • Sophos
• SoundCloud • Slurm Workload Manager
• GitHub

1
1.1.2. Elasticsearch hoạt động như thế nào:

Hình 1. 1 Sơ đồ hoạt động của Elasticsearch

Về cơ bản, Elasticsearch hoạt động như một Cloud Server có khả năng tìm kiếm thông qua
cơ chế RESTful. Trong đó, người dùng tạo ra các HTTP Request và dữ liệu dạng JSON,
sau đó nhập vào Elasticsearch. Các dữ liệu này đều được đánh Index (Chỉ mục), giúp đem
lại hiệu quả tìm kiếm rất cao.

Đầu tiên, dữ liệu được đưa vào Elasticsearch từ nhiều nguồn khác nhau, sau đó được phân
tích, xử lý, trong quá trình nhập liệu. Tiếp theo, dữ liệu được phân loại và chỉ mục, được
đẩy lên Server Elasticsearch. Cuối cùng, người dùng có thể tạo các truy vấn phức tạp và
lấy dữ liệu được trả về từ server Elasticsearch.

1.1.3. Các khái niệm cần biết về Elasticsearch


1.1.3.1. Document
Document là thông tin cơ bản được lập chỉ mục trong Elasticsearch, là đơn vị lưu
trữ dữ liệu nhỏ nhất trong Elasticsearch. Document có thể là văn bản, hoặc có thể
là bất kỳ dạng cấu trúc dữ liệu nào được mã hóa bằng JSON như số, chuỗi, ngày
tháng,…

2
Mỗi Document có một ID duy nhất cho một kiểu dữ liệu duy nhất. Ví dụ, một
Document có thể đại diện cho một bài báo bách khoa toàn thư.

1.1.3.2. Index
Index (Chỉ mục) là tập hợp các tài liệu có đặc điểm liên quan về mặt logic. Ví dụ:
Trong trang web của một sàn thương mại điện tử, bạn sẽ tìm thấy một Chỉ mục cho
Khách hàng, một Chỉ mục cho Sản phẩm,… Chỉ mục được sử dụng để tìm kiếm,
thêm mới hoặc xóa các tài liệu trong đó.

Một khái niệm trong Index mà bạn nên biết đó là Inverted Index (Chỉ mục đảo
ngược). Chỉ mục đảo ngược không lưu trữ trực tiếp các chuỗi mà chia từng tài liệu
thành các cụm từ tìm kiếm riêng lẻ. Nhờ đó, người dùng có thể tìm thấy các kết
quả phù hợp nhanh chóng, kể cả trong các tệp dữ liệu với khối lượng lớn.

1.1.3.3. Shard
Shard là tập con các Document của 1 Index, là đơn vị lưu trữ dữ liệu nhỏ nhất,
hoạt động ở mức thấp nhất. Bằng cách phân phối Documents trong một Index trên
nhiều Shard, Elasticsearch có thể đảm bảo tính dự phòng, bảo vệ hệ thống khỏi lỗi
phần cứng và giúp tăng khả năng truy vấn khi hoạt động.

Có 2 loại Shard là : Primary Shard và Replica Shard.


• Primary Shard được lưu trữ dữ liệu và đánh Index, sau đó được vận chuyển
tới các Replica Shard.
• Replica Shard là nơi lưu trữ dữ liệu nhân bản của Primary Shard, giúp đảm
bảo dữ liệu Primary Shard được toàn vẹn ngay cả khi hệ thống xảy ra vấn đề.

1.1.3.4. Node
Node được coi là bộ phận “đầu não” của Elasticsearch. Đây là nơi lưu trữ dữ liệu
trực tiếp, đánh Index của Cluster và thực hiện các thao tác tìm kiếm dữ liệu. Mỗi
Node thường được định danh bằng 1 một cái tên duy nhất.

1.1.3.5. Cluster

3
Cluster là tập hợp các nodes hoạt động cùng với nhau. Mỗi Cluster có một Node
chính được lựa chọn tự động, Node này có thể thay thế. Một trong những lỗi sai
của các developer mới là định danh các Cluster trùng tên nhau, điều này sẽ gây lỗi
cho các Node. Bạn nên lưu ý vấn đề này khi tiến hành setup.

Hình 1. 2 Cách hoạt động của Elasticseach

1.1.4. Ưu nhược điểm của Elasticsearch


1.1.4.1. Ưu điểm
• Tìm kiếm dữ liệu nhanh chóng: Điều này có được nhờ cơ chế hoạt động của
Elasticsearch thay vì tìm kiếm văn bản trực tiếp, nó tìm kiếm một Index. Nó sử
dụng cấu trúc Document thay vì bảng và lược đồ.
• Khả năng phân phối mở rộng: Bản chất phân tán của Elasticsearch giúp
người dùng mở rộng quy mô lên hàng trăm, hàng nghìn máy chủ và xử lý hàng
petabyte dữ liệu.
• Đơn giản hóa hiển thị và báo cáo dữ liệu: Elasticsearch cho phép tích hợp
với Beats và Logstash, giúp người dùng dễ dàng xử lý dữ liệu trước khi đưa vào
Elasticsearch. Ngoài ra, khả năng trực quan hóa giao diện giúp truy cập dữ liệu một
cách nhanh chóng.

4
• Tính năng vượt trội: Elasticsearch cung cấp một số tính năng vượt trội cho
phép người dùng lưu trữ và tìm kiếm dữ liệu hiệu quả như cuộn dữ liệu và quản lý
vòng đời Index.
• Ngoài ra, Elasticsearch cũng hỗ trợ dữ liệu từ Java, PhP, Javascript, .NET,
Python, giúp người dùng dễ dàng hơn trong quá trình sử dụng và chuyển đổi.

1.1.4.2. Nhược điểm


• Elasticsearch được thiết kế chủ yếu cho việc search dữ liệu, do vậy yếu thế hơn
so với các database khác về các mục đích ngoài search.
• Elasticsearch không thích hợp với những hệ thống thường xuyên cập nhật dữ
liệu.
1.1.5. Cách cài đặt:
Bước 1: Sử dụng docker để cài đặt:

elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.4.1
container_name: elasticsearch
restart: always
environment:
- xpack.security.enabled=false
- discovery.type=single-node
- http.cors.enabled = true
- http.cors.allow-origin= "*"
- http.cors.allow-methods= OPTIONS, HEAD, GET, POST, PUT,
DELETE
- http.cors.allow-headers= X-Requested-With,X-Auth-Token,Content-
Type,Content-Length
- http.cors.allow-credentials=true
ulimits:
memlock:

5
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
cap_add:
- IPC_LOCK
volumes:
- elasticsearch-data:/Users/duyettranminh/Desktop/elasticsearch/data
ports:
- 9200:9200

Bước 2: Chạy lên docker-compose up để build server


1.1.6. Các lệnh cơ bản để truy vấn trong Elasticsearch
1.1.6.1. Tạo một index
PUT /<tên index>
1.1.6.2. Chỉnh sửa, cập nhật tài liệu

PUT /<tên index>/_doc/1?pretty


{
"name": "index-1",
"age": "20"
}
1.1.6.3. Xoá tài liệu

DELETE /<tên index>


1.1.6.4. Truy vấn tìm kiếm cơ bản

GET /<tên index>/_search


{
"query": { "match": { "account_number": 20 } }
}

6
1.2. Kibana
Kibana là một nền tảng phân tích hiển thị dữ liệu từ Elasticsearch một cách trực quan dễ sử
dụng,Kibana cũng là một công cụ mã nguồn mở miễn phí, cho tất cả mọi người sử dụng. Kibana
cung cấp các tính năng cho người dùng quản lý như biểu đồ cột, biểu đồ đường, biểu đồ tròn,
biểu đồ nhiệt và nhiều loại chart khác nữa.

Hình 1. 3 Giao diện kibana

1.3. Docker
1.3.1. Giới thiệu
Docker là một nền tảng để cung cấp cách để building, deploying và running ứng dụng dễ
dàng hơn bằng cách sử dụng các containers (trên nền tảng ảo hóa). Ban đầu viết bằng
Python, hiện tại đã chuyển sang Golang.

1.3.2.Container
Các containers cho phép lập trình viên đóng gói một ứng dụng với tất cả các phần cần thiết,
chẳng hạn như thư viện và các phụ thuộc khác, và gói tất cả ra dưới dạng một package.
Bằng cách đó, nhờ vào container, ứng dụng sẽ chạy trên mọi máy Linux khác bất kể mọi
cài đặt tùy chỉnh mà máy có thể có khác với máy được sử dụng để viết code.

7
Theo một cách nào đó, Docker khá giống virtual machine. Nhưng tại sao Docker lại phát
triển, phổ biến nhanh chóng? Đây là những nguyên nhân:
• Tính dễ ứng dụng: Docker rất dễ cho mọi người sử dụng từ lập trình viên, sys admin…
nó tận dụng lợi thế của container để build, test nhanh chóng. Có thể đóng gói ứng dụng trên
laptop của họ và chạy trên public cloud, private cloud… Câu thần chú là “Build once, run
anywhere”.
• Tốc độ: Docker container rất nhẹ và nhanh, bạn có thể tạo và chạy docker container
trong vài giây.
• Môi trường chạy và khả năng mở rộng: Bạn có thể chia nhỏ những chức năng của ứng
dụng thành các container riêng lẻ. Ví dụng Database chạy trên một container và Redis cache
có thể chạy trên một container khác trong khi ứng dụng Node.js lại chạy trên một cái khác
nữa. Với Docker, rất dễ để liên kết các container với nhau để tạo thành một ứng dụng, làm
cho nó dễ dàng scale, update các thành phần độc lập với nhau.

1.3.3. Khái niệm liên quan


• Docker Engine : là thành phần chính của Docker, như một công cụ để đóng gói ứng
dụng
• Docker Hub : là một “github for docker images”. Trên DockerHub có hàng ngàn public
images được tạo bởi cộng đồng cho phép bạn dễ dàng tìm thấy những image mà bạn cần.
Và chỉ cần pull về và sử dụng với một số config mà bạn mong muốn.
• Images: là một khuôn mẫu để tạo một container. Thường thì image sẽ dựa trên 1 image
có sẵn với những tùy chỉnh thêm. Ví dụ bạn build 1 image dựa trên image Centos mẫu có
sẵn để chạy Nginx và những tùy chỉnh, cấu hình để ứng dụng web của bạn có thể chạy
được. Bạn có thể tự build một image riêng cho mình hoặc sử dụng những image được chia
sẽ từ cộng đồng Docker Hub. Một image sẽ được build dựa trên những chỉ dẫn của
Dockerfile.
• Container: là một instance của một image. Bạn có thể create, start, stop, move or delete
container dựa trên Docker API hoặc Docker CLI.
• Docker Client: là một công cụ giúp người dùng giao tiếp với Docker host.

8
• Docker Daemon: lắng nghe các yêu cầu từ Docker Client để quản lý các đối tượng như
Container, Image, Network và Volumes thông qua REST API. Các Docker Daemon cũng
giao tiếp với nhau để quản lý các Docker Service.
• Dockerfile: là một tập tin bao gồm các chỉ dẫn để build một image .
• Volumes: là phần dữ liệu được tạo ra khi container được khởi tạo.

1.4. MongoDB
1.4.1. Giới thiệu MongoDB
MongoDB là hệ CSDL mã nguồn mở, là CSDL phi quan hệ hay còn gọi là NoSQL (None-
Relationship SQL hay còn gọi là Not only SQL). NoSQL được phát triển trên Javascript
Framework với kiểu dữ liệu là JSON và dạng dữ liệu theo kiểu key và value. NoSQL ra đời
như là sự bổ sung cho những khuyết điểm và thiếu xót cũng như hạn chế của mô hình dữ
liệu quan hệ RDBMS (Relational Database Management System - Hệ quản trị cơ sở dữ liệu
quan hệ) về tốc độ, tính năng, khả năng mở rộng. Với NoSQL bạn có thể mở rộng dữ liệu
mà không lo tới những việc như tạo khóa ngoại, khóa chính, kiểm tra ràng buộc. NoSQL
bỏ qua tính toàn vẹn của dữ liệu và transaction để đổi lấy hiệu suất nhanh và khả năng mở
rộng. NoSQL được sử dụng ở rất nhiều công ty, tập đoàn lớn. Ví dụ như FaceBook sử dụng
Cassandra do FaceBook phát triển, Google phát triển và sử dụng BigTable. MongoDB là
một database hướng tài liệu (document), các dữ liệu được lưu trữ trong document kiểu
JSON thay vì dạng bảng như CSDL quan hệ nên truy vấn sẽ rất nhanh.

Với CSDL quan hệ chúng ta có khái niệm bảng, các cơ sở dữ liệu quan hệ (như MySQL
hay SQL Server...) sử dụng các bảng để lưu dữ liệu thì với MongoDB chúng ta sẽ dùng
khái niệm là collection thay vì bảng. So với RDBMS thì trong MongoDB collection ứng
với table, còn document sẽ ứng với row, MongoDB sẽ dùng các document thay cho row
trong RDBMS.

Các collection trong MongoDB được cấu trúc rất linh hoạt, cho phép các dữ liệu lưu trữ
không cần tuân theo một cấu trúc nhất định. Thông tin liên quan được lưu trữ cùng nhau để
truy cập truy vấn nhanh thông qua ngôn ngữ truy vấn MongoDB.
1.4.2. Một số câu lệnh cơ bản trên MongoDB

9
Mục này so sánh một số câu lệnh giữa MongoDB và MySQL để làm nổi bật cách xử lý dữ
liệu của MongoDB.
Lệnh MySQL MongoDB
Tạo
CREATE DATABASE test; use test;
csdl
Tạo CREATE TABLE students (ten_cot -
db.createCollection('students');
bảng kieu_du_lieu);
Tạo bản INSERT INTO studetns ('name', db.students.insert({ name:'thanh', gender:
ghi 'gender') VALUES('thanh', 'male'); 'male'});
Cập UPDATE students SET name = 'thanh db.students.update({ _id: 1 },{$set:{ name:
nhật update' WHERE id = 1; 'thanh update' }});
Xóa bản DELETE FROM students Where id =
db.students.remove({ _id: 1});
ghi 1;
Tìm
SELECT * FROM students; db.students.find({});
kiếm all
Tìm SELECT * FROM students WHERE
db.students.find({ name: 'thanh' });
kiếm name = 'thanh';

1.4.3. Ưu điểm của MongoDB


• Do MongoDB sử dụng lưu trữ dữ liệu dưới dạng Document JSON nên mỗi một
collection sẽ có các kích cỡ và các document khác nhau, linh hoạt trong việc lưu trữ dữ
liệu, do đó việc chèn thêm dữ liệu vào không bị hạn chế.
• Dữ liệu trong MongoDB không bị ràng buộc như cơ sở dữ liệu quan hệ, không kết nối.
Do đó, khi bổ sung, xóa hay cập nhật sẽ không bị mất thời gian kiểm tra xem có thỏa mãn
các ràng buộc dữ liệu như trong RDBMS.
• MongoDB rất dễ mở rộng. Trong MongoDB có một khái niệm cụm dữ liệu (cluster), là
cụm các node chứa dữ liệu giao tiếp với nhau, khi muốn mở rộng hệ thống ta chỉ cần thêm
một node với vào cluster.

10
• Trường dữ liệu “_id” luôn được tự động đánh chỉ mục để tốc độ truy vấn thông tin đạt
hiệu suất cao nhất.
• Khi có một truy vấn dữ liệu, các bản ghi được ghi tạm thời lên bộ nhớ Ram, để phục vụ
các truy vấn tiếp theo, vì vậy sự xử lý cũng diễn ra nhanh hơn mà không cần phải đọc lại
từ ổ cứng.
• Hiệu năng cao: Tốc độ truy vấn (find, update, insert, delete) của MongoDB nhanh hơn
hẳn so với các hệ quản trị cơ sở dữ liệu quan hệ (RDBMS). Với một lượng dữ liệu đủ lớn
khi thử nghiệm cho thấy tốc độ insert của MongoDB có thể nhanh tới gấp 100 lần so với
MySQL.

1.4.4. Nhược điểm của MongoDB


Hệ quản trị cơ sở dữ liệu MongoDB có nhiều ưu điểm, tuy nhiên cũng có một số nhược
điểm. MongoDB không có các tính chất ràng buộc như trong RDBMS nên khi thao tác với
MongoDB thì chuyên gia phải tự xử lý các mối quan hệ giữa các dữ liệu. Bộ nhớ lưu trữ bị
tăng, do dữ liệu lưu dưới dạng key-value, các bộ dữ liệu chỉ khác về giá trị do đó các Khóa
sẽ bị lặp lại. MongoDB cũng không hỗ trợ liên kết nên dữ liệu bị dư thừa. Một điều nữa,
khi insert/update/remove bản ghi, MongoDB sẽ chưa cập nhật ngay xuống ổ cứng, mà sau
một khoảng thời gian 60 giây MongoDB mới thực hiện ghi toàn bộ dữ liệu thay đổi từ RAM
xuống thiết bị lưu trữ, điều này sẽ có nguy cơ bị mất dữ liệu khi xảy ra các tình huống như
mất điện.

1.5. NodeJS
1.3.1. Giới thiệu
NodeJS là một platform mới, xây dựng trên Chrome Javascript Runtime (V8) nhằm phát
triển các ứng dụng phía máy chủ nhanh chóng và dễ mở rộng. Một số điểm mạnh của
NodeJS:

1.3.2. Những ứng dụng nên viết bằng Nodejs


Rõ ràng, không phải cứ hot và mới là Nodejs làm gì cũng tốt, ví dụ như một ứng dụng cần
tính ổn định cao, logic phức tạp thì các ngôn ngữ PHP hay Ruby... vẫn là sự lựa chọn tốt
hơn. Còn dưới đây là những ứng dụng có thể và nên viết bằng Nodejs:
• Websocket server: Các máy chủ web socket như là Online Chat, Game Server...
11
• Fast File Upload ClientL: là các chương trình upload file tốc độ cao.
• Ad Server: Các máy chủ quảng cáo.
• Cloud Services: Các dịch vụ đám mây.
• RESTful API: đây là những ứng dụng mà được sử dụng cho các ứng dụng khác thông
qua API.
• Any Real-time Data Application: bất kỳ một ứng dụng nào có yêu cầu về tốc độ thời
gian thực. Micro Services: Ý tưởng của micro services là chia nhỏ một ứng dụng lớn thành
các dịch vụ nhỏ và kết nối chúng lại với nhau. Nodejs có thể làm tốt điều này.

1.6. Express
Express là một framework giành cho Nodejs. Nó cung cấp cho chúng ta rất nhiều tính năng mạnh
mẽ trên nền tảng web cũng như trên các ứng dụng di động.

Express hỗ rợ các phương thức HTTP và midleware tạo ra môt API vô cùng mạnh mẽ và dễ sử
dụng. Có thể tổng hợp một số chức năng chính của express như sau:

1.7. Restful Api


1.7.1. Giới thiệu RestFul API
API (Application Programming Interface) là một tập các quy tắc và cơ chế mà theo đó, một
ứng dụng hay một thành phần sẽ tương tác với một ứng dụng hay thành phần khác. API có
thể trả về dữ liệu mà bạn cần cho ứng dụng của mình ở những kiểu dữ liệu phổ biến như
JSON hay XML

REST: REST là viết tắt của REpresentational State Transfer. REST là tập hợp các hướng
dẫn và kiến trúc sử dụng cho việc truyền dữ liệu. REST áp dụng phổ biến cho các Web app,
nhưng cũng hoàn toàn có thể sử dụng cho các phần mềm nói chung. Vì thế RESTful API
là các API mà tuân theo các kiến trúc và quy tắc của REST

1.7.2. Đặc điểm của Resful API


• Nhất quán xuyên suốt các API
• Stateless existence
• Sử dụng HTTP status code khi có thể
• Sử dụng URL Endpoint có phân tầng logic
12
• Đánh version trong URL thay vì trong HTTP Headers
Phương thức truy cập:
• GET để lấy về 1 đối tượng
• POST để tạo ra đối tượng mới
• PUT để sửa đổi hoặc thay thế đối tượng
• DELETE để xoá đi đối tượng
• Tương tự như CRUD: Create, read, update, delete

1.8. React JS
Reactjs là một thư viện Javascript mã nguồn mở hỗ trợ xây dựng các thành phần giao diện nhanh
gọn và tiện lợi. Bình thường các lập trình viên sẽ nhúng javascript vào code HTML thông qua
các attribute như AngularJS nhưng với Reactjs làm việc như một thư viện cho phép nhúng
HTML vào javascript thông qua JSX. Qua đó bạn có thể dễ dàng lồng các đoạn HTML vào
trong JSX làm cho các component dễ hiểu và dễ sử dụng hơn.

Trong Reactjs thường dùng javascript để thiết kế bố cục cho trang web, nhưng nhược điểm là
cấu trúc khá là khó. Thay vào đó sử dụng JSX và nhúng các đoạn HTML vào javascript, ta thấy
cú pháp dễ hiểu hơn và JSX cũng có thể tối ưu code khi biên soạn. Vừa dễ cho người lập trình
mà vừa tiện cho việc biên dịch.

1.8.1. Lợi ích của việc sử dụng react js


Làm gì cũng phải có nguyên nhân, người dùng sử dụng Reactjs ngày càng nhiều thì Reactjs
phải mang lại những lợi ích tốt.
• ReactJS giúp cho việc viết các đoạn code Javascript sẽ trở nên dễ dàng hơn vì nó sử dụng
một cú pháp đặc biệt đó chính là cú pháp JSX. Thông qua JSX cho phép nhúng code HTML
và Javascript.
• ReactJS cho phép Developer phá vỡ những cấu tạo UI phức tạp thành những component
độc lập. Dev sẽ không phải lo lắng về tổng thể ứng dụng web, giờ đây Developer dễ dàng
chia nhỏ các cấu trúc UI/UX phức tạp thành từng component đơn giản hơn.
• Đi kèm với ReactJS là rất nhiều các công cụ phát triển giúp cho việc debug code một
cách dễ dàng hơn.

13
• Một trong những ưu điểm nữa của ReactJS đó là sự thân thiện với SEO. Hầu như các JS
Frameworks không thân thiện với các tìm kiếm mặc dù đã được cải thiện nhiều nhưng dưới
sự hỗ trợ của các render dữ liệu trả về dưới dạng web page giúp cho SEO chuẩn hơn.
Chương 2. Phát biểu bài toán
2.1. Các chức năng cơ bản
Nhóm có ý tưởng tìm hiểu và tích hợp Elasticsearch vào trang web thương mại điện tử. Là một
cửa hàng chuyên mua bán các thiết bị điện tử, đồ dùng công nghệ. Với mong muốn là cửa hàng
sẽ được nhiều người biết đến, cũng như khách hàng dễ dàng mua sắm hơn. Dưới cương vị là một
nhóm phát triển phần mềm, nhóm sẽ phát triển một website với mục tiêu sau:
- Tích hợp tìm kiếm Elasticsearch cho website.
- Khi người dùng vào trang chủ website sẽ thấy các sản phẩm nổi bật, được bán nhiều nhất hoặc
các chương trình khuyến mãi của cửa hàng.
- Người dùng dễ dàng tìm kiếm, lọc các sản phẩm theo mong muốn của họ.
- Người dùng có thể đặt hàng, điều chỉnh giỏ hàng, thanh toán online mà không cần đến trực
tiếp cửa hàng.
- Người dùng có thể so sánh các sản phẩm với nhau để dễ dàng trong việc chọn lựa.
- Người dùng có thể tạo tài khoản, đăng nhập khi mua hàng để lưu lại lịch sử mua hàng và nhận
các khuyến mãi.
- Về phía cửa hàng, có trang Admin để xem các thông tin thống kê, thêm, xoá, sửa sản phẩm.
2.2. Kiến trúc tổng thể phần mềm
Kiến trúc tổng thể của phần mềm
o Website sẽ được tổ chức theo một mô hình pattern của software architecture đang được phổ
biến là Monolithic Architecture (Kiến trúc nguyên khối). Lý do:
o Quy mô dự án nhỏ, quá trình phát triển đơn giản, tập trung và trực tiếp.
o Kinh nghiệm đội ngũ phát triển chưa nhiều, nên mô hình này sẽ phù hợp vì không đòi hỏi quá
nhiều về triển khai dự án.
o Development flow khá đơn giản, chỉ cần chỉnh sửa, submit, merge code, deploy.
- Ý tưởng cụ thể:
o Database: sử dụng MongoDB.
o SearchEngine: Elasticsearch.

14
o Back-end: NodeJS (ExpressJS).
o Front-end (UI): ReactJS (Website theo hướng SPA là vì muốn tăng trải nghiệm người dùng,
chịu tải 1 phần cho server, chia dự án thành 2 phần back-end, front-end rõ ràng hơn…).
o Sử dung Docker để build các server ElasticSearch.
- Về thiêt bị khách hàng:
o Điện thoại có kết nối internet, cài đặt được các trình duyệt hỗ trợ duyệt web.
o Desktop, laptop hỗ trợ kết nối internet, có thể cài đặt trình duyệt như Google Chrome,
Firefox, IE,…
Chương 3. Đặt tả yêu cầu:
3.1. Sơ đồ và CSDL
Sơ đồ giao tiếp

Hình 3. 1 Sơ đồ giao tiếp của hệ thống

15
Các collectors có trong csdl Mongo

16
Hình 3. 2 Cơ sở dữ liệu của dự án

17
Sơ đồ Use Case của hệ thống (vẽ bằng các phần mềm: StarUML)

Hình 3. 3 Sơ đồ usecase

3.2. Đặc tả Use Case


Use case ID U001
Tên Use Case Mua hàng
Khách hàng vào website và tiến hàng mua và thành toán cho
Tóm tắt
món hàng mong muốn
Tác nhân Người mua
Điều kiện tiên quyết Đăng nhập thành công
Kết quả Thanh toán và đặt hàng thành công
1. Tìm kiếm sản phẩm
2. Chọn sản phẩm muốn mua
Kịch bản chính
3. Mua hàng
4. Thanh toán

18
2a. Không thấy sản phẩm muốn mua
1. Chọn sản phẩm tương tự
2. Mua hàng
Kịch bản phụ 3a. Sản phẩm muốn mua đã hết
1. Chọn sản phẩm tương tự
2. Mua hàng
4a. Khách hàng không có ví điện tử
Ràng buộc phi chức
năng

Use case ID U002


Tên Use Case Đăng ký
Để thực hiện mua hàng thì khách hàng cần phải đăng nhập
Tóm tắt để hệ thống có thể kiểm tra thông tin người dùng khi mua
hàng
Tác nhân Khách hàng
Điều kiện tiên quyết Có tài khoản google
Kết quả Đăng ký thành công
1. Truy cập website
Kịch bản chính 2. Đăng ký tài khoản
3. Xác thực tài khoản qua email
2a. Khách hàng không có tài khoản google
1. Đề nghị khách hàng thiết lập tài khoản google
2. Đăng ký
Kịch bản phụ
3a. Khách hàng không xác thực tài khoản
1. Yêu cầu khách hàng xác thực hoặc sử dụng email
khác
Ràng buộc phi chức
năng

19
Use case ID U003
Tên Use Case Đăng nhập
Để mua hàng và tiến hành đặt hàng thì khách hàng cần phải
Tóm tắt
đăng nhập vào hệ thống
Tác nhân Khách hàng
Điều kiện tiên quyết Đã đăng ký tài khoản
Kết quả Đăng nhập thành công
1. Truy cập website
2. Chọn mục đăng nhập
Kịch bản chính
3. Nhập các thông tin đăng nhập
4. Đăng nhập thành công
2a. Khách hàng chưa đăng ký tài khoản
1. Đề nghị khách hàng đăng ký tài khoản
Kịch bản phụ
2. Tiến hành đăng nhập sau khi đăng ký tài khoản thành
công
Ràng buộc phi chức
năng

Use case ID U004


Tên Use Case Giao hàng
Sau khi khách hàng mua hàng và thanh toán thành công thì
Tóm tắt
sản phẩm cần được giao đến địa chỉ mà khách hàng yêu cầu
Tác nhân Đơn vị giao hàng
Điều kiện tiên quyết Mua hàng và thành toán thành công
Kết quả Phía đơn vị giao hàng nhận được hàng

20
1. Khách hàng thanh toán thành công
Kịch bản chính 2. Đơn vị giao hàng tiếp nhận món hàng trên
3. Đơn vị giao hàng tiến hành giao hàng
3a. Khách hàng không nhận hàng
1. Gửi mail báo cho khách hàng là hàng đã được giao
yêu cầu khách hàng nhận hàng
3b. Khách hàng yêu cầu hoàn trả hàng
Kịch bản phụ
1. Hoàn trả hàng
2. Kiểm tra sản phẩm khi hoàn trả
3. Hoàn trả tiền và thanh toán phí theo như quy định
ban đầu
Ràng buộc phi chức
năng

Use case ID U005


Tên Use Case Xem danh sách sản phẩm
Khách hàng khi truy cập website xem hàng để đánh giá sản
Tóm tắt phẩm và xem chi tiết nếu muốn mua thì sẽ đăng nhập để tiến
hành mua hàng
Tác nhân Khách hàng
Điều kiện tiên quyết Truy cập website
Kết quả Xem danh sách sản phẩm
1. Truy cập website
2. Tìm kiếm sản phẩm muốn xem
Kịch bản chính
3. Xem danh sách sản phẩm

Kịch bản phụ

Ràng buộc phi chức


năng

21
Use case ID U006
Tên Use Case Cập nhật sản phẩm
Cửa hàng muốn thêm, xóa, sửa sản phẩm trong website thì
Tóm tắt
cần chức năng cập nhật sản phẩm
Tác nhân Admin
Điều kiện tiên quyết Đăng nhập với vai trò admin
Kết quả Cập nhật các sản phẩm cho cửa hàng
1. Đăng nhập
2. Xem danh sách sản phẩm
Kịch bản chính 3. Thêm, xóa, sửa sản phẩm

Kịch bản phụ

Ràng buộc phi chức


năng

Use case ID U007


Tên Use Case Cập nhật chương trình khuyến mãi
Cửa hàng theo đợt sẽ có các chương trình khuyến mãi và
Tóm tắt cần có chức năng quản lý và điều chỉnh cho chương trình
khuyến mãi
Tác nhân Admin
Điều kiện tiên quyết Đăng nhập với vai trò admin
Kết quả Xem chi tiết các sản phẩm đã tìm kiếm
1. Truy cập website
2. Chương trình khuyến mãi
Kịch bản chính
3. Điều chỉnh chương trình khuyến mãi

22
Kịch bản phụ

Ràng buộc phi chức


năng

Chương 4. Các giao diện của đề tài


4.1. Kibana

Hình 4. 1 Giao diện dev tool của kibana

23
4.2. Studio 3T

Hình 4. 2 Giao diện chính của Studio 3T

4.3. Docker

Hình 4. 3 Giao diện chính của docker desktop

4.4. Trang chủ

24
25
Hình 4. 4 Giao diện chính trang web

4.5. Trang admin

Hình 4. 5 Giao diện chính trang admin

4.6. Chi tiết một sản phẩm

26
Hình 4. 6 Giao diện chi tiết của sản phẩm

4.7. Giỏ hàng

Hình 4. 7 Giao diện chi tiết của sản phẩm

27
4.8. Bộ lọc sản phẩm

Hình 4. 8 Giao diện bộ lọc sản phẩm

4.9. Đăng nhập

Hình 4. 9 Giao diện đăng nhập

28
4.10. Đăng ký

Hình 4. 10 Giao diện đăng ký tài khoản

29
Tài liệu tham khảo
• Elasticsearch docker

• Câu lệnh cơ bản truy vấn dữ liệu Elasticsearch

• Trang tài liệu của MongoDB

• Tìm hiểu về Elasticsearch

• Đồ án về Mongo, React JS

• Trang tài liệu chính của Elasticsearch

30

You might also like