Các kiểu dữ liệu trong Redis

Một phần của tài liệu Xây dựng ứng dụng học tiếng nhật trên nền tảng IOS (Trang 45)

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

Một phần của tài liệu Xây dựng ứng dụng học tiếng nhật trên nền tảng IOS (Trang 45)