Thiết kế dữliệu

Một phần của tài liệu Xây dựng ứng dụng từ điển anh việt cho điện thoại di động bằng J2ME (Trang 78 - 81)

Phần quan trọng nhất đối với một ứng dụng từ điển không phải là khả năng hoạt động của ứng dụng đó, mà lại chính là cơ sở dữ liệu. Việc xây dựng cơ sở dữ liệu cho từ điển phải đảm bảo được khả năng truy cập nhanh cho ứng dụng bởi dữ liệu của từ điển thường khá lớn, lên tới hàng chục nghìn từ. Có hai cách để lưu trữ dữ liệu:

4.1 Sử dụng hệ thống bản ghi RMS(Record Management System)

Ứng dụng từ điển

Thêm Từ Tìm Kiếm

Sửa Từ Xóa Từ

RMS là hệ thống được tổ chức và quản lý dưới dạng các record (bản ghi). Đây là một hệ thống lưu trữ tài nguyên của ứng dụng mà các nhà sản xuất đã cung cấp cho các máy điện thoại. Họ đã giành tối thiểu 64KB cho việc lưu dữ liệu. RecordStore là một class trong gói javax.microedition.rms của MIDP (Mobile Information Device Profile) dùng để quản lý và lưu trữ dữ liệu được lưu trên máy (thường được lưu trữ trong non-volatile memory). Việc sử dụng record store có một thuận lợi là dữ liệu từ text file chỉ cần đọc một lần duy nhất rồi sau đó được lưu thẳng vào máy. Mọi việc tìm kiếm hay truy xuất sau này được thực hiện trực tiếp trên record store. Tuy nhiên việc sử dụng bộ nhớ cố định của máy sẽ có nhiều hạn chế về mặt dung lượng kho từ nhưng ta có thể tạo ra một từ điển có kích thước trên 100KB

Tổ chức dữ liệu của RMS: đó là một tập hợp các bản ghi, mỗi bản ghi theo ta hiểu đó là một table có 1 hàng mà không có cột. Như chúng ta đã biết từ điển thì sẽ bao gồm từ và nghĩa của từ. Chúng ta có thể thực hiện lưu cả từ và nghĩa trên một bản ghi được ngăn cách bởi một ký nào đó, sau đó tìm kiếm và đưa ra nghĩa của từ được hiển thị như thế sẽ rất thuận lợi cho sau này sửa và xóa dễ dàng hơn.

Cấu trúc của dữ liệu bản ghi lưu từ là: Từ Tiếng Anh

Nghĩa Tiếng Việt

4.2: Sử dụng file text

Dữ liệu của tự điển sẽ được đọc từ file text rồi sau đó lưu trữ vào bộ nhớ của máy. Chúng ta có thể lưu trữ vào bộ nhớ tạm thời của máy bằng cách dùng Hashtable, hay có thể dùng Record Store để lưu trữ vào bộ nhớ lâu dài của máy (persistence storage). RecordStore là một class trong gói javax.microedition.rms của MIDP (Mobile Information Device Profile) dùng để quản lý và lưu trữ dữ liệu được lưu trên máy (thường được lưu trữ trong non-volatile memory). Việc sử dụng record store có một thuận lợi là dữ liệu từ text file chỉ cần đọc một lần duy nhất rồi sau đó được lưu thẳng vào máy. Mọi việc tìm kiếm hay truy xuất sau này được thực hiện trực tiếp trên record store. Tuy nhiên, dung lượng bộ nhớ dành riêng cho

record store lại khá hạn chế, tối đa 20KB cho các loại máy thuộc Nokia series 40, và ngay cả trên Palm, dung lượng này chỉ đến mức 64KB. Với hạn chế này, ta khó có thể tạo ra một dữ liệu tự điển bỏ túi đúng nghĩa tối thiểu (khoảng 50-100KB) để lưu trên máy. Mặt khác, nếu ta sử dụng hết dung lượng lưu trữ này, các ứng dụng Java khác sẽ không thể lưu trữ lên bộ nhớ này nữa. Vì thế, giải pháp ở đây là dùng Hashtable để lưu lên bộ nhớ tạm thời của máy. Cấu trúc của một file text chứa dữ liệu tự điển như sau: <từ thứ 1>|<nghĩa của từ số một> <từ thứ 2>|<nghĩa của từ số hai> … <từ thứ n>|<nghĩa của từ số n> dụ: bear|gấu duck|vịt monkey|khỉ …

Ta có thể lưu toàn bộ dữ liệu của tự điển trong một file duy nhất, rồi sau đó nạp thẳng vào Hashtable. Tuy nhiên, cách này là không khả thi, vì thời gian để đọc toàn bộ dữ liệu từ file text rồi sau đó lưu trữ vào bộ nhớ là khá lâu (nên nhớ là tốc độ xử lý của các máy di động là rất chậm). Giải pháp đưa ra là chia nhỏ dữ liệu thành nhiều file text khác nhau và chỉ đọc và nạp dữ liệu của mỗi file vào bộ nhớ khi cần truy xuất đến dữ liệu của file đó (phương pháp load on request). Để thực hiện được việc này, ta cần thêm một file làm index file, để trỏ đúng đến file cần đọc. Mỗi dòng trong index file chứa một chuỗi các ký tự đầu tiên của những từ mà

các file dữ liệu chứa. Ví dụ:

abcd efghij klmno pqrs

tuvw xyz

Điều này có nghĩa là file dữ liệu thứ nhất chứa các từ bắt đầu bằng chữ A,B,C và D, file dữ liệu thứ hai chứa các từ bắt đầu bằng chữ E, F,G,H,I và J… Khi người sử dụng tìm kiếm từ monkey chẳng hạn, file dữ liệu thứ 3 sẽ được nạp vào bộ nhớ. Vì vậy, ta sử dụng một array các Hashtable với số phần tử đúng bằng số file dữ liệu (sẽ là 6 phần tử như trong ví dụ trên). Tuy nhiên, khi hiện thực bằng cách này vẫn gặp phải vấn đề ràng buộc về bộ nhớ. Khi dữ liệu được nạp vào bộ nhớ có kích thước lớn hơn dung lượng dành riêng cho mỗi ứng dụng, chương trình sẽ gặp lỗi Out Of Memory. Ta giải quyết bằng cách hiện thực phương pháp “dọn rác” bộ nhớ (garbage collection). Số lượng tối đa Hashtable chứa dữ liệu trong cùng một thời điểm sẽ được giới hạn lại. Có nghĩa là, trong ví dụ trên, thay vì sẽ có lúc 6 Hashtable đều có chứa dữ liệu, ta sẽ giới hạn lại thành chỉ có tối đa 3 Hashtable có chứa dữ liệu trong một thời điểm nào đó, và các Hastable còn lại sẽ bằng rỗng.

Một phần của tài liệu Xây dựng ứng dụng từ điển anh việt cho điện thoại di động bằng J2ME (Trang 78 - 81)