Quản trị CSDL trong Sqlite

Một phần của tài liệu Hệ quản trị cơ sở dữ liệu Sqlite trên thiết bị di động và ứng dụng (Trang 55)

Như đã đề cập ở phần trên, Sqlite cung cấp nhiều phương pháp khác nhau giúp người dùng có thể thao tác với CSDL. Có 2 phương pháp chính để quản lý CSDL Sqlite là giao diện và dòng lệnh. Sqlite Manager là công cụ quản lý CSDL bằng giao diện. Công cụ này dễ dàng cài đặt và sử dụng, Sqlite Manager hỗ trợ trên tất cả các hệ điều hành đặc biệt phải kể đến hệ điều hành OS X – là hệ điều hành hỗ trợ việc lập trình ứng dụng trên thiết bị iPhone. Ngoài ra, người dùng có thể cài đặt Sqlite Manager thông qua chức năng addon trên Firefox.

Hình 4.5 biểu diễn công cụ Sqlite Manager, cũng giống như các giao diện sử dụng của các hệ quản trị CSDL khác thì Sqlite Manager cũng cung cấp các chức năng để thao tác với CSDL như chức năng thiết kế CSDL, tạo bảng, thực thi câu lệnh SQL, tạo index...

Hình 3.6. Giao diện Sqlite Manager 3.4.2. Giao diện dòng lệnh

Một phương pháp quản lý CSDL Sqlite nữa là giao diện dòng lệnh. Có thể nói, giao diện dòng lệnh được dùng rất phổ biến trên các hệ điều hành như Linux, Unix, OS X. Ngoài ra, giao diện dòng lệnh cũng có thể dùng trên hệ điều hành Window. Trong hệ điều hành OS X, Sqlite đã được hỗ trợ, vì thế khi dùng giao diện dòng lệnh, người dùng không cần phải cài đặt thêm bất cứ công cụ gì. Terminal là công cụ hỗ trợ thao tác các dòng lệnh trên hệ điều hành OS X, và mọi thao tác dòng lệnh đều được thực hiện trên công cụ này. Để thực hiện thao tác với Sqlite thông qua giao diện dòng lệnh, người dùng có thể dùng công cụ Terminal.

Hình 3.7. Giao diện dòng lệnh trên hệ điều hành OS X

Sqlite3 phiên bản thứ 3 của Sqlite. Để bắt đầu sử dụng chương trình Sqlite3 trên giao diện dòng lệnh, người sử dụng chỉ cần gõ „sqlite3‟, theo đó là tập tin chứa CSDL Sqlite. Bạn có thể dùng giao diện dòng lệnh với những nhiệm vụ như import, export dữ liệu, trả về tập kết quả và vận hành những xử lý khối chung. Để xem tất cả các trợ giúp mà Sqlite3 hỗ trợ, chúng ta sử dụng chọn lựa .help:

3.5. Phƣơng thức thực hiện

3.5.1. Lưu trữ dữ liệu trên thiết bị

Như đã nói ở trên, mỗi ứng dụng được cài đặt lên thiết bị iPhone, hệ điều hành iOS sẽ tạo ra một thư mục Sandbox duy nhất cho ứng dụng tương ứng. Tất cả các dữ liệu của ứng dụng sẽ được lưu trữ trong thư mục Document. Thư mục này cho phép người dùng đọc ghi dữ liệu.

Ngoài ra, đặc điểm của một ứng dụng quản lý hình ảnh là:  Dữ liệu hình ảnh lớn

 Thao tác đọc thường xuyên với hình ảnh

Do đó, cần phải lưu trữ dữ liệu hình ảnh hợp lý để đảm bảo ứng dụng hoạt động tốt. Hoạt động tốt ở đây có thể nói đến khả năng quản lý dung lượng bộ nhớ do bộ nhớ thiết bị giới hạn, tốc độ đọc ghi dữ liệu nhanh, chương trình không bị chết giữa chừng...

Để giải quyết vấn đề này, một hướng lưu trữ dữ liệu được đề ra và cũng được nhiều nhà phát triển sử dụng đó là lưu trữ dữ liệu hình ảnh trong thư mục Document của Sandbox và tập tin CSDL Sqlite chứa các bảng dữ liệu lưu trữ thông tin cài đặt, thông tin album và thông tin về hình ảnh. Ban đầu, tập tin CSDL được lưu trữ trong thư mục Bundle, sau đó, sao chép tập tin này từ Bundle sang thư mục Document trong Sandbox. Vì thư mục Document cho phép người dùng đọc và tạo thư mục con trong nó nên với mỗi một album được tạo ra thì sẽ có một thư mục con có tên album được tạo ra trong thư mục cha Document. Việc quản lý hình ảnh theo thư mục con giúp nhà phát triển ứng dụng dễ dàng quản lý hơn trong việc phát triển của mình.

Tập tin CSDL Sqlite là một tập tin duy nhất, có mở rộng là .sqlite, bao gồm bảng:), bảng lưu trữ thông tin về album (bảng Album), và bảng lưu trữ thông tin về hình ảnh (bảng Photo). Sqlite cung cấp kiểu dữ liệu BLOB để lưu dữ liệu dưới dạng NSData (là một kiểu dữ liệu trong ngôn ngữ lập trình Objective-C). Để lưu dữ liệu hình ảnh trong CSDL thì dữ liệu được chuyển sang NSData rồi lưu vào CSDL theo kiểu BLOB. Tuy nhiên, trong ứng dụng này, thông tin về hình ảnh được đưa ra dưới dạng tên ảnh, đường dẫn ảnh, thuộc album nào...mà không cần lưu dưới dạng dữ liệu hình ảnh. Do đó, dung lượng của tập tin CSDL Sqlite thường rất nhẹ và tốc độ truy cập dữ liệu vào CSDL nhanh. Để dễ dàng hình dung cấu trúc thư mục lưu trữ dữ liệu của ứng dụng, hình ảnh sau đây sẽ diễn giải chi tiết thư mục lưu trữ dữ liệu:

Hình 3.5. Cấu trúc thƣ mục Sandbox chi tiết của ứng dụng

3.5.2. Thiết kế CSDL

Tập tin CSDL Sqlite là một tập tin duy nhất có đuôi mở rộng là .sqlite. Mọi cấu hình, bảng dữ liệu đều được chứa trong tập tin này. Mục đích của thiết kế CSDL là đưa ra thiết kế các bảng biểu để lưu dữ liệu một cách hiệu quả và không quá phức tạp khi sử dụng. Nội dung các bảng dữ liệu bao gồm các cột dữ liệu và kiểu dữ liệu tương ứng của cột dữ liệu đó.

Các chức năng chính của ứng dụng đã được liệt kê như chức năng tạo mới album. mỗi album có thể có nhiều ảnh. Dữ liệu hình ảnh sẽ không lưu trực tiếp vào CSDL Sqlite mà dữ liệu ảnh được lưu trong thư mục Sandbox của ứng dụng và thông tin trong CSDL chỉ là đường dẫn đến thư mục lưu dữ liệu ảnh. Với các chức năng trên thì CSDL sẽ cần các bảng dữ liệu sau:

Tên cột Kiểu dữ liệu Mô tả

+ albumID Integer Id của album

+ name String Tên album

+ lablePath String Đường dẫn album

+ note String Ghi chú

Bảng Photo: Lưu tất cả các thông tin về Photo

Tên cột Kiểu dữ liệu Mô tả

photoID Integer Id của ảnh

name String Tên ảnh

createDate String Ngày tạo ảnh

status Integer Trạng thái ảnh

albumID Integer Ảnh đang thuộc album nào?

note String Ghi chú

path String Đường dẫn ảnh

type String Kiểu ảnh (jpg, jpeg, png)

3.5.3. Thêm thư viện Sqlite3

Thư viện Sqlite3 là phiên bản thứ 3 của thư viện Sqlite được tích hợp sẵn trong công cụ lập trình Xcode. Để sử dụng CSDL Sqlite trong ứng dụng trên thiết bị chạy trên hệ điều hành iOS thì cần phải thêm thư viện Sqlite3 vào project đang xây dựng.

Hình 3.8. Thƣ viện sqlite3 trong Xcode

Lưu ý, Xcode có tồn tại hai thư viện libsqlite3.dylib và libsqlite3.0.dylib. Libsqlite3.dylib là phiên bản có liên kết tượng trưng hay còn gọi là liên kết mềm đến thư viện phiên bản 3 mới nhất như là quy ước cho các trình quản lý gói trên UNIX.

Sau khi thêm thư viện Sqlite3, để sử dụng được thư viện này thì cần khai báo thư viện #import <sqlite3.h>

3.5.4. Kết nối CSDL

Kết nối CSDL là công việc phải thực hiện đầu tiên khi muốn thao tác với CSDL. Sau khi tập tin CSDL được sao chép từ Bundle vào Sandbox thì mọi thao tác truy cập như đọc ghi từ ứng dụng đến tập tin CSDL có thể thực hiện được. Để mở CSDL, Sqlite cung cấp hàm sqlite3_open, đối số truyền vào là đường dẫn lưu tập tin CSDL và CSDL kiểu Sqlite3. Để đóng CSDL, dùng hàm sqlite3_close.

3.5.5. Thao tác với CSDL

Các thao tác với CSDL bao gồm thao tác lấy dữ liệu từ CSDL, thêm dữ liệu vào CSDL, chỉnh sửa dữ liệu trong CSDL và xoá dữ liệu. Để thực hiện thao tác đến CSDL thì trước hết cần phải kết nối CSDL. Sau khi kết nối thành công, các thao tác với dữ liệu trogn CSDL có thể thực hiện. Thư viện Sqlite cung cấp một số hàm API giúp cho việc thao tác với dữ liệu một cách dễ dàng.

3.5.5.1. Lấy dữ liệu

Việc lấy dữ liệu từ CSDL được thực hiện quan một số bước. Đầu tiên cần xây dựng chuỗi truy vấn SQL, câu lệnh này thường là câu lệnh SELECT trong sql. Thực thi câu lệnh SQL trên cần sử dụng hàm sqlite3_prepare_v2(). Hàm này có nhiệm vụ chuẩn bị cho việc thực thi câu lệnh sql. Sau đó, truy xuất lên mỗi hàng của bảng dùng hàm sqlite_step() để lấy ra giá trị của từng cột. Sqlite cung cấp một số hàm để lấy dữ liệu dưới dạng blob, byte, int, double và value. Lưu ý, khi lấy dữ liệu dạng text thì cần chuyển đổi từ dữ liệu dạng chuỗi UTF8 sang NSString. NSString là kiểu đối tượng chuỗi được định nghĩa trong ngôn ngữ Objective-C, dùng để lưu dữ liệu dạng chuỗi.

3.5.5.2. Thêm dữ liệu

Tương tự như lấy dữ liệu, để thêm dữ liệu vào CSDL thì cũng cần phải chuẩn bị câu lệnh Sql, câu lệnh này thường là câu lệnh INSERT INTO. Và cũng cần dùng hàm sqlite3_prepare_v2 chuẩn bị thực thi câu lệnh Sql. Nếu như việc lấy dữ liệu của từng côt theo từng hàng trong bảng dữ liệu thì cần dùng đến những hàm như sqlite3_column_int, hay sqlite3_column_text để lấy dữ liệu kiểu int hoặc kiểu chuỗi thì việc thêm dữ liệu vào CSDL sẽ cần dùng đến những như sqlite3_bind_text, sqlite3_bind_int để chèn dữ liệu dạng int hoặc dạng text vào CSDL. Ngoài ra, Sqlite cũng cung cấp các hàm đề chèn dữ liệu dạng blob, byte, double và value.

3.5.5.3. Chỉnh sửa dữ liệu

Thao tác chỉnh sửa dữ liệu trong CSDL cơ bản là giống trong thao tác thêm dữ liệu. Chỉ có điểm khác là thay bằng câu lệnh INSERT INTO bằng câu lệnh UPDATE.

3.5.5.4. Xoá dữ liệu

Cũng giống như các thao tác trên, việc chuẩn bị câu lệnh SQL là cần thiết. Câu lệnh được dùng cho thao tác xoá dữ liệu là DELETE. Thông thường, thao tác xoá dữ liệu sẽ cần đến id hoặc một số những điều kiện để xoá dòng. Do đó, thao tác này sẽ cần truyền vào giá trị của điều kiện bằng các hàm như sqlite3_bind_text, sqlite3_bind_int…

3.6. Phƣơng pháp lƣu trữ dữ liệu trên máy chủ

Với lượng dữ liệu lớn như hình ảnh hay video thì phương pháp lưu trữ dữ liệu trên server cũng là một phương pháp được lựa chọn sử dụng.

Hình 3.9. Mô hình iPhone App-Server

Với mô hình Client-Server, ứng dụng trên iPhone sẽ kết nối đến máy chủ thông qua dịch vụ web và ứng dụng không thao tác trực tiếp đến CSDL trên máy chủ. Khi ứng dụng từ thiết bị iPhone gửi một yêu cầu GET hoặc POST đến dịch vụ web, dịch vụ web sẽ truy vấn CSDL cho các dữ liệu được yêu cầu và sau đó trả lại cho ứng dụng các dữ liệu theo định dạng mà ứng dụng có thể hiểu được.

Trên máy chủ, mọi truy vấn đến CSDL được thực hiện thông qua một dịch vụ web. Để lấy danh sách các album thực hiện kết nối và truy vấn như sau:

<?php $con = mysqli_connect("sql211.byethost32.com","b32_15127688","82734 3","b32_15127688_PhotoAlbum"); // Check connection if (mysqli_connect_errno()) {

echo "Failed to connect to MySQL: " . mysqli_connect_error();

}

$result = mysqli_query($con,"SELECT * FROM Album"); //fetch the data from the database

$rs = array();

while ($row = mysqli_fetch_array($result)) { $rs[] = $row;

}

echo json_encode($rs); mysqli_close($con); ?>

Tương tự, để lấy danh sách tất cả các hình ảnh theo album:

<?php

$albumID = $_POST['ID']; // echo "album = ".$albumID; $con = mysqli_connect("sql211.byethost32.com","b32_15127688","82734 3","b32_15127688_PhotoAlbum"); // Check connection if (mysqli_connect_errno()) { return 1; }

$sql = "SELECT * FROM Photo WHERE AlbumID = $albumID"; // echo "sql = ".$sql; $result = mysqli_query($con,$sql); $data = array(); while($row = mysqli_fetch_array($result)) { $data[] = $row; } echo json_encode($data); mysqli_close($con); ?>

Dưới ứng dụng trên thiết bị iPhone, hay được coi là máy khách. Để gửi yêu cầu lên máy chủ, máy khách cần chỉ rõ địa chỉ máy chủ là gì, và phương thức thực hiện là POST hay GET:

NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[strURL

stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]] ];

[theRequest setHTTPMethod:@"GET"];

Sau khi kết nối thành công, server trả về dữ liệu dạng NSData:

NSData* responeData = [NSURLConnection

sendSynchronousRequest:theRequest returningResponse:nil error:&error];

3.7. So sánh kết quả thực nghiệm

Với phương pháp lưu trữ dữ liệu sử dụng hệ quản trị CSDL Sqlite, dữ liệu được lưu trữ trong Sandbox của ứng dụng, việc kết nối để lấy dữ liệu không phụ thuộc vào kết nối mạng. Trong khi, phương pháp lưu trữ dữ liệu trên máy chủ lại phụ thuộc vào kết nối mạng. Thực hiện lấy dữ liệu hình ảnh, album và đo thời gian thực hiện theo hai phương pháp để so sánh. Thực hiện test trên Simulator iOS 7.0 được kết quả như bảng 3.10.

Hình 3.10. Bảng so sánh thời gian yêu cầu dữ liệu

Số lần thử Số lƣợng ảnh Tại cục bộ (giây) Trên máy chủ (giây)

Lần 1 10 0.000185 0.773835 Lần 2 0.000252 0.402350 Lần 3 0.000217 0.484313 Lần 1 100 0.00031 1.32767 Lần 2 0.000507 0.8954 Lần 3 0.000437 1.06865

Theo bảng so sánh thời gian yêu cầu dữ liệu của hai phương pháp lưu trữ thì có thể thấy rằng: thời gian yêu cầu dữ liệu tại cục bộ nhanh hơn nhiều lần so với phương pháp lưu trữ trên máy chủ. Thời gian yêu cầu tại cục bộ nhanh hay chậm phụ thuộc vào tốc độ của thiết bị, trong khi thời gian yêu cầu tại máy chủ lại phụ thuộc vào tốc độ của mạng. Có thể nói, với ứng dụng cần lưu trữ dung lượng dữ liệu trung bình thì nên lựa chọn phương pháp lưu trữ tại cục bộ, với dung lượng dữ liệu lớn (khoảng Gb) thì nên sử dụng phương pháp lưu trữ trên máy chủ.

3.8. Kết luận chƣơng

Hệ quản trị CSDL Sqlite được biết đến như một hệ quản trị dành cho các thiết bị di động. Nó được dùng trong nhiều hệ điều hành và nhiều thiết bị di động. Vai trò của Sqlite rất quan trọng trong việc lưu trữ dữ liệu trong hệ điều hành và trong ứng dụng. Dữ liệu có thể là dữ liệu dạng text, dạng số, phức tạp hơn là dữ liệu dạng hình ảnh, âm thanh.

Tuỳ theo đặc trưng của hệ điều hành và thiết bị mà nhà phát triển lựa chọn phương pháp thiết kế và lưu trữ CSDL theo phương pháp khác nhau. Nếu dữ liệu cần lưu dạng text hay dạng số thì phương pháp lưu trực tiếp vào CSDL là lựa chọn đơn giản và hợp lý. Nhưng với những dữ liệu dạng hình ảnh và âm thanh, số lượng dữ liệu nhiều thì cần cân nhắc việc lưu trực tiếp hay gián tiếp vào CSDL. Với ứng dụng được trình bày trong chương này, dựa vào đặc điểm cụ thể của hệ điều hành iOS thì phương pháp sử dụng thư mục Sandbox để lưu trữ hình ảnh, còn CSDL thì lưu trữ thông tin đường dẫn hình ảnh nhờ đó tiết kiệm được dung lượng vừa tối ưu hoá được tốc độ và hiệu quả truy vấn.

Tóm lại, hệ quản trị CSDL Sqlite nhỏ gọn, là lựa chọn của nhiều hệ điều hành, nhưng để đảm bảo hoạt động hiệu quả cho ứng dụng thì cần phải lựa chọn phương pháp lưu trữ và thiết kế phù hợp với hệ điều hành đó.

KẾT LUẬN

Với sự phát triển mạnh mẽ không ngừng của khoa học công nghệ đặc biệt là sự phát triển của thị trường thiết bị di động thì nhu cầu sử dụng hệ quản trị CSDL phục vụ việc lưu trữ dữ liệu ngày càng tăng. Với những hạn chế còn tồn tại của thiết bị di động về dung lượng bộ nhớ, tốc độ xử lý và dung lượng pin thì những cải tiến về phần cứng và phần mềm luôn được các nhà phát triển quan tâm đặc biệt. Những cải tiến về phần mềm có thể nói đến lựa chọn các phần mềm có dung lượng nhỏ gọn nhưng vẫn đáp ứng được nhu cầu đặt ra và hệ quản trị CSDL Sqlite là một trong những phần mềm được lựa chọn để giải quyết vấn lưu trữ dữ liệu cho thiết bị di động. Hệ quản trị CSDL Sqlite có những đặc trưng và ưu điểm gì phù hợp với thiết bị di động, những đặc trưng và ưu điểm đó đã giải quyết nhu cầu lưu trữ dữ liệu trên thiết bị di động như thế nào và cách sử dụng nó trong ứng dụng cụ thể ra sao? Đây là những nội dung mà đề tài đã làm được.

Về mặt lý thuyết: Luận văn đi sâu vào việc tìm nhiều những đặc trưng chủ yếu của Sqlite để thấy được sự phù hợp của nó với vấn đề lưu trữ dữ liệu trên thiết bị di động như thế nào. Những ưu điểm của Sqlite như nhỏ gọn, là CSDL nhúng hay không cần cấu hình

Một phần của tài liệu Hệ quản trị cơ sở dữ liệu Sqlite trên thiết bị di động và ứng dụng (Trang 55)

Tải bản đầy đủ (PDF)

(67 trang)