JavaScript suy cho cùng cũng chỉ là một ngôn ngữ - vậy thì không có lý do gì để nói nó không thể sử dụng trên môi trường server tốt như là trong trình duyệt của người dùng được.. Phương
Trang 1THÀNH PHỐ HỒ CHÍ MINH
BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT
ĐỒ ÁN TỐT NGHIỆP NGÀNH CÔNG NGHỆ THÔNG TIN
XÂY DỰNG WEB BÁN HÀNG TÍCH HỢP GỢI Ý SẢN PHẨM ĐẾN NGƯỜI DÙNG
GVHD: TỪ TUYẾT HỒNG SVTH: NGUYỄN HUỲNH VINH
SKL 0 0 7 0 5 9
Trang 2TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH
KHOA ĐÀO TẠO CHẤT LƯỢNG CAO
Trang 3TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH
KHOA ĐÀO TẠO CHẤT LƯỢNG CAO
Trang 4CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập – Tự do – Hạnh phúc
***
Tp Hồ Chí Minh, ngày 01 tháng 07 năm 2020
NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP
Họ và tên sinh viên : Nguyễn Huỳnh Vinh MSSV : 16110269
Ngành: Công Nghệ Thông Tin Lớp: 16110ST2
Giảng viên hướng dẫn: Từ Tuyết Hồng
Ngày nhận đề tài: 24/02/2020 Ngày nộp đề tài: 01/07/2020
1 Tên đề tài: Xây dựng web bán hàng tích hợp gợi ý sản phẩm đến người dùng
2 Các số liệu tài liệu ban đầu:thu thập từ một số website và tự thêm
3 Nội dung thực hiện đề tài:
- Tìm hiểu Neo4j, xây dựng ứng dụng Web gồm các chức năng: đăng nhập mua hàng, xem hàng, tìm kiếm sản phẩm, thêm sản phầm vào giỏ hàng Phần quản trị sẽ có phần quản lý sản phẩm, quản lý khách hàng, quản lý thể loại, quản lý hóa đơn
- Phần chính quan trọng là gợi ý cho người dùng, dựa vào thông tin tài khoản của người dùng có những thông tin về tuổi, tùy vào từng loại thông tin và ngữ cảnh thì sẽ có những sản phẩm phù hợp để gợi ý Đối với những tài khoản đã mua hàng thì sẽ gợi ý theo những sản phẩm đã mua và những loại sản phẩm tương tự, và cũng gợi ý theo hành vi của người dùng dựa vào lượt click vào sản phẩm, hay thời gian xem sản phẩm
- Khách hàng sẽ được gợi ý những mặt hàng mà họ đang quan tâm mỗi khi họ quay lại hệ thống, giúp họ nhìn thấy ngay những sản phẩm họ đang quan tâm trên web
4 Sản phẩm:
Trang 5CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập – Tự do – Hạnh phúc
***
PHIẾU NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
Họ và tên sinh viên : Nguyễn Huỳnh Vinh MSSV : 16110269 Ngành: Công Nghệ Thông Tin
Tên đề tài: Xây dựng web bán hàng tích hợp gợi ý sản phẩm đến người dùng
Họ và tên Giáo viên hướng dẫn: Từ Tuyết Hồng
NHẬN XÉT
1 Về nội dung đề tài và khối lượng thực hiện:
2 Ưu điểm:
3 Khuyết điểm:
4 Đề nghị cho bảo vệ hay không?
5 Đánh giá loại:
6 Điểm: (Bằng chữ: )
Tp Hồ Chí Minh, ngày 01 tháng 07 năm 2020 Giáo viên hướng dẫn
(Ký và ghi rõ họ tên)
Trang 6CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập – Tự do – Hạnh phúc
***
PHIẾU NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN
Họ và tên sinh viên : Nguyễn Huỳnh Vinh MSSV : 16110269 Ngành: Công Nghệ Thông Tin
Tên đề tài: Xây dựng web bán hàng tích hợp gợi ý sản phẩm đến người dùng
Họ và tên Giáo viên phản biện:
NHẬN XÉT
1 Về nội dung đề tài và khối lượng thực hiện:
2 Ưu điểm:
3 Khuyết điểm:
4 Đề nghị cho bảo vệ hay không?
5 Đánh giá loại:
6 Điểm: (Bằng chữ: )
Tp Hồ Chí Minh, ngày tháng năm 2020 Giáo viên phản biện
(Ký và ghi rõ họ tên)
Trang 7Sinh viên thực hiện
Nguyễn Huỳnh Vinh
Trang 8TÓM TẮT
Công nghệ thông tin đang phát triển với tốc độ rất nhanh, và sẽ không xa lạ nếu chúng ta thấy bây giờ có khá nhiều web bán hàng xuất hiện trên thị trường, và cũng không quá bất ngờ nếu bạn đang lướt facebook và xem một chủ đề thì sau đó khi quay lại facebook hàng loạt các tin về chủ để bạn đã xem lúc trước hiện lên, điều đó thật tốt và làm cho người dùng thật sự thích thú Vì những trải nghiệm đó nên em quyết định chọn đề tài ―Xây dựng web bán hàng tích hợp gợi ý sản phẩm đến người dùng‖ giúp cho người mua hàng cảm thấy tiện lợi hơn, được gợi ý những sản phẩm đang quan tâm không cần phải tìm kiếm nhiều, cũng như tăng độ trải nghiệm cho người dùng
Trang 9MỤC LỤC
NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP i
PHIẾU NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN ii
PHIẾU NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN iii
LỜI CẢM ƠN iv
TÓM TẮT v
DANH MỤC HÌNH ix
DANH MỤC BẢNG xi
CHƯƠNG 1 TỔNG QUAN 1
1.1 TỔNG QUAN ĐỀ TÀI 1
1.1.1 Đặt vấn đề 1
1.1.2 Giới thiệu chung 2
1.1.3 Giải pháp 3
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT 4
2.1 Tổng quan công nghê sử dụng 4
2.1.1 Giới thiệu chung 4
2.1.2 Lý do chọn công nghệ 4
2.2 Nodejs 4
2.2.1 Giới thiệu 4
2.3 Express và JavaScript 6
2.3.1 Giới thiệu 6
2.4 Neo4j 9
2.4.1 Giới thiệu 9
2.4.2 Phương pháp, kỹ thuật xử lý đồng thời 14
2.4.3 Nền tảng đồ thị Neo4j ứng dụng 19
2.4.4 Thuật toán tìm đường và tìm kiếm trong đồ thị 20
2.4.5 Ngôn ngữ truy vấn Cypher trong Neo4j 21
2.4.6 Yêu cầu phần cứng và phần mềm 21
2.4.7 Tính mở 22
2.4.8 Giới hạn 23
2.4.9 Ưu nhược điểm 24
Trang 102.5.1 Tổng quan về hệ thống gợi ý 26
2.5.2 Các cách gợi ý 27
CHƯƠNG 3 YÊU CẦU PHẦN MỀM 31
3.1 Xác định yêu cầu 31
3.1.1 Giới thiệu về website 31
3.1.2 Mô tả chức năng 31
3.1.3 Mô tả phi chức năng 32
3.2 Lược đồ Usecase 33
3.2.1 User tổng quan 33
3.2.2 Use Case chi tiết quản lý sản phẩm 34
3.2.3 Use Case chi tiết quản lý danh mục 34
3.2.4 Use Case chi tiết đặt hàng 35
3.2.5 Use Case chi tiết quản lý khách hàng 35
3.2.6 Use Case chi tiết quản lý hóa đơn 36
3.2.7 Use Case Bình luận sản phẩm 36
3.3 Mô tả Usecase 37
3.3.1 Mô tả Use Case đăng ký khách hàng 37
3.3.2 Mô tả Use Case Đăng nhập của khách hàng 37
3.3.3 Mô tả Use Case Mua hàng của khách hàng 37
3.3.4 Mô tả Use Case xem danh sách sản phẩm của khách hàng 39
3.3.5 Mô tả Use Case đăng nhập của Admin 41
3.3.6 Mô tả Use Case quản lý sản phẩm Admin 42
3.3.7 Mô tả Use Case quản lý danh mục Admin 42
3.3.8 Mô tả Use Case quản lý hóa đơn 43
3.3.9 Mô tả Use Case quản lý khách hàng 43
3.3.10 Mô tả Use Case thống kê doanh thu 44
CHƯƠNG 4 THIẾT KẾ HỆ THỐNG 45
4.1 Thiết kệ hệ thống 45
4.1.1 Lược đồ lớp 45
4.1.2 Lược đồ Sequence 45
4.1.3 Lược đồ quan hệ 53
4.1.4 Mô tả thuộc tính các node đại diện 54
4.2 Mô hình gợi ý 56
4.2.1 Xác định mô hình gợi ý : 56
4.2.2 Áp dụng trong hệ thống: 57
Trang 114.3 Thiết kế giao diện : 62
4.3.1 Khách hàng : 62
4.1.2 Admin 71
CHƯƠNG 5 THỰC NGHIỆM, PHÂN TÍCH TỔNG HỢP 75
5.1 Cài đặt ứng dụng 75
5.2 Kiểm thử ứng dụng 75
5.2.1 Kiểm tra chứ năng khách hàng 75
5.2.2 Kiểm tra chức năng admins 77
CHƯƠNG 6 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 83
1 Những kết quả đạt được 83
2 Ưu điểm đề tài 83
3 Hạn chế đề tài 83
4 Hướng phát triển 84
TÀI LIỆU THAM KHẢO 85
Trang 12DANH MỤC HÌNH
Hình 1.1: Mô tả tượng trưng yêu cầu mua hàng 2
Hình 2.1: Mô hình hoạt động nodeJs 5
Hình 2.2: Cấu trúc express 8
Hình 2.3: Ví dụ mô hình lưu dữ liệu neo4j 10
Hình 2.4: Mô hình lưu trữ trong neo4j 12
Hình 2.5: Ví dụ Node trong Neo4j 12
Hình 2.6: Ví dụ lables trong Neo4j 13
Hình 2.7: Ví dụ relationship trong neo4j 14
Hình 2.8: Mô hình ứng dụng đô thị Neo4j 19
Hình 2.9: Ví dụ lọc cộng tác 28
Hình 2.10: Ví dụ về lộc nội dung 29
Hình 2.11: Ví dụ lọc cơ sở tri thức 30
Hình 3.1: Usecase tổng quan 33
Hình 3.2: Usecase quản lý sản phẩm 34
Hình 3.3: Usecase chi tiết quản lý danh mục 34
Hình 3.4: Use Case chi tiết đặt hàng 35
Hình 3.5: Use Case chi tiết quản lý khách hàng 35
Hình 3.6: Use Case chi tiết hóa đơn 36
Hình 3.7: Use Case Bình luận sản phẩm 36
Hình 4.1: Lược đồ quan hệ 45
Hình 4.2: Sequence danh sách sản phẩm 45
Hình 4.3: Sequence thanh toán 46
Hình 4.4: Sequence đăng nhập khách hàng 46
Hình 4.5: Sequence đăng nhập admin 47
Hình 4.6: Sequence danh sách sản phẩm 47
Hình 4.7: Sequence thêm sản phẩm 48
Hình 4.8: Sequence Xóa sản phẩm 48
Hình 4.9: Sequence Sửa thông tin sản phẩm 49
Hình 4.10: Senquence Danh mục 49
Hình 4.11: Sequence thêm danh mục 50
Hình 4.12: Sequence Xóa danh mục 50
Hình 4.13: Sequence Sửa danh mục 51
Hình 4.14: Sequence Quản lý hóa đơn 51
Hình 4.15: Sequence quản lý khách hàng 52
Hình 4.16: Lược đồ quan hệ 53
Hình 4.17: Gợi ý theo nội dung ở trang chủ 57
Hình 4.18:Gợi ý theo nội dung trang chủ sản phẩm nổi bậc 58
Hình 4.19: Gợi ý theo nội dung sản phẩm tương tự trang chi tiết sản phẩm 59
Hình 4 20 Gợi ý theo nội dung trang chủ 60
Hình 4.21 Lọc cộng tác ở trang chủ 61
Hình 4.22 Lọc cộng tác ở trang chủ 62
Hình 4.23 Màn hình trang chủ 1 63
Hình 4.24 Màn hình trang chủ 2 64
Hình 4.25 Màn hình trang chủ 3 65
Hình 4.26 Màn hình trang chủ 4 66
Trang 13Hình 4.27 Màn hình trang chủ 4 67
Hình 4.28 Màn hình giỏ hàng 2 67
Hình 4.29 Màn hình danh sách sản phẩm 68
Hình 4.30 Màn hình chi tiết sản phẩm 69
Hình 4 31 Màn hình thông tin 70
Hình 4.32 Màn hình liên hệ 70
Hình 4 33 Màn hình đăng nhập admin 71
Hình 4.34 Màn hình quản lý sản phẩm 71
Hình 4.35 Màn hình thêm sản phẩm 72
Hình 4.36 Màn hình thêm danh mục 72
Hình 4.37 Màn hình quản lý danh mục 73
Hình 4.38 Màn hình quản lý khách hàng 73
Hình 4.39 Màn hình quản lý hóa đơn 74
Trang 14DANH MỤC BẢNG
Bảng 3.1: Mô tả Use Case đăng ký khách hàng 37
Bảng 3.2: Mô tả Use Case Đăng nhập của khách hàng 37
Bảng 3.3: Mô tả Use Case mua hàng 39
Bảng 3.4: Mô tả Use Case xem danh sách sản phẩm 41
Bảng 3.5: Mô tả Use Case đăng nhập Admin 41
Bảng 3.6: Mô tả Use Case quản lý sản phảm 42
Bảng 3.7: Mô tả Use Case quản lý danh mục 42
Bảng 3.8: Mô tả Use Case quản lý hóa đơn 43
Bảng 3.9: Mô tả Use Case quản lý khách hàng 43
Bảng 3.10: Mô tả Use Case thống kê danh thu 44
Bảng 4.1: Thuộc tính Products 54
Bảng 4.2: Thuộc tính Categories 54
Bảng 4.3: Thuộc tính Customers 55
Bảng 4.4: Thuộc tính Admins 55
Bảng 4.5: Thuộc tính Orders 55
Bảng 4.6: Thuộc tính Comments 56
Bảng 4.7: Thuộc tính Campains 56
Bảng 5.1 Kiểm tra đăng nhập khách hàng 76
Bảng 5.2 Kiểm tra đăng ký 77
Bảng 5.3 Kiểm tra đăng nhập admin 78
Bảng 5.4 Kiểm tra thêm sản phẩm 80
Bảng 5.5 Kiểm tra thêm danh mục 82
Trang 15- Rất lâu rồi facebook hay youtube, Ebay, Amazon, Netflix đã có chức năng gợi
ý người dùng, dựa vào chủ đề mà người dùng click và xem, cũng như thời gian người dùng xem, hay dựa vào thông tin của người dùng như địa chỉ, tuổi, giới tính
mà có những gợi ý phù hợp, giúp cho người dùng có trải nghiệm tốt hơn, thích thú hơn khi sử dụng
- Đa số các website bán hàng hiện tại chưa có hệ thống phân tích gợi ý người dùng hay chức năng gợi ý người dùng cũng như có các giải pháp về trải nghiệm người dùng như lưu lại giỏ hàng hay lưu lại những sản phẩm đã xem nhưng cũng chưa thật sự đem lại trải nghiệm tốt hơn cho người dùng
Trang 16Hình 1.1: Mô tả tượng trưng yêu cầu mua hàng
- Do đó tại sao chúng ta không tích hợp hệ gợi ý người dùng cho một web bán hàng? Với nó, phần nào làm tăng giá trị web của doanh nghiệp, cũng như tăng tỉ lệ thành công hơn khi khách hàng khi đến với web, cũng tăng trải nghiệm cho người dùng tốt hơn
1.1.2 Giới thiệu chung
- Đề tài em chọn là ―Xây dựng web bán hàng tích hợp gợi ý sản phẩm đến người dùng‖ em chọn cũng vì những lý do trên, bên cạnh đó cũng vì em muốn trải nghiệm một công nghệ mới lạ với nhiều thử thách mới, để trau dồi bản thân
- Ứng dụng Web sẽ hoạt động gồm các chức năng : đăng nhập mua hàng, xem hàng, tìm kiếm sản phẩm, thêm sản phầm vào giỏ hàng Phần quản trị sẽ có phần quản lý sản phẩm, quản lý khách hàng, quản lý thể loại, quản lý hóa đơn
- Phần chính quan trọng là gợi ý cho người dùng, dựa vào thông tin tài khoản của người dùng có những thông tin về tuổi, tùy vào từng loại thông tin và ngữ cảnh thì sẽ có những sản phẩm phù hợp để gợi ý Đối với những tài khoản đã mua hàng thì sẽ gợi ý theo những sản phẩm đã mua và những loại sản phẩm tương tự, và cũng gợi ý theo hành vi của người dùng dựa vào lượt click vào sản phẩm, hay thời gian xem sản phẩm
Trang 17- Khách hàng sẽ được gợi ý những mặt hàng mà họ đang quan tâm mỗi khi họ quay lại hệ thống, giúp họ nhìn thấy ngay những sản phẩm họ đang quan tâm trên web
1.1.3 Giải pháp
- Để giải quyết bài toán này, hệ thống gợi ý trong đồ án này sẽ sử dụng kết hợp hai phương pháp gợi ý là đối sánh mẫu và phản hồi người dùng
- Về tổng quan hệ thống gợi ý sẽ được chia làm hai pha:
Danh sách gợi ý ban đầu: Trong phiên gợi ý này hệ thống sẽ dựa trên lịch sử phản hồi người dùng để đưa ra gợi ý Phiên này, hệ thống sử dụng phương pháp gợi ý đối sánh mẫu
Gợi ý dựa trên phản hồi người dùng: Trong phiên gợi ý này người dùng sẽ phản hồi lại các thuộc tính của sản phẩm mà người dùng mong muốn Từ đó hệ thống gợi ý
sẽ xử lý dữ liệu để tìm ra những sản phẩm phù hợp nhất với yêu cầu người dùng Người dùng phản hồi các thuộc tính một cách trực tiếp các thuộc tính dựa trên các thuộc tính mà người dùng đang xem Hệ thống sẽ sử dụng kết hợp hai phương pháp gơi ý là đối sánh mẫu và phản hồi người dùng
Trang 18CHƯƠNG 2 CƠ SỞ LÝ THUYẾT
2.1.1 Giới thiệu chung
Xây dựng web:
+ back end : Nodejs, expressJs, Javascript
+ font end : ejs, html, css, bootraps, jquery
+ database : neo4j
2.1.2 Lý do chọn công nghệ
Nodejs là công nghệ sử dụng phù hợp cho các ứng dụng, web cần sự tương tác nhanh với người dùng,với cộng đồng phát triền mạnh mẽ đa số các vấn đề trong lập với Nodejs đều được giải quyết
Neo4j là cơ sở dữ liệu đồ thị mạnh mẽ trong phần gợi ý người dùng, mạng xã hội
2.2.1 Giới thiệu
Node.js là một nền tảng chạy trên môi trường V8 JavaScript runtime - một trình thông dịch JavaScript cực nhanh chạy trên trình duyệt Chrome Bình thường thì bạn cũng có thể tải bộ V8 và nhúng nó vào bất cứ thứ gì, Node.js làm điều đó đối với các web server JavaScript suy cho cùng cũng chỉ là một ngôn ngữ - vậy thì không có lý
do gì để nói nó không thể sử dụng trên môi trường server tốt như là trong trình duyệt của người dùng được
Trong một môi trường server điển hình LAMP (Linux-Apache-MySQL-PHP), bạn có một web server là Apache hoặc NGINX nằm dưới, cùng với PHP chạy trên
nó Mỗi một kết nối tới server sẽ sinh ra một thread mới, và điều này khiến ứng dụng nhanh chóng trở nên chậm chạp hoặc quá tải - cách duy nhất để hỗ trợ nhiều người dùng hơn là bằng cách bổ sung thêm nhiều máy chủ Đơn giản là nó không có khả
Trang 19Hình 2.1: Mô hình hoạt động nodeJs
năng mở rộng tốt Nhưng với Node.js thì điều này không phải là vấn đề Không có một máy chủ Apache lắng nghe các kết nối tới và trả về mã trạng thái HTTP - bạn sẽ phải tự quản lý kiến trúc lõi của máy chủ đó May mắn thay, có một số module giúp thực hiện điều này được dễ dàng hơn, nhưng công việc này vẫn gây cho bạn một chút khó khăn khi mới bắt đầu Tuy nhiên, kết quả thu được là một ứng dụng web có tốc độ thực thi cao
Cách thức hoạt động
Cứ mỗi request tới sẽ đưa vào một hàng đời,event loop trong nodejs luôn hoạt động để bắt lấy, và những yêu cầu đó sẽ được xử lý đo lường xem đó có phải là một tiến trình bất đồng bộ không.Nếu là bất động bộ thì sẽ cấp một thread pool đóng vai
Trang 20event loop và trả về cho người gửi Đối với những yêu cầu không bất đồng bộ sẽ được sử lý ngay và trả về kết quả cho người gửi
có nhiều các thức đồng bộ (ví dụ : promise, async await, arrow function),vv Và đang được cập nhật hàng ngày.Bên cận đó có cộng đồng phát triển mạnh mẽ
Theo thống kê của https://csc.edu.vn trên các nguồn như StackOverflow TIOBE, PYPL, GitHub, thì javascript là ngôn ngữ nằm trong top phổ biến nhất JavaScript được tiêu chuẩn hóa tại Ecma International — the European association for standardizing information and communication systems, Liên kết Châu Âu cho các tiêu chuẩn hóa hệ thống thông tin và truyền thông (ECMA trước đây là viết tắt cho the European Computer Manufacturers Association) cung cấp một tiêu chuẩn hóa, nền tảng ngôn ngữ lập trình mở quốc tế lên JavaScript Phiên bản đã tiêu chuẩn hóa của JavaScript được gọi là ECMAScript, làm việc giống với cái cách mà tất cả ứng dụng đã được hỗ trợ theo tiêu chuẩn Các công ty có thể sử dụng tiêu chuẩn ngôn ngữ mở (open standard language) để phát triển các implementation của JavaScript riêng cho họ Tiêu chuẩn ECMAScript là tài liệu nằm trong tiêu chuẩn ECMA-262 (ECMA-262 specification) JavaScript thường được nhúng trực tiếp vào một trang web hoặc được tham chiếu qua file js riêng Nó
là ngôn ngữ phía client, tức là script được tải về máy của khách truy cập và được xử
lý tại đó thay vì phía server là xử lý trên server rồi mới đưa kết quả tới khách truy cập
Trang 21JavaScript thường được nhúng trực tiếp vào một trang web hoặc được tham chiếu qua file js riêng Nó là ngôn ngữ phía client, tức là script được tải về máy của khách truy cập và được xử lý tại đó thay vì phía server là xử lý trên server rồi mới đưa kết quả tới khách truy cập
JavaScript và Java thì giống nhau ở những cái này nhưng lại khác nhau ở cái khác Ngôn ngữ JavaScript có lẽ giống giống với ngôn ngữ Java nhưng JavaScript không có khai báo static cũng như không kiểm tra kiểu mạnh (strong type checking) như Java Cú pháp lập trình, đặt tên công thức và xây dựng dòng điều khiển (control-flow) cơ bản của JavaScript phần lớn dựa theo ngôn ngữ lập trình Java, đó cũng là lý do tại sao JavaScript được đổi tên từ LiveScript thành JavaScript
Ngược lại với hệ thống thời gian biên dịch (compile-time) Java của các lớp được xây dựng bởi các khai báo, JavaScript hỗ trợ nền tảng hệ thống thời gian chạy dựa trên một số lượng nhỏ các loại dữ liệu đại diện cho số, boolean và dữ liệu các chuỗi JavaScript có một mô hình ít phổ biến hơn là mô hình đối tượng dựa trên nguyên mẫu ( prototype-based ) thay vì các mô hình đối tượng dựa trên lớp (class-based) Các mô hình dựa trên nguyên mẫu cung cấp khả năng thừa kế năng động; nghĩa là, những gì được kế thừa có thể khác nhau cho các đối tượng khác nhau JavaScript cũng hỗ trợ các phương thức (function) không khai báo bất cứ gì ở trong Phương thức có thể là một trong các thuộc tính (property) của các đối tượng, thực thi như là một phương thức đã được định kiểu (loosely typed methods) JavaScript là một ngôn ngữ rất tự do so với Java Bạn có thể không cần khai báo tất cả biến (variable), lớp (class) và cả phương thức (method) Bạn không cần quan tâm cho dù phương thức đó là public, private hoặc protected, và bạn không cần phải implement interfaces Biến, tham số (parameters), và kiểu trả về của phương thức (function return) cũng không cần phải rõ ràng
-Express: Đây là một framework dựa trên ngôn ngữ javascript, nên tảng NodeJs để xây dựng, framework này hổ trợ các phương thức http, midleware,
Trang 22Express js là một Framework nhỏ, nhƣng linh hoạt đƣợc xây dựng trên nền tảng của Nodejs Nó cung cấp các tính năng mạnh mẽ để phát triển web hoặc mobile
Về các package hỗ trợ: Expressjs có vô số các package hỗ trợ nên các bạn không phải lo lắng khi làm việc với Framework này
Về performance: Express cung cấp thêm về các tính năng (feature) để dev lập trình tốt hơn Chứ không làm giảm tốc độ của NodeJS
Và hơn hết, các Framework nổi tiếng của NodeJS hiện nay đều sử dụng ExpressJS nhƣ một core function, chẳng hạn: SailsJS, MEAN,
Cấu trúc Express :
Hình 2.2: Cấu trúc express
dụng của chúng ta chạy ok
Trang 23 Folder public chứa các file css, js, images, cho ứng dụng
Tìm hiểu các khái niệm trong express :
Tìm hiều về Router trong ExpressJS
Router là một Object (khác Routing), nó là một instance riêng của middleware và routes Chính vì nó là một instance của middleware và route nên
nó có các chức năng của cả hai Chúng ta có thể gọi nó là một mini-application
Các Application dùng ExpressJS làm core đều có phần Router đƣợc tích hợp sẵn trong đó Router hoạt động nhƣ một middleware nên chúng ta có thể dùng nó nhƣ một arguments Hoặc dùng nó nhƣ một arguments cho route khác Nghe có vẻ khó hiểu đúng không nào Chúng ta cũng có thể sử dụng Router để chia route
Request và Response trong ExpressJS
Request : Biểu diễn một HTTP request, và có các thuộc tính cho các request
nhƣ các chuỗi truy vấn, tham số, HTML
Response : Biểu diễn HTTP response đƣợc ứng dụng Express gửi đi khi nó
Trang 24Neo4j là hệ quản trị cơ sở dữ liệu đồ thị đầu tiên được giới thiệu vào năm
2007 và công bố phiên bản 1.0 vào năm 2010 Hiện nay neo4j là một trong những
hệ quản trị cơ sở dữ liệu đồ thị được sử dụng nhiều nhất
Nếu như cơ sở dữ liệu quan hệ như SQLServer, MySQL, Oracle, một đối tượng như MonHoc (subject) với các đặc điểm của đối tượng (properties) được mô
tả bằng một Bảng dữ liệu gồm nhiều cột với tên Bảng là tên của đối tượng, các cột trong Bảng mô tả đặc điểm của đối tượng Mối quan hệ giữa các đối tượng được xây dựng bằng cách ghi nhận thông tin của thực thể cha vào thực thể con
Đối với neo4j đối tượng được mô tả thành các đỉnh của đồ thị, đặc điểm của đối tượng được mô tả qua thuộc tính của đỉnh và mối quan hệ giữa các đối tượng được mô tả bằng liên kết có hướng giữa các đỉnh
―Graphs are one of the unifying themes of computer science—an abstract representation that describes the organization of transportation systems, human interactions, and telecommuni‐ cation networks That so many different structures can be modeled using a single formalism is a source of great power to the educated programmer.‖ (Steven S Skiena, Stony Brook Uni.)
Hình 2.3: Ví dụ mô hình lưu dữ liệu neo4j
Trang 25Phát biểu trên ta cũng thấy được tầm quan trọng hiện tại của ứng dụng đồ thị vào trong lập trình
Hiện nay, hầu hết các thách thức dữ liệu xoay quanh các mối quan hệ, không chỉ lập Bảng dữ liệu rời rạc Công nghệ đồ thị và phân tích cung cấp các công cụ mạnh mẽ để kết nối dữ liệu được sử dụng trong nghiên cứu, sáng kiến xã hội và giải pháp kinh doanh như:
o Mô hình hóa môi trường năng động từ thị trường tài chính đến dịch vụ CNTT
o Dự báo sự lây lan của dịch bệnh cũng như sự chậm trễ và ngừng dịch vụ của Ripple
o Tìm các tính năng dự đoán cho máy học để chống lại tội phạm tài chính
o Khám phá các mẫu cho các trải nghiệm và đề xuất được cá nhân hóa
Khi dữ liệu ngày càng kết nối với nhau và các hệ thống ngày càng tinh vi, nó rất cần thiết để sử dụng các mối quan hệ phong phú và phát triển trong dữ liệu
- Neo4j là cơ sở dữ liệu dạng đồ thị nên mô hình lưu trữ, cấu trúc lưu trữ và đối tượng mang đặc điểm của cơ sở dữ liệu dạng đồ thị nói chung Tức là Neo4j lưu trữ dữ liệu trên các nút (node), xây dựng lên các cấu trúc dữ liệu khác nhau bằng các relationships
Trang 26Hình 2.4: Mô hình lưu trữ trong neo4j
2.4.1.1 Node trong Neo4j
Nodes thường được sử dụng để biểu diễn các thực thể (entities) Đồ thị đơn giản nhất là đồ thị mà trong đó chỉ có duy nhất một node
Hình 2.5: Ví dụ Node trong Neo4j
Trang 272.4.1.2 Labels trong Neo4j
Labels có thể được sử dụng để mô hình hóa miền giá trị của các node, thông
thường chúng ta sẽ gộp nhóm các node có cùng kiểu dữ liệu hoặc là thuộc tính thành một tập hợp rồi sau đó gắn label vào cho chúng Ví dụ, tất cả những nodes mà biểu diễn cho một đối tượng là users thì có thể được gắn labels là :Users Lúc này bạn có thể thuận tiện làm việc với neo4j thông qua các nodes đã được gắn labels này, chẳng hạn như là tìm tất cả các users có tên khớp với ABC,
Mỗi một node thì có thể có một hoặc nhiều lables, ở hình vẽ 2 5 các nodes sẽ
có các nhãn tương ứng là Person và Movie Ta có thể thấy mỗi một nhãn lúc này sẽ biểu diễn một lớp đối tượng khác nhau Muốn biểu diễn thêm những chiều khác nhau của dữ liệu, có thể thêm labels vào cho các nodes Hình vẽ phía bên dưới sẽ minh họa rõ hơn cho việc sử dụng nhiều labels cho cùng một node
Hình 2.6: Ví dụ lables trong Neo4j
2.4.1.3 Relationships trong Neo4j
Relationships đúng như cái tên của nó đó là sẽ biểu mối quan hệ, hay liên kết
giữa các node với nhau Ngoài ra relationship còn có thể cấu trúc phân chia các nodes thành những cấu trúc khác nhau, biến đồ thị thành các dạng cấu trúc giống như là list, tree, map, hoặc có thể là thực thể phức hợp (compound entity) Thực thể phức hợp là thực thể có nhiều liên kết phức tạp liên kết với nhau
Các relationships sẽ giúp cho đồ thị sẽ có ý nghĩa hơn, gẫn gũi với bài toán thực tế hơn
Trang 28Hình 2.7: Ví dụ relationship trong neo4j
2.4.1.4 Properties trong Neo4j
Properties là một cặp name-value, được dùng để biểu diễn cho các thuộc tính
của các nodes cũng như là các relationships Các property có thể lưu trữ các kiểu
dữ liệu đa dạng khác nhau như là number, string và boolean với các miền giá trị
tương ứng
2.4.1.5 Traversal trong Neo4j
Traversal của một đồ thị nghĩa là duyệt qua các nút của nó, kế tiếp các mối quan hệ theo một số quy tắc Trong nhiều trường hợp chỉ là một đồ thị con được truy cập, tìm thấy các nút và các mối quan hệ của nó
2.4.2 Phương pháp, kỹ thuật xử lý đồng thời
2.4.2.1 Traversal trong Neo4j
Để duy trì tính đầy đủ và toàn vẹn dữ liệu và đảm bảo hành vi transaction tốt, Neo4j hỗ trợ thuộc tính ACID :
Atomicity : bất kỳ một transaction nào không thành công trạng thái cơ sở dữ liệu không thay đổi
Consistency (tính thống nhất): bất kỳ một transaction nào đều để lại một cơ
sở dữ liệu thống nhất
Trang 29 Isolation (tính đọc lập): trong một transaction, dữ liệu đƣợc sửa đổi không thể đƣợc truy cập bởi các operator khác
Durability: DBMS luôn luôn có thể phục hồi một kết quả mà transaction đã đƣợc commited
Các lock đƣợc cài đặt ở mức độ Node và quan hệ
Phát hiện bế tắc đƣợc xây dựng trong quản lý transaction lõi
2.4.2.2 Interaction
Tất cả các lệnh ghi làm việc với đồ thị phải đƣợc thực hiện trong 1 transaction Transaction là 1 luồng giới hạn và đƣợc lồng vào nhau nhƣ ―flat nested transactions‖ flat nested transaction có nghĩa là các nested transactions đƣợc thêm phạm vi transaction cao nhất Nested transactions có thể đƣợc đánh giấu là transaction cấp cao cho việc rollback, có nghĩa là tất cả transaction sẽ đƣợc rollback
Chu kì thực hiện 1 transaction có chu kì nhƣ sau:
- Bắt đầu transaction
- Thực hiện các hoạt động cơ sở dữ liệu
- Đánh dấu transaction thành công hoặc không thành công
Trang 30Transaction sẽ không giải phóng lock hay bộ nhớ cho đến khi nó được hoàn thành Transaction sẽ được commit hay rollback tùy thuộc vào trạng thái thành công hoặc không thành công
Tất cả các thay đổi của Transaction đều được lưu trong bộ nhớ Điều này có nghĩa là các cập nhập lớn sẽ được chia thành các transaction cấp cao để tránh tràn
bộ nhớ Nó phải là transaction cấp cao nhất trước khi chia công việc thành các nested transaction có thể thêm các công việc vào transaction cấp cao nhất
2.4.2.3 Isolation levels
Theo như mặc định một lệnh đọc sẽ đọ các giá trị được commit cuối cùng, trừ khi một thay đổi bên trong transaction hiện tại là tồn tại Mức độ cô lập mặc định giống với READ_COMMITTED: Đọc không chặn hay thực thi các lock vậy thì việc không lặp lại các lần đọc có thể xảy ra Nó có thể đạt được mức độ tách biệt cao hơn (REPETABLE_READ, SERIALIZABLE) bằng cách thủ công được đọc và viết locks
2.4.2.4 Default locking behavior
Khi bổ xung, thay đổi, hay loại bỏ một giá trị trên node hoặc quan hệ một ghi lock sẽ được thực trên các node, quan hệ cụ thể
Khi xóa, tạo một node một ghi lock sẽ được thực thi cho một node, quan hệ cụ thể
Khi xóa, tạo 1 mối quan hệ một ghi lock sẽ được thực thi trên các quan hệ cụ thể, và các nút của nó
Các lock sẽ được thêm vào các transaction và được giải phóng khi transaction kết thúc
2.4.2.5 Deadlocks
Khi các lock được sử dụng – bế tắc có thể xảy ra Neo4j tự động phát hiện các
bế tắc trước khi chúng xảy ra và ném ra ngoại lệ Trước khi ngoại lệ được ném, các
Trang 31transaction được đánh dấu để rollbacks Tất cả các locks sẽ được dữ bởi các
transactions nhưng được giải phóng khi chúng kết thúc
Một khi các lock được giải phóng, các transaction đang đợi lock được giữ bởi các transaction gây ra bế tắc: được tiến hành Các transation gây ra bế tắc có thể được dùng lại bởi người sử dụng nếu cần thiết
Các bế tắc xảy ra thường xuyên là dấu hiệu của các yêu cầu ghi đồng thời xảy
ra cùng 1 lúc mà nó không thể thực hiện chúng trong 1 thời gian mà có thể đảm bảo tính độc lập và thống nhất Giải pháp là để đảm bảo đồng thời xảy ra 1 cách hợp lý
Ví dụ: cho 2 node cụ thể A, B thêm hoặc xóa quan hệ của 2 node này 1 cách ngẫu nhiên cho mỗi transaction có thể dẫn đến sự bế tăc khi có 2 hoặc nhiều hơn transaction thực hiện chúng đồng thời Một giải pháp là để cho cập nhập được xảy
ra theo 1 thứ tự đứng trước ( vd: A rồi B) Một giải pháp khác là để đảm bảo cho mỗi luồng/transaction không có bất kì xung đột khi ghi vào node hay quan hệ như một số giao dịch đồng thời khác Một ví dụ có thể đạt được điều này : Cho phép 1 luồng duy nhất làm cho tất cả các bản cập nhập có thể
Bế tắc gây ra bởi: sự đồng bộ đồng bộ hóa khác với quản lý lock bởi Neo4j:
có thể xảy ra Vì tất cả các hoạt động trong Neo4j API là luồng an toàn trừ khi có quy định khác, không cần có sự đồng bộ hóa bên ngoài.Một số code đòi hỏi sự đồng bộ phải được đồng bộ bởi 1 cách mà nó không được sử dụng các operator của Neo4j trong khối đồng bộ
Trang 32http://docs.neo4j.org/chunked/milestone/ha.html) và triển khai đơn Chẳng hạn:
- Luồng đơn: Bằng cách sử dụng 1 luồng đơn , không có 2 luồng cùng tạo 1 thực thể đặc biệt cùng 1 lúc Trên HA, một luồng đơn bên ngoài có thể thực hiện các toán tử trên cụm
- Get hoặc Create: Bằng cách sử dụng chức năng put-if-absent, thực thể duy nhất có thể đƣợc đảm bảo sử dụg 1 index Index hoạt động nhƣ lock và chỉ khóa 1 phần nhỏ cần thiết đê đảm bảo tính độc nhất của transaction và luồng
- Pessimistic locking
2.4.2.8 Transaction event
Transaction event có thể đƣợc đăng ký để nhận các sự kiện transaction Đăng
ký tại GraphDatabaseService nó sẽ nhận đƣợc sự kiện xảy ra ở mỗi transaction đã commit Handler không lấy các thông báo về transaction đã không thực hiện bất kì
hoạt động ghi hay chƣa commit (hoặc Transaction#success() được không được gọi
Trang 33hoặc transaction được đánh giấu là thất bại Transaction#failure() Trước khi
Transaction được commit phương thức beforeCommit được gọi với toàn bộ sự sai khác trong transaction) Tại thời điểm này các transaction đang chạy để thay đổi
vẫn có thể được thực hiện Tuy nhiên không có gì đảm bảo rang các xử lý khác sẽ thấy những thay đổi như vậy vì thứ tự xử lý là không xác định Phương thức này có thể ném 1 ngoại lệ, trong trường hợp này sẽ không cho các Transaction được
commit (rollback sẽ được áp dụng tiếp theo đó) Nếu beforeCommit được thực hiện thành công các Transaction sẽ được thực hiện và phương thức afterCommit sẽ được gọi cùng với 1 dữ liệu transaction như trước giống như đối tượng được trả về bởi beforeCommit Điều này đi với giả định là các xử lý khác cũng được thực hiện beforeCommit thành công
2.4.3 Nền tảng đồ thị Neo4j ứng dụng
Nền tảng đồ thị Neo4j hỗ trợ xử lý giao dịch và xử lý phân tích dữ liệu đồ thị
Nó bao gồm lưu trữ đồ thị và tính toán với công cụ quản lý dữ liệu và phân tích Tập hợp các công cụ tích hợp nằm trên một giao thức chung, API và ngôn ngữ truy vấn (Cypher) để cung cấp quyền truy cập hiệu quả cho các mục đích sử dụng khác nhau, như được hiển thị
Hình 2.8: Mô hình ứng dụng đô thị Neo4j
Trang 342.4.4 Thuật toán tìm đường và tìm kiếm trong đồ thị
Các thuật toán tìm kiếm biểu đồ tốt sẽ bao gồm Breadth First Search và Depth First Search vì chúng là cơ bản để duyệt qua biểu đồ và là bước đầu tiên cần thiết cho nhiều loại phân tích khác.Neo4j dựa trên các thuật toán này để tìm kiếm đối tượng
Các thuật toán tìm đường được xây dựng dựa trên các thuật toán tìm kiếm đồ thị và khám phá các tuyến đường giữa các nút, bắt đầu tại một nút và đi qua các mối quan hệ cho đến khi đích đến đã đạt được Các thuật toán này được sử dụng để xác định các tuyến tối ưu thông qua một biểu đồ để sử dụng như lập kế hoạch hậu cần, gọi điện hoặc định tuyến IP ít nhất và mô phỏng game
Các thuật toán tìm đường bao gồm:
•Shortest Path( Đường dẫn ngắn nhất), với hai biến thể hữu ích (A * và Yen Vòng): tìm đường đi ngắn nhất hoặc đường dẫn giữa hai nút được chọn
•All Pairs Shortest Path and Single Soure Shortest Path (Tất cả các cặp Đường dẫn ngắn nhất và Đường dẫn ngắn nhất một nguồn): để tìm
đường dẫn ngắn nhất giữa tất cả các cặp hoặc từ một nút được chọn đến tất cả các cặp khác
• Minimum Spanning Tree(cây bao trùm tối thiểu): để tìm cấu trúc cây được kết nối với cấu trúc cây nhỏ nhất
chi phí cho việc truy cập tất cả các nút từ một nút được chọn
•Ramdom Walk ( Bước ngẫu nhiên): tìm dữ liệu một cách ngẫu nhiên
Các thuật toán trung tâm :
PageRank
Các thuật toán xác định cộng đồng :
Louvain
Trang 35Lable Propagation
Weakly
Thuật toán Similarty (tương tự) : Node Similarty
Thuật toán Auxiliaty : K-1 Coloring
2.4.5 Ngôn ngữ truy vấn Cypher trong Neo4j
Cypher là một ngôn ngữ truy vấn cơ sở dữ liệu đồ thị, với ngôn ngữ này chúng
ta có thể tương tác như là truy vấn, cập nhập hay là quản trị một cách hiệu quả với
cơ sở dữ liệu đồ thị Ngôn ngữ này được thiết kế giúp cho develper cũng như là các chuyên gia có thể thuận tiện khi làm việc với neo4j Cypher vốn được thiết kế đơn giản, tuy nhiên nó rất mạnh mẽ
Cypher được lấy cảm hứng từ rất nhiều các cách tiếp cận khác nhau, một số các
từ khóa như là WHERE, ORDER BY được lấy cảm hứng từ ngôn ngữ SQL, trong
khi đó pattern matching thì lại được mượn từ SPARQL Ngoài ra một vài ngữ nghĩa thì lại được mượn từ các ngôn ngữ khác như là Haskell và Python Cấu trúc của Cypher được xây dựng dựa trên ngôn ngữ Tiếng Anh với ngữ nghĩa thuận tiện cho người thao tác với ngôn ngữ, điều này giúp cho việc viết và đọc các câu query cũng
dễ dàng hơn
2.4.6 Yêu cầu phần cứng và phần mềm
- CPU: Hiệu suất thông thường phụ thuộc vào bộ nhớ hoặc Input/Output của
đồ thị dữ liệu Sự tính toán bộ nhớ phải phù hợp với đồ thị đó
+ Tối thiểu: Intel 486 (Cho version v1.9.M04 và các phiên bản cũ hơn); core i3 (Cho version từ 1.9.5 trở lên )
+ Khuyến cáo nên dùng: Intel core i7
- Bộ nhớ: Bộ nhớ có lớn sẽ thuận lợi với dữ liệu lớn nhưng bên cạnh đó cũng
là vấn đề là việc thu lại những phần chứa dữ liệu không có ý nghĩa ( kiểu như phân mảnh dữ liệu tốn tài nguyên để quản lý cái phân mảnh này)
Trang 36+ Bộ nhớ tối thiểu: 1GB (Cho version v1.9.M04 và các phiên bản cũ hơn); 2GB (Cho version từ 1.9.5 trở lên)
+ Bộ nhớ khuyến cáo: 4 – 8GB (Cho version v1.9.M04 và các phiên bản cũ hơn); 16-32GB (Cho version từ 1.9.5 trở lên)
- Ổ đĩa: Bên cạnh đó việc chọn ổ đĩa cũng có ảnh hưởng lớn tới hiệu suất lưu trữ
+ Tối thiểu: Ổ cứng kiểu SCSI, EIDE.( Cho version v1.9.M04 và các phiên bản cũ hơn); 10GB SATA (Cho version từ 1.9.5 trở lên)
+ Khuyến cáo: Ổ cứng SSDw/SATA
- Định dạng Filesystem:
+ Tối thiểu: ext3 hoặc tương đương
+ Khuyến cáo: ext4, ZFS (ZFS là một hệ thống tập tin kết hợp và quản lý hợp
lý được thiết kế bởi Sun Microsystems Các tính năng của ZFS bao gồm bảo vệ chống lại dư thừa dữ liệu, hỗ trợ cho khả năng lưu trữ cao, nén dữ liệu hiệu quả, tích hợp các khái niệm về hệ thống tập tin và quản lý khối lượng, snapshots và nhân bản copy-on-write clones nhanh, kiểm tra tính toàn vẹn liên tục và tự động sửa chữa.)
Hoạt động trên Linux, UX, Windows XP, Mac OS X để phát triển
2.4.7 Tính mở
Neo4j là một dự án mã nguồn mở có sẵn trong một phiên bản Community GPLv3, với các phiên bản nâng cao và doanh nghiệp có sẵn theo cả giấy phép AGPLv3 và thương mại, được hỗ trợ bởi công nghệ Neo
Do Neo4j được thiết kế dưới dạng các đối tượng lưu trữ như node và liên kết nhau bởi quan hệ (relationships) nên nó trở thành cơ sở dữ liệu cực kì linh hoạt, điều này làm tăng tính mở của nó đối với người dùng Theo đó, người dùng hoàn toàn có thể xây dựng một cấu trúc dữ liệu lưu trữ cho riêng mình tùy vào mục đích
sử dụng, thậm chí có thể thông qua nó để xây dựng một csdl riêng
Trang 37Cho phép các plug-in bên ngoài đã được cấu hình trước, hoặc thêm mã nguồn
mở rộng từ người dùng để biến thành CSDL của riêng mình
2.4.8 Giới hạn
2.4.8.1 Kích thước file
Neo4j sử dụng hệ thống vào ra không chia theo khối của Java cho việc xử lý file Ngoài ra, trong khi bố cục file lưu trí được tối ưu hóa cho các dữ liệu kết nối lẫn nhau, thì Neo4j không yêu cầu các thiết bị thô Vì vậy, kích thước file chỉ giới hạn bằng việc nằm dưới dung lượng của hệ điều hành để xử lý dung lượng trong Neo4j
Neo4j cố gắng ánh xạ bộ nhớ càng nhiều file lưu trữ nằm dưới càng tốt Nếu
số RAM sẵn có không đủ để giữ toàn bộ dữ liệu trong RAM, thì Neo4j sẽ sử dụng
bộ nhớ đệm, chỉ định lại việc ánh xạ bộ nhớ
2.4.8.2 Tốc độ đọc
Neo4j sử dụng hệ thống vào ra không chia theo khối của Java cho việc xử lý file Ngoài ra, trong khi bố cục file lưu trí được tối ưu hóa cho các dữ liệu kết nối lẫn nhau, thì Neo4j không yêu cầu các thiết bị thô Vì vậy, kích thước file chỉ giới hạn bằng việc nằm dưới dung lượng của hệ điều hành để xử lý dung lượng trong Neo4j
Neo4j cố gắng ánh xạ bộ nhớ càng nhiều file lưu trữ nằm dưới càng tốt Nếu
số RAM sẵn có không đủ để giữ toàn bộ dữ liệu trong RAM, thì Neo4j sẽ sử dụng
Trang 38- Truy cập lớn ( như backup hay tải file khởi tạo )
Để hỗ trợ các yêu cầu khác nhau của các kịch bản này, Neo4j hỗ trợ 2 mô hình ghi vào lớp lưu trữ
Trong giao tác, các lệnh bình thường phù hợp với ACID, thì mức độ cô lập được duy trì và các lệnh đọc có thể xảy ra cùng thời điểm với tiến trình ghi Tại mỗi giao tác, dữ liệu vẫn tiếp tục trong đĩa cứng và có thể được khôi phục về một tráng thái cố định khi có sự cố hệ thống Điều này yêu cầu việc truy cập ghi đĩa và làm phẳng dữ liệu Vì vậy, tốc độ ghi của Neo4j trong các server đơn tại chế độ liên tục
bị giới hạn bởi dung lượng vào ra của phần cứng Kết quả là, việc sử dụng các ổ SSD tốc độ cao được đề xuất
Neo4j có một bộ cài Batch mà thi hành trực tiếp các file lưu trữ Chế độ này không yêu cầu bảo mật giao tác, vì vậy có thể được sử dụng khi có một luồng ghi đơn Vì dữ liệu được ghi là tuần tự, và không phẳng đối với các nhật ký logic, việc tăng hiệu năng lớn có thể xảy ra Bộ cài Batch được tối ưu hóa cho việc import lượng lớn dữ liệu không giao tác
2.4.9 Ưu nhược điểm
Ưu điểm :
Có tất cả ưu điểm của hệ NoSQL:
+ Cho phép dễ dàng mở rộng Các dịch vụ dữ liệu mới dựa trên khả năng mở rộng cấu trúc, được xây dựng cho các đám mây để phân phối
+ Khắc phục vấn đề của mô hình cơ sở dữ liệu RDBMS về tốc độ, tính năng, khả năng mở rộng, memory cache,
+ Tập hợp dữ liệu thực sự lớn
Có ưu điểm chung của Graph Database:
+ Mô hình dữ liệu mạnh mẽ, tổng quát như RDBMS
+ Kết nối dữ liệu nhanh
Trang 39+ Dễ dàng truy vấn
Có ưu điểm riêng:
+ Neo4j là một cơ sở dữ liệu đồ thị với đầy đủ tính chất ACID(Atomicity, Consistency, Isolation, Durability), đảm bảo phát hiện và xử lí khi bế tắc xảy ra + Có một hiệu suất cao, cơ sở dữ liệu đồ thị NoSQL với tất cả các tính năng của một cơ sở dữ liệu có độ trưởng thành và mạnh mẽ
+ Khả năng mở rộng: Dự đoán được khả năng mở rộng, bằng cách đảm bảo rằng tất cả các truy vấn chạy với hiệu suất tối đa
+ Tính sẵn sàng cao
+ Tăng đáng kể chu kì phát triển
+ Nhờ sử dụng mô hình dữ liệu linh hoạt, một ngôn ngữ truy vấn đồ thị trực quan, nên Neo4J dễ dàng sử dụng
+ Dễ ánh xạ tự nhiên đồ thị sang một ngôn ngữ hướng đối tượng như: Ruby, Java, PHP, Python, …
+ Cơ sở dữ liệu nhúng: không chia cấp cơ sở dữ liệu, dễ cài đặt, cấu hình, triển khai
+ Neo4j cung cấp đầy đủ trang bị, cũng được thiết kế và tài liệu giao diện với truy cập thực thể tự động
+ Gồm nhiều thư viện và mở rộng cho các hoạt động biểu đồ mạnh như traversals, xác định con đường ngắn nhất, chuyển đổi, dịch chuyển
+ Cũng bao gồm các trigger, được gọi khi xử lý sự kiện giao dịch
+ Neo4j kết nối xử lý các truy vấn dữ liệu nhanh hơn hàng ngàn lần so với nhiều loại cơ sở dữ liệu khác Ngay cả trên phần cứng rất khiêm tốn, Neo4j có thể
xử lý hàng triệu traversals mỗi giây giữa các nút trong một biểu đồ trên một máy
Trang 40+ Cache-based Sharding:dựa trên sử dụng công nghệ clustering Neo4j, mà cho phép chia mảnh đồ thị của bạn trong bộ nhớ mà không chia mảnh dữ liệu của bạn trên đĩa
Nhược điểm:
Là loại Graph DB, còn mới lạ với rất nhiều người, chưa quen dùng biểu đồ => Giải pháp: Thay đổi khái niệm (làm sao để mọi người dễ làm quen và yêu thích với khái niệm đồ thị hơn?)
- Sharding (mặc dù có thể mở rộng được, cần tiếp tục theo dõi)
- Không hỗ trợ stored procedures
- Vì là nguồn mở nên hỗ trợ không đồng đều giữa các doanh nghiệp
- Hạn chế về nghiệp vụ: Cũng giống như các hệ cơ sở dữ liệu dạng NoSQL khác chưa hỗ trợ các dạng phân tích dữ liệu lớn và mạnh mẽ mà các doanh nghiệp
đã quen thuộc trong các RDBMS
- Có giao diện và API riêng nên khó khăn trong việc chuyển qua giữa các nhà cung cấp
2.5.1 Tổng quan về hệ thống gợi ý
Hệ thống gợi ý (Recommender systems) là một dạng của hệ hỗ trợ ra quyết định, cung cấp giải pháp mang tính cá nhân hóa mà không phải trải qua quá trình tìm kiếm phức tạp Hệ gợi ý học từ người dùng và gợi ý các sản phẩm tốt nhất trong