Tải bản đầy đủ (.pdf) (52 trang)

ĐỒ án MẠNG xã hội PHOTOME DÀNH CHO THỢ CHỤP ẢNH và NGƯỜI có NHU cầu CHỤP ẢNH, mẫu ẢNH (đồ án SE121 l21 PMCL)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.16 MB, 52 trang )

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM

ĐỒ ÁN 1

MẠNG XÃ HỘI PHOTOME DÀNH CHO THỢ
CHỤP ẢNH VÀ NGƯỜI CÓ NHU CẦU CHỤP
ẢNH, MẪU ẢNH

Giảng viên hướng dẫn: TH.S NGUYỄN CÔNG HOAN
Sinh viên thực hiện:

HÀ NHẬT LINH – MSV: 18520086
PHẠM VŨ LÊ MINH – MSV: 18520103

Tp. Hồ Chí Minh, Tháng 7 năm 2021

1


2


LỜI NÓI ĐẦU
Tài liệu này được tạo ra bởi yêu cầu của lớp SE121.L21, Trường Đại học Công
nghệ Thông tin, Đại học Quốc gia Thành phố Hồ Chí Minh, học kỳ II năm học 20202021.
Báo cáo này bao gồm các thông tin từ việc khảo sát và tham khảo các nền tảng
mạng xã hội, các tài liệu thiết kế và đặc tả của phần mềm mạng xã hội bao gồm các sơ đồ
Use-case, các thực hiện hóa cơ sở dữ liệu, giao diện….


Cách đọc tài liệu: Nội dung tài liệu được đưa vào các mục, và được đánh số thứ tự
từ trên xuống, chi tiết xem thêm tại mục lục
Chúng em cảm ơn thầy Nguyễn Công Hoan đã hỗ trợ và hướng dẫn để nhóm có
thể hồn thành tốt đồ án.


NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN

.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.............., ngày ............ tháng……năm 2021
Người nhận xét
(Ký tên và ghi rõ họ tên)


MỤC LỤC
LỜI NĨI ĐẦU

1

MỤC LỤC


3

I.

GIỚI THIỆU BÀI TỐN CẦN GIẢI QUYẾT, MƠ TẢ QUY TRÌNH THỰC HIỆN
CÁC CƠNG VIỆC CHÍNH
6

1. Bài tốn cần giải quyết

6

2. Quy trình thực hiện

6

II.

CƠNG NGHỆ

8

1. React Native
1.1. Khái niệm React Native

8
8

1.2.


8

Tại sao lại chọn React Native?

1.2.1.

Hiệu suất tuyệt vời

8

1.2.2.

Giao diện người dùng phong phú

8

1.2.3.
1.2.4.

Phát triển ứng dụng nhanh
Phát triển đa nền tảng

9
9

1.2.5.

Hỗ trợ cộng đồng mạnh mẽ

10


1.2.6.

Dễ học

10

1.3.

Kiến trúc React Native

11

Kiến trúc cũ

11

1.3.2. Kiến trúc mới
1.4. Mô tả tổng quát codebase

13
15

1.3.1.

1.4.1.

Firebase

15


1.4.2.

Server

16

1.4.3.

SRC

16

2. Mongodb
2.1. Sự ra đời của Mongodb :

16
16

2.2. Khái niệm Mongodb:

17

2.2.1 Mongodb là gì:

17

2.2.2 Kiến trúc tổng quát
2.3. Chức năng, vai trò của Mongodb


17
19

2.3.1.

Chức năng:

19

2.3.2.

Vai trò:

20


2.4.

Các khái niệm cơ bản

20

2.4.1.

Database

20

2.4.2.


Collection

20

2.4.3.

Document

20

2.4.4.
2.4.5.

Schema
Các thao tác cơ bản với Mongo

21
21

2.4.5.1. Create

21

2.4.5.2.

21

Read

2.4.5.3. Update


22

2.4.5.4. Delete

22

3. NodeJs
3.1. Sơ lược về Nodejs

23
23

3.2.

Đặc điểm và thành phần của NodeJs

23

3.3.

Ứng dụng của Nodejs

24

4. Firebase
4.1. Sơ lược về firebase

25
25


4.2.

Lịch sử

25

4.3.
4.4.

Lợi ích sử dụng firebase và lý do sử dụng firebase vào việc lưu trữ ảnh 25
Chức năng storage phục vụ cho Photome
26

III.

XÁC ĐỊNH MƠ HÌNH HĨA YÊU CẦU

26

1. Phân loại các yêu cầu phần mềm
1.1 Danh sách các yêu cầu nghiệp vụ

26
26

1.2 Biểu mẫu

27


1.2.1

BM1

27

1.2.2

BM2

27

1.2.3
1.2.4

BM3
BM4

27
27

1.3 Quy định

27

2

Sơ đồ lớp mức phân tích

27


3

Sơ đồ usecase

28

THIẾT KẾ HỆ THỐNG

29

IV.

1. Kiến trúc hệ thống

29


2. Mô tả thành phần hệ thống
2.1 Các thành phần của kiến trúc

29
29

2.2 Hướng đi của kiến trúc

30

V.


THIẾT KẾ DỮ LIỆU

1. Danh sách các lược đồ dữ liệu

30

30

2. Mô tả các lược đồ
2.1 Lược đồ User

31
31

2.2 Lược đồ Profile

31

2.3 Lược đồ Newfeed

32

2.4 Lược đồ Liked

33

2.5 Lược đồ Comment

33


VI.

THIẾT KẾ GIAO DIỆN

33

1. Danh sách các màn hình

33

2. Mơ tả chi tiết các màn hình
2.1 Màn hình đăng ký
2.2 Màn hình đăng nhập

35
35
36

2.3 Màn hình home

37

2.4 Màn hình notification

39

2.5 Màn hình search

40


2.6 Màn hình MyAccount

41

2.7 Màn hình PostNewfeed
2.8 Màn hình EditProfile

42
44

2.9 Màn hình comment

45

2.10 Màn hình trang cá nhân người dùng khác

47

VII.

CÀI ĐẶT VÀ KIỂM THỬ

48

VIII. HƯỚNG PHÁT TRIỂN

48

IX.


49

TÀI LIỆU THAM KHẢO


I.

GIỚI THIỆU BÀI TỐN CẦN GIẢI QUYẾT, MƠ TẢ QUY TRÌNH THỰC
HIỆN CÁC CƠNG VIỆC CHÍNH

1. Bài tốn cần giải quyết
 Xây dựng một mạng xã hội cho thợ chụp ảnh, mẫu ảnh và người có nhu cầu chụp
ảnh

 Xác định đối tượng hướng đến:
Người dùng: Thợ chụp ảnh, mẫu ảnh, người sở hữu mẫu ảnh, người có nhu cầu
chụp ảnh, người có niềm đam mê với nhiếp ảnh

 Mục đích: Tạo ra một mơi trường nhiếp ảnh hiện đại. Ở đó mọi người có thể tập
chung vào nhiếp ảnh. Tạo điều kiện thuận lợi nhất để mọi người có thể tìm kiếm cơ
hội của mình, liên lạc và cộng tác cùng nhau thông qua mạng xã hội Photome. Đồng
thời Photome cũng là một mạng xã hội hình ảnh dùng để giải trí hướng đến những
người yêu thích chụp ảnh…

 Hình thức phát triển: App mobile
 Cơng nghệ sử dụng:
+ Frontend: React Native
+ Backend: NodeJS, Express, MongoDB, Firebase

2. Quy trình thực hiện

Hiện tại các hoạt động chụp ảnh, nhiếp ảnh đều là các hình thức tự phát, khơng có
sự gắn kết giữa những người yêu thích với nhau lại thành một cộng đồng lớn. Hay nếu có
gắn kết thơng qua một mạng xã hội lớn nào khác, thì các hoạt động nhiếp ảnh sẻ bị pha
lỗng bởi tính chất mạng xã hội đa phương tiện. Những người dùng yêu chụp ảnh và có
nhu cầu về chụp ảnh khó có thể sàng lọc các đối tượng trên những trang mạng xã hội lớn
đồng thời bị những vấn đề khác gây loãng kết quả.
Có một số ứng dụng mạng xã hội cho nhiếp ảnh gia đã được phát triển, nhằm tạo
không gian cho những người yêu thích chụp ảnh. Tuy nhiên những ứng dụng này chỉ dừng
lại ở việc chia sẻ ảnh và tạo sự gắn kết giữa cộng đồng người chụp ảnh, chứ chưa tạo được
sự phân hóa và nhu cầu của những thực thể trong mạng xã hội.


Nắm bắt được yêu cầu đó. Những người dùng cần có những bức ảnh đẹp. Chụp
ảnh khơng chỉ là để vui mà nó cịn là một nghề nghiệp. Tạo thêm nhiều công việc cho
những mẫu ảnh bán chuyên và chuyên nghiệp. Cũng như tạo được không gian nhiếp ảnh
lành mạnh. Chúng em đã thống nhất chọn đề tài Photome mạng xã hội cho thợ chụp ảnh,
mẫu ảnh và người có nhu cầu chụp ảnh.
App được xây dựng bao gồm các nội dung cơ bản:



Tạo tài khoản cá nhân, profile cho cá nhân để giới thiệu bản thân (như CV)

 Up các bài đăng của mình(Ảnh và các status trạng thái)
 Tương tác (like , comment ) với các bài viết của người khác
 Tìm kiếm những người dùng khác nhằm liên lạc hay follow
 Xem thông báo những người đã thực hiện tương tác với bài viết của mình
 Xem các bài viết, đăng ngẫu nhiên trong trang home và từ đó nhận biết được
những bài viết, người dùng cần để ý
Các bước xây dựng App mobile:


 Xác định yêu cầu, mơ hình hố
 Thiết kế hệ thống
 Thiết kế dữ liệu
 Thiết kế giao diện
 Lập trình
 Thử nghiệm và sửa lỗi
 Phát hành app, bảo trì


II.

CÔNG NGHỆ

1. React Native
1.1.

Khái niệm React Native
Được phát triển bởi Facebook, React Native là một framework hướng đến phát triển

ứng dụng di động đa nền tảng.
Với sự trợ giúp của React Native, lập trình viên (developer) có thể sử dụng JavaScript
để tạo ra mobile apps (ứng dụng di động) hỗ trợ cho cả nền tảng Android và iOS.
Instagram, Facebook, Skype,… là những ứng dụng nổi bật sử dụng React Native.
1.2.

Tại sao lại chọn React Native?
1.2.1. Hiệu suất tuyệt vời
React native có thể khơng nhanh như các ứng dụng gốc thực sự được xây dựng bằng


các ngôn ngữ quen thuộc như Java, Objective-C và C #. Tuy nhiên, bạn sẽ có được hiệu suất
gần như ngơn ngữ đấy vì nó cung cấp cho bạn các thành phần gốc, Chế độ xem và Văn bản.
Ứng dụng dành cho thiết bị di động dựa trên React Native không phải là ứng dụng web
HTML5, hybrid hoặc di động. Thay vào đó, nó là một ứng dụng di động thực sự.
Bạn có thể nâng hiệu suất ứng dụng React Native của mình lên một tầm cao mới bằng
cách tối ưu hóa ứng dụng của bạn bằng mã gốc. Có, React Native cũng cho phép bạn sử dụng
mã gốc. Để có hiệu suất tối đa, bạn có thể xây dựng một số tính năng trong ứng dụng của mình
bằng mã gốc và một số tính năng với React Native.
1.2.2. Giao diện người dùng phong phú
React Native cho phép bạn tạo các UI độc đáo, bắt mắt thông qua các thành phần khai
báo được xây dựng sẵn, chẳng hạn như Picker, Nút, Thanh trượt, Chuyển đổi, v.v. Bạn cũng
có thể tạo các thành phần của riêng bạn với TouchableNativeFeedback và TouchableOpacity.
Có nhiều thành phần dành riêng cho iOS và Android có sẵn để giúp thiết bị hoạt động hiệu
quả trên điện thoại di động Android và iOS.
Ví dụ:
iOS – ActionSheetIOS, AlertIOS, DatePickerIOS, ImagePickerIOS, ProgressViewIOS,
PushNotificationIOS, SegmentedControlIOS, v.v..
Android – DatePickerAndroid, DrawerLayoutAndroid, RightsAndroid, ProgressBarAndroid,
TimePickerAndroid, ToastAndroid, Thanh công cụ Android, View Page Android, v.v..


1.2.3. Phát triển ứng dụng nhanh
React Native cung cấp cho bạn các thành phần cho văn bản, hình ảnh, đầu vào bàn
phím, danh sách có thể cuộn, thanh tiến trình, hình động, bảng tạm, liên kết, v.v. Các thành
phần này tăng tốc đáng kể quá trình phát triển ứng dụng và tính năng Tải lại nóng cũng giúp
bạn tiết kiệm rất nhiều thời gian vì nó cho phép bạn tải lại ứng dụng của mình mà khơng cần
biên dịch lại toàn bộ mã.
Phản ứng thư viện bản địa như Redux (để xử lý trạng thái ứng dụng của bạn) và Phản
ứng tuyệt vời bản địa (danh sách các thành phần và bản trình diễn) cũng sẽ giúp bạn hồn
thành cơng việc phát triển ứng dụng di động của mình nhanh hơn.

Công cụ phát triển như Hạt nhân để viết mã, Yoga để xây dựng bố trí, Lính gác để theo
dõi lỗi và sự cố, và Công cụ phát triển React để gỡ lỗi làm cho quá trình phát triển React
Native dễ dàng hơn và nhanh hơn rất nhiều. Các công cụ React Native tuyệt vời khác bao gồm
Mã VS, Đốt cháy, Hội chợ triển lãm, và Bugsnag.

1.2.4. Phát triển đa nền tảng
Mã một lần, sử dụng nó ở khắp mọi nơi. Tiết kiệm thời gian và tiền bạc bằng cách xây


dựng các ứng dụng đa nền tảng. Nhưng hãy nhớ rằng bạn vẫn cần thực hiện một số điều chỉnh
dành riêng cho nền tảng.

1.2.5. Hỗ trợ cộng đồng mạnh mẽ
Hơn 2.000 người đóng góp với hơn 85.000 ngơi sao trên GitHub.
Các công ty như Callstack, Biệt thự phần mềm, Microsoft, và Màu đỏ vơ hạn đã đóng
góp cho khn khổ này. Bạn sẽ tìm thấy rất nhiều thành phần và thư viện React Native được
tạo bởi cộng đồng các nhà phát triển trên các trang web như Mã thông báo và Thư mục gốc.
Nhận trợ giúp về StackOverflow, Reddit hoặc là Bộ giải mã. Bạn ln ln tìm người
giúp bạn. Bạn cũng có thể nhận được sự giúp đỡ từ Cộng đồng bất hịa Reactiflux, các Phản
ứng nhóm Facebook gốc, và Phản ứng cộng đồng Spectrum bản địa.
1.2.6. Dễ học
Các tài liệu chính thức thân thiện với người mới bắt đầu và có ví dụ mã. Bên cạnh các


tài liệu chính thức, bạn cũng có thể thử các cách sau để có được thực hành.
1.3.

Kiến trúc React Native
1.3.1. Kiến trúc cũ
Thực chất, React Native là một giải pháp platform-agnostic (không phụ thuộc nền


tảng). Trong phạm vi này, mục tiêu chính của framework là cho phép các developer viết code
bằng Javascript với ReactJS trong khi ở bên dưới React Native sử dụng các cơ chế riêng của
nó để biên dịch các React Element để phía hệ điều hành có thể hiểu được. Điều này có nghĩa
là:

- Hiển thị chính xác giao diện người dùng
- Khả năng truy cập đến các thành phần native của hệ điều hành.
Thông thường, đối với hệ điều hành Android/iOS, cơ chế hoạt động sẽ như sau:

Có 3 luồng chạy song song và riêng biệt trong mỗi ứng dụng React Native:
● JS thread: là nơi tất cả code Javascript được đọc và biên dịch, nơi xử lý hầu hết các
logic nghiệp vụ của ứng dụng. Metro sẽ đóng gói tất cả code Javascript thành một file
duy nhất. Phần code này sẽ được chuyển tới công cụ JavascriptCore (JSC) để có thể
chạy được.


● Native thread: là nơi xử lý code native. Nó giao tiếp với JS Thread bất cứ khi nào có
nhu cầu cần thay đổi UI hoặc truy cập các hàm native. Chúng ta có thể chia Native
Thread thành Native UI và Native Modules. Tất cả các Native Modules đều được khởi
động khi chúng ta sử dụng ứng dụng. Điều đó có nghĩa là module Bluetooth sẽ ln
ln ở trạng thái kích hoạt bởi React Native kể cả khi khơng có nhu cầu sử dụng.
● Shadow Thread: là nơi các layout sẽ được tính tốn. Nó sử dụng Layout Engine riêng
của Facebook được gọi là Yoga nhằm tính tốn flexbox layout, sau đó gửi kết quả về
phía Native UI.
Để giao tiếp giữa JS thread và Native thread chúng ta sẽ sử dụng một Bridge. Phía bên
dưới, Module C++ này hầu hết được xây dựng xung quanh bằng một hàng đợi bất đồng bộ
(asynchronous queue). Bất cứ khi nào nó nhận được dữ liệu từ một trong hai phía (JS thread
hoặc Native thread), nó sẽ tuần tự hóa dữ liệu dưới dạng JSON và chuyển nó qua hàng đợi,
cuối cùng được giải mã khi nó tới nơi.

Điều này có nghĩa là tất cả các thread đều dựa trên chuỗi tín hiệu JSON được truyền bất
đồng bộ qua Bridge, và chúng sẽ được gửi tới một trong hai phía với mong muốn (nhưng
khơng chắc là đảm bảo) sẽ nhận được phản hồi trong tương lai. Bạn cũng có thể sẽ gặp phải
vấn đề tắc nghẽn thông tin và không nhận được phản hồi.
Một ví dụ phổ biến cho biết lý do tại sao điều này lại tạo ra các vấn đề về hiệu suất khi
được nhìn thấy khi cuộn một danh sách dữ liệu lớn: Bất cứ khi nào sự kiện onScroll xảy ra
trên Native thread, thông tin sẽ được gửi không đồng bộ đến JS thread, nhưng Native thread
không chờ JS thread thực hiện xong mà nó lại gửi trở lại theo cách khác. Điều này tạo ra một
sự delay, sẽ có một khoảng trống trước khi thông tin xuất hiện trên màn hình.
Tương tự như vậy, việc tính tốn hiển thị layout cần phải trải qua nhiều vịng trước khi nó
có thể được hiển thị trên màn hình, vì nó cần phải đi qua Yoga engine trước khi có thể được
tính bởi Native thread và tất nhiên chúng cũng sẽ phải đi qua Bridge để tới JS Thread.


Chúng ta có thể nhận thấy cách gửi dữ liệu JSON một cách bất đồng bộ sẽ tạo ra vấn đề
về hiệu suất. Nhưng còn cách nào khác để Javascript của chúng ta giao tiếp với Native code?
Đây là nơi JSI phát huy tác dụng.
1.3.2. Kiến trúc mới
Việc tái kiến trúc của React Native sẽ dần loại bỏ Bridge và thay thế nó bằng một thành
phần mới có tên là Javascript Interface (JSI).
JSI có một vài cải tiến mới rất thú vị, đầu tiên là JS bundle khơng cịn phụ thuộc vào
JS core nữa. Nói cách khác, JSC engine giờ đây có thể dễ dàng hốn đổi với các JavaScript
engine khác - có khả năng hoạt động tốt hơn - như Chrome Engine V8 chẳng hạn.
Cải tiến thứ hai của kiến trúc mới này là Bằng cách sử dụng JSI, JavaScript có thể giữ
tham chiếu đến C++ Host Object và truy cập phương thức trên chúng. Từ đó JavaScript và
các thành phần Native sẽ nhận thức và giao tiếp được lẫn nhau.
Nói cách khác, JSI sẽ cho phép khả năng tương tác hoàn toàn giữa tất cả các thread.
Với khái niệm chia sẻ quyền sở hữu (shared ownership), code JavaScript có thể giao tiếp với
các thành phần Native trực tiếp từ JS thread và bỏ qua việc tuần tự hóa thông điệp dạng JSON
giữa các thành phần, loại bỏ tất cả các vấn đề tắc nghẽn và bất đồng bộ trên Bridge.



Ngoài việc cải thiện đáng kể hiệu suất giao tiếp giữa các thread với nhau, kiến trúc mới
này cũng cho phép kiểm sốt trực tiếp các Native modules. Có nghĩa là chúng ta hồn tồn có
thể sử dụng các Native modules khi chúng ta cần chúng, khơng cần kích hoạt tất cả khi khởi
chạy ứng dụng. Điều này mang lại sự cải thiện hiệu suất hết sức rõ rệt.
Cơ chế mới này có khả năng linh hoạt, cũng có thể có lợi cho nhiều trường hợp sử dụng
khác nhau. Chẳng hạn như bây giờ chúng ta có sức mạnh của C++ trong tay, thật dễ dàng để
thấy React Native có thể được sử dụng trong một hệ thống rất lớn.


1.4.

Mô tả tổng quát codebase

1.4.1. Firebase
Thư mục này chứa firebase config và các hàm để liên kết với filebase và hỗ trợ đăng
ảnh lên firebase


1.4.2. Server
Thư mục này chứa tất cả các API , Schema và các file config kết nối cơ sở dữ liệu
Mongodb.
● Các API để thực hiện truy xuất và các thao tác cần thiết với database
● Schema để quy định và cấu trúc định dạng database cần lưu
● Các file config để hỗ trợ việc kết nối với mongodb
1.4.3. SRC
Thư mục này bao gồm:
● Asset chứa tất cả image và font cần thiết cho ứng dụng
● Các components, screen, để tạo frontend hình dạng chính của các màn hình và các hàm

xử lý dữ liệu ở trong
● Navigations dùng để điều hướng các màn hình
● Styles để quy định format của một đối tượng cụ thể
2. Mongodb
2.1.

Sự ra đời của Mongodb :
MongoDB (bắt nguồn từ “humongous”) là một hệ cơ sở dữ liệu NoSQL mã nguồn mở.
Thay cho việc lưu trữ dữ liệu vào các bảng có quan hệ với nhau như truyền thống,

MongoDB lưu các dữ liệu cấu trúc dưới dạng giống với JSON(JavaScript Object Notation) và
gọi tên là BSON. Dự án được bắt đầu triển khai vào tháng 10 năm 2007 bởi 10gen trong khi
công ty này đang xây dựng một nền tảng như là dịch vụ (Platform as a Service) giống như
Google App Engine. Phải đến năm 2009, dự án này được tách độc lập. Hệ thống có thể chạy
trên Windows, Linux, OS X và Solaris. Nó được một số tổ chức sử dụng trong thực tế như:
Craigslist : Công ty làm việc trong lịch vực môi giới quảng cáo trên các website khác
(giống adMicro của Việt Nam). MongoDB giúp cho công ty này quản lý hàng tỉ các bản ghi
quảng cáo thuận tiện và nhanh chóng.
Foursquare là một mạng xã hội gắn các thông tin địa lý. Công ty này cần lưu dữ liệu
của rất rất nhiều vị trí của các địa điểm như quán cafe, nhà hàng, điểm giải trí, lịch sử, … và


ghi lại những nơi mà người sử dụng đã đi qua.
CERN : Trung tâm nghiên cứu năng lượng nguyên tử của Châu Âu, sử dụng MongoDB
để lưu trữ lại các kết quả, dữ liệu thí nghiệm của mình. Đây là một lượng dữ liệu khổng lồ sẽ
dùng để sử dụng trong tương lai.

MTV Networks, Disney Interactive Media Group, bit.ly, The New York Times, The
Guardian, SourceForge, Barclays, …
2.2. Khái niệm Mongodb:

2.2.1 Mongodb là gì:
MongoDB là một chương trình cơ sở dữ liệu mã nguồn mở được thiết kế theo kiểu
hướng đối tượng trong đó các bảng được cấu trúc một cách linh hoạt cho phép các dữ liệu lưu
trên bảng không cần phải tuân theo một dạng cấu trúc nhất định nào. Chinh do cấu trúc linh
hoạt này nên MongoDB có thể được dùng để lưu trữ các dữ liệu có cấu trúc phức tạp và đa
dạng và không cố định (hay còn gọi là Big Data).
Tuy nhiên khi đưa ra định nghĩa như ở trên tôi đã sử dụng khái niệm bảng trong các cơ
sở dữ liệu có quan hệ để bạn có thể dễ hiểu. Trên thực tế thì MongoDB sử dụng thuật ngữ
khác là collection hay bộ sưu tập thay vì 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. Các bảng này được cấu trúc với một số lượng
cột (column) nhất định và các cột này cũng được định nghĩa với kiểu dữ liệu nhất định. Ngược
lại MongoDB lưu document (hay tài liệu tương tự như các record trong MySQL hay SQL
Server) vào các collection với định dạng JSON hay Javascript Object Notation. Do đó khi truy
vấn dữ liệu hay cập nhật dữ liệu của document trong MongoDB chúng ta sử dụng cú pháp
theo kiểu hướng đối tượng.

2.2.2 Kiến trúc tổng quát
Một MongoDB Server sẽ chứa nhiều database. Mỗi database lại chứa một hoặc nhiều
collection. Đây là một tập các documents, về mặt logic thì chúng gần tương tự như các table
trong CSDL quan hệ. Tuy nhiên, điểm hay ở đây là ta không cần phải định nghĩa trước cấu


trúc của dữ liệu trước khi thao tác thêm, sửa dữ liệu… Một document là một đơn vị dữ liệu –
một bản ghi (không lớn hơn 16MB). Mỗi chúng lại chứa một tập các trước hoặc các cặp key
– value. Key là một chuỗi ký tự, dùng để truy xuất giá trị dạng : string, integer, double, …

Cấu trúc có vẻ khá giống JSON, tuy nhiên, khi lưu trữ document này ra database,
MongoDB sẽ serialize dữ liệu thành một dạng mã hóa nhị phân đặc biệt – BSON. Ưu điểm
của BSON là hiệu quả hơn các dạng format trung gian như XML hay JSON cả hệ tiêu thụ bộ
nhớ lẫn hiệu năng xử lý. BSON hỗ trợ toàn bộ dạng dữ liệu mà JSON hỗ trợ (string, integer,

double, Boolean, array, object, null) và thêm một số dạng dữ liệu đặc biệt như regular
expression, object ID, date, binary, code.


2.3. Chức năng, vai trò của Mongodb
2.3.1. Chức năng:
● Truy vấn: Đây được xem là tính năng tốt nhất của MongoDB. Nó có tác dụng
giúp các trường truy vấn phạm vi, kết hợp cùng việc tìm kiếm biểu thức nhằm
trả về kết quả tài liệu cụ thể với kích thước nhất định. Ngồi ra, các trường dùng
trong MongoDB cịn được dùng để lập chỉ mục chính, phụ.
● Lưu trữ tệp: Khi tìm hiểu hệ cơ sở dữ liệu MongoDB thì bạn sẽ thấy, tính năng
lưu trữ tệp được dùng như một hệ thống tệp (gọi là GridFS) đóng vai trị cân
bằng tải, đồng thời, sao chép dữ liệu trên nhiều máy tính. Cụ thể, GridFS chia
một tệp ra làm nhiều phần và lưu trữ thành các tài liệu riêng biệt. Sau đó, người
dùng dễ dàng truy cập GridFS thơng qua Mongofiles hay các plugin sử dụng
cho Nginx và Lighttpd.
● Tập hợp: Tính năng này chính là chương trình mang đến ba giải pháp để thực
hiện tập hợp gồm Aggregation Pipeline, Mapreduce và Single-purpose
Aggregation. Trong đó, Aggregation Pipeline được đánh giá là có hiệu suất tốt
nhất.
● Nhân rộng: MongoDB cung cấp Replica Set cho phép nhân 2 hoặc nhiều bản
sao của dữ liệu. Đồng thời, mỗi bản sao lại đóng vai trị chính và phụ.
-

Khi nhân rộng, tồn bộ dữ liệu khi ghi và đọc được thực hiện trên bản sao
chính.

- Bản sao thứ cấp sẽ dùng bản sao tích hợp để có thể duy trì các bản sao dữ liệu.



Trong trường hợp có bất kỳ bản sao chính nào bị thất bại thì Replica set sẽ chọn một bản
sao thứ cấp để thay thế làm bản sao chính tiếp theo. Trong quá trình nhân rộng,
Replica thứ cấp được tùy ý chọn các hoạt động nhưng dữ liệu cuối cùng vẫn
phải tuân theo mặc định.
● Cân bằng tải: MongoDB sử dụng Sharding nhằm chia tỷ lệ theo chiều ngang và
xác định dữ liệu phân phối trong collection. Điều này giúp người dùng có thể
chọn một Shard key.
Nói tóm lại, MongoDB cân bằng tải bằng cách dựa vào các Shard key để chia dữ liệu
thành các phạm vi và phân phối đồng đều. Chúng có thể chạy trên nhiều máy
chủ khác nhau và thực hiện chức năng sao chép dữ liệu hay cân bằng tải nhằm
giữ hệ thống hoạt động liên tục trong trường hợp phát sinh lỗi về phần cứng.

2.3.2. Vai trò:
● Là Nosql dễ dàng tiếp cận và sử dụng cho các ứng dụng
● Các thao tác thêm sửa xóa đơn giản với mơng
● Được mọi người ưa chuộng rộng rãi
● Phát triển tốt và có những chức năng nổi bật
2.4.

Các khái niệm cơ bản
2.4.1. Database
Database là một container vật lý cho các collection. Mỗi DB được thiết lập cho riêng

nó một danh sách các files hệ thống files. Một máy chủ MongoDB đơn thường có nhiều DB.
2.4.2. Collection
Collection là một nhóm các documents của MongoDB. Nó tương đương với một table
trong RDBMS. Một Collection tồn tại trong một cơ sở dữ liệu duy nhất. Các collection ko tạo
nên một schema. Documents trong collection có thể có các fields khác nhau. Thơng thường,
tất cả các documents trong collections có mục đích khá giống nhau hoặc liên quan tới nhau
2.4.3. Document

Một document là một tập hợp các cặp key-value. Documents có schema động. Schema
động có nghĩa là documents trong cùng một collection khơng cần phải có cùng một nhóm các
fields hay cấu trúc giống nhau, và các fields phổ biến trong các documents của collection có


thể chứa các loại dữ liệu khác nhau.
2.4.4. Schema
Trong khi Mongo là schema-less, SQL định nghĩa một lược đồ thông qua định nghĩa
bảng. Một lược đồ Mongoose là một lớp cấu trúc dữ liệu được thi hành qua lớp ứng dụng.
2.4.5. Các thao tác cơ bản với Mongo
2.4.5.1. Create
Create hay Insert thêm một document mới vào một collection. Nếu collection hiện
không tồn tại, insert sẽ tạo collection.
MongoDB cung cấp 2 phương thức để chèn document vào một collection
● db.collection.insertOne(): chèn một tài liệu mới vào một collection. Nếu document
khơng có trường _id , MongoDB sẽ tự động thêm trường _id với value kiểu ObjectId.

● db.collection.insertMany(): insert nhiều document vào một collection, truyền vào
phương thức là mảng các document
2.4.5.2.

Read

Read operation truy xuất documents từ một collection
Để lấy ra tất cả các document trong collection, truyền vào một document trống vào
phương thức find

Ngồi ra cịn các điều kiện cụ thể hơn để truy xuất cụ thể hơn



2.4.5.3.

Update

Update operation chỉnh sửa documents đã tồn tại trong một collection. Để update một
document, MongoDB cung cấp các toán tử update trong đó có $set.
Để sử dụng các tốn tử update, truyền vào phương thức update một update document.
Một vài tốn tử update, trong đó có $set, sẽ tạo ra các trường nếu trường đó khơng tồn tại.

● Sử dụng toán tử $set để update giá trị của trường size.uom thành cm và giá trị của
trương field thành "P"
● Sử dụng toán tử $currentDate để update giá trị của trường lastModified thành ngày hiện
tại. Nếu lastModified không tồn tại, $currentDate sẽ tạo trường này.

● Update nhiều đối tượng với điều kiện thỏa mãn
2.4.5.4.

Delete

Delete operation xóa bỏ document từ một collection.
Để xóa tất cả các tài liệu từ một collection, truyền một document filter {} tới phương
thức db.collection.deleteMany()
Ví dụ sau xóa tất cả các document của collection inventory

Xóa tất cả các document thỏa mãn điều kiện


Bạn có thể chỉ định các tiêu chí hoặc bộ lọc xác định các tài liệu cần xóa.
Để chỉ định điều kiện bằng, sử dụng biểu thức <field>:<value>
Có thể sử dụng query operators để chỉ định các điều kiện:


Xóa chỉ một document thỏa mãn điều kiện
Để xóa chỉ một document phù hợp với điều kiện( trường hợp có nhiều document thỏa
mãn thì sẽ xóa document đầu tiên), sử dụng db.collection.deleteOne()
Ví dụ sau xóa document đầu tiên mà có status bằng "D"

3. NodeJs
3.1.

Sơ lược về Nodejs
NodeJS được phát triển từ Javascript vào năm 2009 bởi Ryan Dahl. NodeJS có cách

thức hoạt động chủ yếu trên Server sử dụng để xây dựng cho các ứng dụng realtime. NodeJS
dùng mơ hình I/O lập trình dựa theo sự kiện non-blocking.
Chính vì vậy, NodeJS tương đối gọn nhẹ, hiệu quả và là một công cụ hoàn hảo dành
cho mọi ứng dụng chuyên sâu về dữ liệu dựa theo khoảng thời gian thực khi chạy trên những
thiết bị phân tán. NodeJs thường xuyên được dùng cho mục đích xây dựng một số ứng dụng
như: Ad Server, Websocket server, Fast File Upload Client, RESTful API, Cloud Services,
Any Real-time Data Application.
3.2.

Đặc điểm và thành phần của NodeJs

● NodeJS là một Platform mà không phải là một Framework mà. Chính vì vậy, nó cho
phép chúng ta có thể xây dựng cho các website một cách độc lập và nhanh chóng hơn.
● NodeJS thường sẽ chạy trên đa nền tảng phía Server nên nó có thể thực hiện chạy ở bất
kỳ các máy như: Mac – Window – Linux.
● NodeJS khơng được xem là một ngơn ngữ lập trình, nên những người mới bắt đầu làm
quen với NodeJS thì khơng thể học ngay được nếu như không nắm chắc kiến thức lập
trình căn bản như: các giao thức, Javascript,… Tuy nhiên, cộng đồng NodeJS thường

rất lớn và nó sẵn sàng support cho bạn mọi lúc mọi nơi.


×