5. Phương pháp nghiên cứu
3.5.3 Các kiểu dữ liệu trong Redis
Khác với RDMS như MySQL, hay PostgreSQL, Redis không có table (bảng). Redis lưu trữ data dưới dạng key-value. Thực tế thì memcache cũng làm vậy, nhưng kiểu dữ liệu của memcache bị hạn chế, không đa dạng được như Redis, do đó không hỗ trợ được nhiều thao tác từ phía người dùng. Dưới đây là sơ lược về các kiểu dữ liệu Redis dùng để lưu value.
– STRING: string, integer hoặc float. Redis có thể làm việc với cả string, từng phần của string, cũng như tăng/giảm giá trị của integer, float.
– LIST: List là một danh sách của strings, sắp xếp theo thứ tự insert. Redis có thể thêm một phần tử vào đầu hoặc cuối list. List phù hợp cho các bài toán cần thao tác với các phần tử gần đầu và cuối vì việc truy xuất này là cực nhanh, cho dù insert cả triệu phần tử. Tuy nhiên nhược điểm là việc truy cập vào các phần tử ở giữa list rất chậm.
32
– SET: tập hợp các string (không được sắp xếp). Redis hỗ trợ các thao tác thêm, đọc, xóa từng phần tử, kiểm tra sự xuất hiện của phần tử trong tập hợp. Ngoài ra Redis còn hỗ trợ các phép toán tập hợp, gồm intersect/union/difference.
– HASH: lưu trữ hash table của các cặp key-value, trong đó key được sắp xếp ngẫu nhiên, không theo thứ tự nào cả. Redis hỗ trợ các thao tác thêm, đọc, xóa từng phần tử, cũng như đọc tất cả giá trị.
– SORTED SET (ZSET): là 1 danh sách, trong đó mỗi phần tử là map của 1 string (member) và 1 floating-point number (score), danh sách được sắp xếp theo score này. Các phần tử của zset được sắp xếp theo thứ tự từ score nhỏ tới lớn.
Ngoài ra, Redis còn hỗ trợ các data types khác như: Bit arrays, HyperLogLogs, Streams. Để cài đặt bạn tham khảo docs của Redis.
Để có thể quản lý được Redis bằng giao diện web các bạn có thể sử dụng công cụ phpRedisAdmin: https://github.com/erikdubbelboer/phpRedisAdmin để quản lý các database.
Persistent redis
Bên cạnh việc lưu key-value trên bộ nhớ RAM, Redis có 2 background threads chuyên làm nhiệm vụ định kỳ ghi dữ liệu lên đĩa cứng.
Có 2 loại file được ghi xuống đĩa cứng: RDB (Redis DataBase file)
RDB thực hiện tạo và sao lưu snapshot của DB vào ổ cứng sau mỗi khoảng thời gian nhất định.
33
Ưu điểm
RDB cho phép người dùng lưu các version khác nhau của DB, rất thuận tiện khi có sự cố xảy ra.
Bằng việc lưu trữ data vào 1 file cố định, người dùng có thể dễ dàng chuyển data đến các data centers, máy chủ khác nhau.
RDB giúp tối ưu hóa hiệu năng của Redis. Tiến trình Redis chính sẽ chỉ làm các công việc trên RAM, bao gồm các thao tác cơ bản được yêu cầu từ phía client như
thêm/đọc/xóa, trong khi đó 1 tiến trình con sẽ đảm nhiệm các thao tác disk I/O. Cách tổ chức này giúp tối đa hiệu năng của Redis.
Khi restart server, dùng RDB làm việc với lượng data lớn sẽ có tốc độ cao hơn là dùng AOF.
Nhược điểm
RDB không phải là lựa chọn tốt nếu bạn muốn giảm thiểu tối đa nguy cơ mất mát dữ liệu. Thông thường người dùng sẽ set up để tạo RDB snapshot 5 phút 1 lần (hoặc nhiều hơn). Do vậy, trong trường hợp có sự cố, Redis không thể hoạt động, dữ liệu trong những phút cuối sẽ bị mất.
RDB cần dùng fork() để tạo tiến trình con phục vụ cho thao tác disk I/O. Trong trường hợp dữ liệu quá lớn, quá trình fork() có thể tốn thời gian và server sẽ không thể đáp ứng được request từ client trong vài milisecond hoặc thậm chí là 1 second tùy thuộc vào lượng data và hiệu năng CPU.
AOF (Append Only File)
AOF lưu lại tất cả các thao tác write mà server nhận được, các thao tác này sẽ được chạy lại khi restart server hoặc tái thiết lập dataset ban đầu.
34
Ưu điểm
Sử dụng AOF sẽ giúp đảm bảo dataset được bền vững hơn so với dùng RDB. Người dùng có thể config để Redis ghi log theo từng câu query hoặc mỗi giây 1 lần. Redis ghi log AOF theo kiểu thêm vào cuối file sẵn có, do đó tiến trình seek trên file có sẵn là không cần thiết. Ngoài ra, kể cả khi chỉ 1 nửa câu lệnh được ghi trong file log (có thể do ổ đĩa bị full), Redis vẫn có cơ chế quản lý và sửa chữa lối đó (redis-check-aof). Redis cung cấp tiến trình chạy nền, cho phép ghi lại file AOF khi dung lượng file quá lớn. Trong khi server vẫn thực hiện thao tác trên file cũ, 1 file hoàn toàn mới được tạo ra với số lượng tối thiểu operation phục vụ cho việc tạo dataset hiện tại. Và 1 khi file mới được ghi xong, Redis sẽ chuyển sang thực hiện thao tác ghi log trên file mới.
Nhược điểm
File AOF thường lớn hơn file RDB với cùng 1 dataset.
AOF có thể chậm hơn RDB tùy theo cách thức thiết lập khoảng thời gian cho việc sao lưu vào ổ cứng. Tuy nhiên, nếu thiết lập log 1 giây 1 lần có thể đạt hiệu năng tương đương với RDB.
Developer của Redis đã từng gặp phải bug với AOF (mặc dù là rất hiếm), đó là lỗi AOF không thể tái tạo lại chính xác dataset khi restart Redis. Lỗi này chưa gặp phải khi làm việc với RDB bao giờ.
35
CHƯƠNG 4: PHÂN TÍCH VÀ THIẾT KẾ ỨNG DỤNG 4.1 Mô hình hoá yêu cầu
Người dùng (User) là khách hàng sử dụng ứng dụng:
+ Đăng nhập vào ứng dụng để sử dụng các tính năng của ứng dụng + Đăng ký tài khoản người dùng mới
+ Người dùng có các học phần, chủ đề cho từng người dùng riêng
36
4.2 Thiết kế dữ liệu
4.2.1 Lược đồ cơ sở dữ liệu
Hình 19: Lược đồ CSDL của ứng dụng 4.2.2 Mô tả các bảng dữ liệu
+ User: mô tả những thông tin của user.
+ Avatar: chứa tất cả những ảnh đại diện đã được upload.
+ Room: chứa những thông tin của user trong room bao gồm câu hỏi, câu trả lời. + Course: chứa tất cả thông tin khóa học và tự vựng do người dùng tạo.
+ Topic: chứa thông tin của topic bao gồm link video.
+ Vocabulary: chưa tất thông thông tin Từ vựng của topic và Course. + History: lịch sử học tập theo dạng quiz của user.
37 4.2.3 Các ràng buộc dữ liệu
+ User quan hệ 1-1 với Avatar, quan hệ 1- nhiều với Room, quan hệ 1 - nhiều với Course.
+ Course và Topic quan hệ 1- nhiều với Vocabulary. + Topic quan hệ 1-1 với History.
+ Bảng nào có ảnh đại diện sẽ quan hệ 1-1 với Avatar. 4.2.4 Luồng xử lý của ứng dụng
Sequence diagram đăng nhập:
38 Sequence diagram học từ vựng:
39 4.2.5 Lược đồ usecase từng chức năng
System Functions Main Use Cases Use Case #
Authentication
Register UC_1.1
Login UC_1.2
Logout UC_1.3
Room
Join room UC_2.1
Play game quiz UC_2.2
Course
Add course UC_3.1
Remove course UC_3.2
Update course UC_3.3
View course UC_3.4
Learn course UC_3.5
Flashcards UC_3.6
Topic
Learn by video UC_4.2
Learn by game UC_4.3
Flashcards UC_4.4
News
View News UC_5.1
User
View information UC_6.1
Update avatar UC_6.2
Update username UC_6.3
40 Hình 22: Lược đồ use case của ứng dụng
41
Use case 1 – Register
Use case Id UC_1.1 Name Register
Goal Đăng ký tài khoản Actors Guest
Pre-conditions User chưa có tài khoản trong hệ thống Main Flow 1.Click vào nút đăng ký
2.Hiện thị màn hình đăng ký 3.Điền thông tin và ấn submit Exception Email đăng ký phải là email thật
Username đăng ký là ký tự thường và số ( lớn hơn hoặc bằng 8 ký tự)
Open Issues N/A
Exception -Nếu tìm không thấy , show thông báo không tìm thấy sách Open Issues N/A
42
Use case 2 – Login
Use case Id UC_1.2
Name Register
Goal Đăng ký tài khoản
Actors Guest
Pre-conditions User chưa có tài khoản trong hệ thống
Post-conditions
Main Flow 1.Click vào nút đăng ký
2.Hiện thị màn hình đăng ký 3.Điền thông tin và ấn submit
Exception Email đăng ký phải là email thật
Username đăng ký là ký tự thường và số ( lớn hơn hoặc bằng 8 ký tự)
Open Issues N/A
Bảng 3: Use case 2 - Login
Use case 3 – Logout
Use case Id UC_1.3
Name Logout
Goal Đăng xuất
Actors User
Pre-conditions User đã đăng nhập tài khoản trong hệ thống
Main Flow 1.Click vào nút setting
2.Hiện thị màn hình setting 3.Click vào nút logout
Exception - Xuất hiện thông báo nếu logout thành công hoặc thất bại
Open Issues N/A
43
Use case 4 – Join room
Use case Id UC_2.1
Name Join Room
Goal Join một room để cùng học theo dạng quiz ( real time)
Actors Guest, User
Pre-conditions Đã đăng nhập vào app
Cùng join tại một thời điểm Post-conditions
Main Flow 1.Click join room
2.Đi vào màn hình learn nếu thành công
Exception Trở lại trang home nếu không có room nào tại thời điểm đó
Open Issues N/A
Bảng 5: Use case 4 - Join room
Use case 5 – Learn by quiz
Use case Id UC_2.2
Name Learn
Goal Học theo dạng quiz
Actors Guest, User
Pre-conditions Đã đăng nhập vào app
Post-conditions
Main Flow 1.Click topic hoặc course muốn học
2.Màn hình câu hỏi sẽ hiện ra, được trả về từ server 3.Có thẻ setting số lượng câu hỏi trong (setting user) 4.Chơi xong, thống kê
Exception -trở lại màn hình home nếu chơi hết số lượt chơi
Open Issues N/A
44
Use case 6 – Add course
Hình 23: Use case add course
Use case Id UC_3.1
Name Add course
Goal Thêm khóa học mình tự tạo bao gồm từ vựng mình muốn nhớ và
học
Actors User
Pre-conditions Đã đăng nhập vào app
Post-conditions
Main Flow 1. Click nút add course
2. Điền thông tin course bao gồm từ vựng 3. Nhấn nút submit
Exception Thông báo trùng tên course nếu user đã tạo course có tên đó rồi
Mỗi course phải trên 2 từ vựng nếu không sẽ xuất hiện thông báo
Open Issues N/A
45
Use case 7 – Remove course
Use case Id UC_3.2
Name Xóa course
Goal Xóa course của user
Actors User
Pre-conditions Đã đăng nhập vào app
Course đã được tạo bởi User Post-conditions
Main Flow 1. Click nút remove course
Exception Thống báo xóa thành công hoặc thất bại
Open Issues N/A
Bảng 8: Use case 7 - Remove course
Use case 8 – Update course
Use case Id UC_3.3
Name update course
Goal update course của user
Actors User
Pre-conditions Đã đăng nhập vào app
Course đã được tạo bởi User Post-conditions
Main Flow 1.Click nút edit course
2.Thêm thông tin cần edit 3.Nhấn vào nút submit
Exception Thống báo update thành công hoặc thất bại
Open Issues N/A
46
Use case 9 – View course
Use case Id UC_3.4
Name view course
Goal view course của user
Actors User
Pre-conditions Đã đăng nhập vào app Course đã được tạo bởi User Post-conditions
Main Flow 1.Click nút view detail course
Exception Thông báo error not found nếu ko tìm thấy course Open Issues N/A
Bảng 10: Use case 9 - View Course
Use case 10 - Flashcards
Use case Id UC_3.5
Name flashcards
Goal Ghi nhớ từ vựng trong course
Actors User
Pre-conditions Đã đăng nhập vào app
Course đã được tạo bởi User Post-conditions
Main Flow 1.Click nút flashcard
Exception Thông báo error not found nếu ko tìm thấy course
Open Issues N/A
47
Use case 11 – Learn vocabulary
Use case Id UC_3.6
Name learn
Goal Học từ vựng trong course theo dạng quiz
Actors User
Pre-conditions Đã đăng nhập vào app
Course đã được tạo bởi User Post-conditions
Main Flow 1.Click nút learn
2.Đi tới màn hình quiz
Exception Thông báo error not found nếu ko tìm thấy course hoặc câu hỏi
Open Issues N/A
Bảng 12: Use case 11 - Learn vocabulary
Use case 12: Topic
48
Use case 13: View detail
Use case Id UC_4.1
Name View detail
Goal Xem chi tiết topic bao gồm cách phát âm, nghĩa
Actors User
Pre-conditions Đã đăng nhập vào app
Post-conditions
Main Flow 1. Click card topic
2. Đi tới màn hình detail
Exception Thông báo error not found nếu ko tìm thấy topic
Open Issues N/A
Bảng 13: Use case 13 - View detail
Use case 14: Learn topic
Use case Id UC_4.2
Name Learn
Goal Học từ vụng theo topic dạng câu hỏi
Actors User
Pre-conditions Đã đăng nhập vào app
Post-conditions
Main Flow 1.Click card topic
2.Đi tới màn hình detail 3.Click nút learn
Exception Thông báo error not found nếu ko tìm thấy topic
Open Issues N/A
49
Use case 15: View video
Use case Id UC_4.3
Name View Video
Goal Hiển thị video hội thoại nếu có
Actors User
Pre-conditions Đã đăng nhập vào app
Post-conditions
Main Flow 1.Click card topic
2.Đi tới màn hình detail 3.Click play video
Exception Thông báo error not found nếu ko tìm thấy topic
Open Issues N/A
Bảng 15: Use case 15 - View video
Use case 16: View news
Use case Id UC_6.1
Name View New
Goal Hiển thị thông tin tức để người dùng có thể học văn hóa nước Nhật Bản
Actors User
Pre-conditions Đã đăng nhập vào app Main Flow 1. Click card news
2. Đi tới màn hình detail news
Exception Thông báo error not found nếu ko tìm thấy news Open Issues N/A
50
Use case 17: View information
Use case Id UC_7.1
Name View information
Goal Hiển thị thông tin của user
Actors User
Pre-conditions Đã đăng nhập vào app Main Flow 1.Click nút setting
2.Đi tới màn hình detail user
Exception Thông báo token expired nếu token hết hạn Open Issues N/A
Bảng 17: Use case 17 - View information
Use case 18: Update avatar
Use case Id UC_7.2
Name Update avatar
Goal Chỉnh sửa ảnh đại diện user
Actors User
Pre-conditions Đã đăng nhập vào app Post-conditions
Main Flow 1.Click nút setting 2.chọn edit ảnh đại diện
Exception Thông báo token expired nếu token hết hạn Open Issues N/A
51
Use case 19: Update username
Use case Id UC_7.3
Name Update username
Goal Chỉnh sửa tên user
Actors User
Pre-conditions Đã đăng nhập vào app Main Flow 1.Click nút setting
2.chọn edit username 3.Điền username mới
Exception Thông báo token expired nếu token hết hạn Thông báo trùng tên nếu có username tồn tại Open Issues N/A
52
4.3 Thiết kế giao diện
4.3.1 Màn hình chính (chưa đăng nhập)
Hình 25: Màn hình chính (chưa đăng nhập) + Bao gồm các thuộc tính
STT Loại Ý nghĩa
1 Button Người dùng đăng nhập bằng facebook 2 Button Người dùng đăng kí tài khoản
3 Button Người dùng đăng nhập vào ứng dụng Bảng 20: Các thuộc tính của màn hình đăng nhập
53
4.3.2 Màn hình đăng kí
Hình 26: Màn hình đăng kí
STT Loại Ý nghĩa
1 Button Quay lại màn hình chính (chưa đăng nhập) 2 Text input Yêu cầu người dùng nhập username
3 Text input Yêu cầu người dùng nhập email 4 Text input Yêu cầu người dùng nhập password 5 Button Người dùng đăng kí tài khoản
54
4.3.3 Màn hình đăng nhập
Hình 27: Màn hình đăng nhập
STT Loại Ý nghĩa
1 Text Input Yêu cầu người dùng nhập email 2 Text input Yêu cầu người dùng nhập password
3 Button Đăng nhập
55
4.3.4 Màn hình chính (đã đăng nhập)
56
STT Loại Ý nghĩa
1 Button Xem các thiết lập (setting) của ứng dụng 2 Button Hiển thị các thông báo đến
3 Button Hiển thị danh sách bảng chữ cái tiếng Nhật bao gồm chữ kanji và hiragana
4 Button Người dùng chọn học phần học bằng video 5 Button Chuyển đến trang học phần
6 Button Quay trở lại màn hình chính (đã đăng nhập) 7 Button Xem hồ sơ (profile) của người dùng
8 Button Chuyển đến phần chơi game với các người dùng khác 9 Button Chuyển đến các học phần đã tạo của người dùng
57
4.3.5 Giao diện bảng ký tự (alphabet)
Bảng 24: Giao diện bảng ký tự (alphabet)
STT Loại Ý nghĩa
1 Button Chọn bảng ký tự theo dạng chữ hiragana 2 Button Chọn bảng ký tự theo dạng chữ katakana
3 Button Click vào ký tự trong danh sách để nghe phát âm Bảng 25: Các thuộc tính bảng ký tự
58
4.3.6 Giao diện học phần video
Hình 29: Học phần video
STT Loại Ý nghĩa
1 Button Bắt đầu xem video 2 Button Huỷ chọn học phần