Tải bản đầy đủ (.docx) (44 trang)

Tìm hiểu về hệ quản trị cơ sở dữ liệu SQL và NoSQL

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (824.04 KB, 44 trang )

Tìm hiểu về Hệ quản trị cơ sở dữ liệu
SQL và NoSQL
Tích hợp dữ liệu từ nhiều nguồn CSDL
khác nhau

1


Mục Lục

Lời mở đầu
Trong thời buổi hiện đại ngày nay, đặc biệt là với sự bùng nổ về cuộc cách
mạng 4.0. Không thể phủ nhận tầm quan trọng của ngành công nghệ thông tin đối
với tất cả các ngành kinh tế, buôn bán, tài chính, thương mại, giao thương, du lịch,
….. Với tất cả các ngành hiện nay, dữ liệu là một phần không thể thiếu và nó cũng
mang lại giá trị to lớn đáp ứng nhu cầu thiết yếu cho các ngành, doanh nghiệp, cá
nhân,…. Trong đó, tra cứu thông tin cũng là một chức năng quan trọng để đáp ứng
nhu cầu hiện nay. Vì vậy việc xây dựng hệ thống tra cứu là cần thiết với nguồn dữ
liệu phong phú và đa dạng. Để có một CSDL lớn, dữ liệu có thể thu thập từ nhiều
nguồn khác nhau. Tuy nhiên với nhu cầu của từng hệ thống khác nhau, nhu cầu sử
dụng các hệ quản trị cơ sở dữ liệu cũng khác nhau (khác nhau về mặt cấu trúc, các
trường, kiểu dữ liệu,….). Do đó, việc thu thập dữ liệu từ nhiều nguồn và tích hợp
vào một CSDL sẽ trở nên cực kỳ khó khăn.
Do đó, chúng tôi sẽ đưa ra giải pháp để giải quyết vấn trên. Trong phần tiếp
theo, chúng tôi sẽ trình bày những nội dung cơ bản về SQL và NoSQL, phân tích
các hệ quản trị CSDL phổ biến hiện nay. Sau đó đưa ra một bản thiết kế để giải
quyết vấn đề về việc tích hợp dữ liệu giữa các hệ quản trị cơ sở dữ liệu khác nhau.

2



Phần I: Các hệ quản trị cơ sở dữ liệu quan hệ
1.
-

-

-

-

-

Hệ quản trị cơ sở dữ liệu DBMS
Một lượng lớn thông tin hữu ích đối với chúng ta tồn tại ở dạng văn bản, và
giá trị của dữ liệu chính là tài sản quan trọng. Tuy nhiên, khả năng quản lý
một lượng lớn thông tin, nhanh chóng truy cập đến những thông tin cần thiết
còn quan trọng hơn nữa. Điều đó có nghĩa là có thông tin là chưa đủ, chúng
ta còn phải biết cách sử dụng nó sao cho thật hiệu quả. Từ thực tế đó dẫn
chúng ta đến một suy nghĩ là: cần phải có một hệ thống quản lý dữ liệu thật
mạnh mẽ và hiệu quả. Để quản lý một lượng lớn dữ liệu phức tạp, người sử
dụng phải có những công cụ - hỗ trợ tính năng đơn giản trong thao tác nhưng
lại hiệu quả trong trích lọc thông tin.
Dữ liệu là các thông tin liên quan đến đối tượng (ví dụ như người, vật, sự
việc,...) được lưu trữ trên máy tính. Dữ liệu được mô tả dưới nhiều dạng
khác nhau (như ký tự, ký hiệu, hình ảnh, , âm thanh...).
Cơ sở dữ liệu là tập hợp dữ liệu biểu diễn các hoạt động của một hoặc một
số tổ chức có liên quan đến nhau. Ví dụ, cơ sở dữ liệu của một trường đại
học có thể chứa thông tin về: Sinh viên, giáo viên, các môn học,…
Hệ quản trị cơ sở dữ liệu, còn gọi là DBMS (Database Management
System) là phần mềm được thiết kế để lưu trữ và quản lý một lượng lớn dữ

liệu. Sử dụng DBMS là hướng tới một cách tiếp cận mới, không phải lưu trữ
dữ liệu ở các tệp tin độc lập và viết từng ứng dụng cụ thể để quản lý
chúng. Bằng việc lưu trữ dữ liệu trên DBMS thay vì việc lưu trữ vào các file
riêng rẽ, chúng ta có thể sử dụng các chức năng của DBMS để quản lý dữ
liệu dễ dàng. Với dung lượng dữ liệu khổng lồ và số lượng rất lớn những
người sử dụng đồng thời, những tính năng mà DBMS hỗ trợ đã trở nên vô
cùng quan trọng và không thể thiếu.
Những lợi ích của DBMS:
● Độc lập dữ liệu: Những chương trình ứng dụng nên được độc lập tối đa
có thể đối với việc biểu diễn và lưu trữ dữ liệu. DBMS có thể cung cấp
các khung nhìn trừu tượng trên dữ liệu cách ly với lưu trữ vật lý của dữ
liệu.
● Truy cập dữ liệu hiệu quả: Hàng loạt những tính năng của DBMS có
thể giúp lưu trữ và truy cập cơ sở dữ liệu hiệu quả. Những tính năng này
đặc biệt quan trọng nếu dữ liệu được lưu trữ trên các thiết bị lưu trữ
ngoài.

3










2.


Toàn vẹn và an toàn dữ liệu: Nếu dữ liệu luôn luôn được truy cập thông
qua DBMS, thì DBMS có thể thiết đặt các ràng buộc toàn vẹn trên dữ
liệu. Ví dụ, trước khi thêm thông tin về lương của một nhân viên, DBMS
có thể kiểm tra số lương đó không vượt quá số tiền hiện có của phòng.
Quản trị dữ liệu: Khi một vài người dùng chia sẻ dữ liệu, người quản trị
hệ thống có thể đưa ra những đề xuất mang lại hiệu quả đáng kể. Những
chuyên gia có kinh nghiệm hiểu rõ dữ liệu đang được quản lý như thế nào
và những nhóm người sử dụng nào có thể sử dụng từng phần trong cơ sở
dữ liệu, từ đó họ có thể đưa ra được cách thức tổ chức dữ liệu để giảm
được tối đa dư thừa và truy cập trở nên hiệu quả.
Truy cập đồng thời và khôi phục dữ liệu: DBMS lập lịch cho việc truy
cập đồng thời đến dữ liệu để người sử dụng có cảm giác rằng chỉ có một
người đang sử dụng dữ liệu trong một khoảng thời gian. Thêm vào đó,
DBMS bảo vệ người sử dụng tránh những ảnh hưởng khi hệ thống gặp sự
cố.
Giảm thời gian phát triển ứng dụng: DBMS hỗ trợ rất nhiều các tính
năng quan trọng được sử dụng trong rất nhiều các ứng dụng truy cập tới
dữ liệu được lưu trữ trong DBMS. Thông qua lược đồ mức cao (highlevel interface), những ứng dụng được phát triển nhanh chóng và dễ dàng
hơn vì rất nhiều những công việc đã được DBMS hỗ trợ thay vì bạn phải
xây dựng trong chương trình ứng dụng.

Các mô hình cơ sở dữ liệu
-

-

-

Mô hình dữ liệu là một tập các khái niệm có thể được sử dụng để mô tả
cấu trúc của một cơ sở dữ liệu cung cấp các thao tác cần thiết để đạt được

sự trừu tượng hoá. Cấu trúc của một cơ sở dữ liệu bao gồm: kiểu dữ liệu,
các mối quan hệ và các ràng buộc của dữ liệu.
Mô hình cơ sở dữ liệu là một loại của mô hình dữ liệu xác định cấu trúc
logic của cơ sở dữ liệu quyết định cách dữ liệu được lưu, tổ chức và cách
sử dụng.

Một số mô hình cơ sở dữ liệu:


Mô hình quan hệ (Relational Model): Sử dụng bảng để lưu dữ liệu
và mối quan hệ giữa các bảng. Mỗi bảng có nhiều cột (field) và mỗi
cột có một tên duy nhất. Mỗi một dòng là một record.

4




Mô hình mạng (Network Model): Dữ liệu được thể hiện bằng một
tập các bản ghi(records) và mối quan hệ giữa các dữ liệu được thể
hiện bằng các liên kết (links). Các kiểu thực thể kết nối với nhau
thông qua mối quan hệ cha-con.



Mô hình phân cấp (Hierarchical Model): Tổ chức theo hình cây,
mỗi nút biểu diễn một thực thể dữ liệu. Mỗi nút cha có thể có một
hoặc nhiều nút con nhưng mỗi nút con chỉ có một nút cha. Do đó mô
hình dữ liệu phân cấp có thể có các kiểu quan hệ: 1-1, 1-N.


5




Mô hình hướng đối tượng (Object-oriented Data Models): Cơ sở
dữ liệu bao gồm các đối tượng: Mỗi đối tượng bao gồm các thuộc
tính, phương thức của đối tượng, Các đối tượng trao đổi với nhau
thông qua các phương thức, Một dối tượng có thể được sinh ra từ việc
kế thừa từ đối tượng khác.

6


3.

Các hệ quản trị cơ sở dữ liệu quan hệ RDBMS
(Relational Database Management System)
3.1 khái niệm
-

-

RDBMS là một hệ quản trị cơ sở dữ liệu dựa trên mô hình quan hệ để
làm việc với dữ liệu, khi đó dữ liệu được lưu trữ trong các đối tượng cơ
sở dữ liệu được gọi là các bảng. Với mỗi bảng, các cột tương ứng với các
thuộc tính giữ một kiểu dữ liệu khác của bản ghi. Mỗi bản ghi(record)
trong cơ sở dữ được định nghĩa duy nhất với các key và tương ứng với
một hàng trong một bảng. Với thuộc tính của các hàng được thể hiện như
một cột trong một bảng.

Các quan hệ có thể được coi như là một tập hợp có chứa một loạt các
thuộc tính mà đại diện cho cơ sở dữ liệu và thông tin được lưu trữ. Khi
đang định nghĩa một bảng để thêm các bản ghi thì mỗi phần tử trong một
bản ghi phải tương ứng với kiểu dữ liệu được định nghĩa (như kiểu
integer, date,...).

3.2 Đặc điểm của RDBMS
-

-

Ưu điểm:
● Cấu trúc dạng bảng đơn giản và dễ dàng cho người sử dụng.
● Cho phép người dùng sử dụng CRUD (create, read, update và delete)
với các bản ghi một cách dễ dàng bởi các câu lệnh.
● RDBMSs cho phép nhiều người sử dụng cùng truy cập database cùng
một lúc. Người sử dụng có thể sử dụng chức năng quản lý giao dịch và
khoá được tích hợp để truy cập dữ liệu khi nó đang được thay đổi.
Điều này giúp khắc phục sự cố có thể xảy ra giữa nhiều người cùng
làm việc trên dữ liệu và ngăn ngừa người dùng truy cập hoặc sử dụng
dữ liệu đã được cập nhật một phần.
● RDBMS cho phép quản trị cơ sở dữ liệu hạn chế quyền truy cập tới
người dùng được uỷ quyền và cấp đặc quyền cho người dùng cá nhân
dựa trên loại nhiệm vụ mà họ cần thực hiện.
● Tính ACID (Atomicity, Consistency, Isolation, Durability) của một
transaction được đảm bảo.
● Tính toàn vẹn dữ liệu cao, có các ràng buộc về dữ liệu như khóa
chính, khóa ngoại, quan hệ một nhiều, nhiều nhiều ...Thích hợp với các
hệ thống cần bảo mật cao như ngân hàng, thương mại điện tử,…
● Với database ch

uẩn 3, dữ liệu được đảm bảo tính đồng nhất và
toàn vẹn (consistency).
Nhược điểm
7










Việc mapping giữa các bảng trong database với các object trong code
khá rắc rối và phức tạp.
Performance sẽ bị chậm khi phải join nhiều bảng để lấy dữ liệu .
Việc thay đổi cấu trúc dữ liệu (Thêm/xóa bảng hoặc thêm/xóa một field)
rất mệt mỏi, kéo theo vô số thay đổi trên code).
Không làm việc được với dữ liệu không có cấu trúc (un-structure).
RDBMS được thiết kế để chạy trên một máy chủ. Khi muốn mở rộng,
nó khó chạy trên nhiều máy (clustering).
Vì dữ liệu mở rộng theo chiều dọc, nên khả năng lưu trữ cũng như xử lý
sẽ khó khăn và chi phí tốn kém.
Khi dữ liệu tăng lên cao, thì chi phí query cũng như độ phức tạp tăng
theo. Đặc biệt là với các query về sắp xếp, so sánh,…

3.3 Một số hệ quản trị cơ sở dữ liệu quan hệ phổ biến:
-


-

-

SQL là một chuẩn của ANSI (American National Standards Institute Viện tiêu chuẩn quốc gia Hoa kỳ) về truy xuất các hệ thống CSDL. Các
câu lệnh SQL được sử dụng để truy xuất và cập nhật dữ liệu trong một
CSDL. Ngôn ngữ SQL được IBM sử dụng đầu tiên trong hệ quản trị
CSDL System R vào giữa những năm 70, hệ ngôn ngữ SQL đầu tiên
(SEQUEL2) được IBM công bố vào tháng 11 năm 1976. Năm 1989, viện
tiêu chuẩn quốc gia Hoa kỳ (ANSI) công nhận SQL là ngôn ngữ chuẩn để
truy cập CSDL quan hệ trong văn bản ANSI SQL89. Năm 1989, tổ chức
tiêu chuẩn quốc tế (ISO) công nhận SQL ngôn ngữ chuẩn để truy cập
CSDL quan hệ trong văn bản ISO 9075-1989. SQL được phát triển và sử
dụng rộng rãi cho tới ngày nay với các hệ quản trị CSDL (RDBMS) như:
SQL Server,MySQL, SQLite, Oracle,…vì những lợi ích to lớn mang lại.
Trong hầu hết các ứng dụng, các lợi ích mang lại vì một số lý do sau:
• Tính ACID (Atomicity, Consistency, Isolation, Durability) của một
transaction được đảm bảo.
• Với database chuẩn 3, dữ liệu được đảm bảo tính đồng nhất và toàn
vẹn (consistency).
• Có rất nhiều driver cho mọi ngôn ngữ: Java, C#, PHP….
Lập trình SQL được sử dụng để chèn, tìm kiếm, cập nhật, xóa các bản ghi
cơ sở dữ liệu. Điều đó không có nghĩa là SQL không thể làm được điều
đó. Trong thực tế nó có thể làm rất nhiều thứ, những không giới hạn, tối
ưu hóa và bảo trì cơ sở dữ liệu.
một số hệ quản trị cơ sở dữ liệu quan hệ như: MySQL, Oracle, SQL
Server Ms, Sybase,... sử dụng SQL.
Sẽ có một vài HQTCSDL phổ biến được phân tích dưới đây.
8



a. Microsoft SQL Server
- SQL Server là một hệ quản trị cơ sở dữ liệu quan hệ (Relational
Database Management System (RDBMS) ) sử dụng câu lệnh SQL để
trao đổi dữ liệu giữa máy Client và máy cài SQL Server.
- SQL Server được tối ưu để có thể chạy trên môi trường cơ sở dữ liệu rất
lớn lên đến Tera-Byte và có thể phục vụ cùng lúc cho hàng ngàn user.
SQL Server có thể kết hợp “ăn ý” với các server khác như Microsoft
Internet Information Server (IIS), E-Commerce Server, Proxy Server….
- Đặc điểm:
● SQL là ngôn ngữ tựa tiếng Anh.
● SQL là ngôn ngữ phi thủ tục, nó không yêu cầu ta cách thức truy
nhập CSDL như thế nào. Tất cả các thông báo của SQL đều rất dễ sử
dụng và ít khả năng mắc lỗi.
● SQL cung cấp tập lệnh phong phú cho các công việc hỏi đáp DL:
Chèn, cập nhật, xoá các hàng trong một quan hệ. Tạo, sửa đổi, thêm
và xoá các đối tượng trong của CSDL. Điều khiển việc truy nhập tới
cơ sở dữ liệu và các đối tượng của CSDL để đảm bảo tính bảo mật
của cơ sở DL. Đảm bảo tính nhất quán và sự ràng buộc của CSDL.
- Ưu điểm:
● SQL có thể được sử dụng đối với lượng dữ liệu lớn từ database một
cách nhanh chóng và hiệu quả.
● Câu lệnh đơn giản, ngắn gọn, dễ nhớ và dễ dàng sử dụng.
● Được tối ưu hóa với những công nghệ mới nên tốc độ rất cao.
● Tất cả các yêu cầu phức tạp của công việc đều có thể thực hiện
được.
● SQL database sử dụng tiêu chuẩn lâu đời, ANSI và ISO áp dụng.
● Việc sử dụng SQL chuẩn giúp việc quản lý database dễ dàng.
- Nhược điểm:
● Không có các đối tượng như Form (để tạo giao diện ứng dụng),

Report (để tạo các báo cáo), module (lập trình ứng dụng CSDL).
● Ta cần sử dụng các công cụ bên ngoài để lập trình cho các ứng dụng
CSDL SQL: Visual Basic.Net, C#.net, ADO.Net, ..., Crystal Report.
b. MySQL
- MySQL là một trong những cơ sở dữ liệu có khả năng mở rộng phổ
biến nhất hiện nay. Nó giàu các tính năng, là một sản phẩm mã nguồn
mở mạnh mẽ trên các website và các ứng dụng online. Việc bắt đầu với

9


-

-

-

MySQL là cực kì dễ dàng và các nhà phát triển dễ dàng tiếp cận với
một lượng lớn các thông tin về cơ sở dữ liệu trên internet.
MySQL là một trong những ví dụ rất cơ bản về Hệ Quản trị Cơ sở dữ
liệu quan hệ sử dụng Ngôn ngữ truy vấn có cấu trúc (SQL). Tuy nhiên
Mysql không bao quát toàn bộ những câu truy vấn cao cấp như SQL
Server. Vì vậy Mysql chỉ đáp ứng việc truy xuất đơn giản trong quá
trình vận hành của website, thích hợp cho các ứng dụng có truy cập
CSDL trên internet và có thể giải quyết hầu hết các bài toán trong PHP,
Perl.
một số đặc điểm của MySQL:
● MySQL là một phần mềm quản trị CSDL dạng server-based (gần
tương đương với SQL Server của Microsoft).
● MySQL quản lý dữ liệu thông qua các CSDL, mỗi CSDL có thể có

nhiều bảng quan hệ chứa dữ liệu.
● MySQL có cơ chế phân quyền người sử dụng riêng, mỗi người
dùng có thể được quản lý một hoặc nhiều CSDL khác nhau, mỗi
người dùng có một tên truy cập và mật khẩu tương ứng để truy
xuất đến CSDL.
● Khi ta truy vấn tới CSDL MySQL, ta phải cung cấp tên truy cập và
mật khẩu của tài khoản có quyền sử dụng CSDL đó. Nếu không,
chúng ta sẽ không làm được gì cả giống như quyền chứng thực
người dùng trong SQL Server vậy.
Ưu điểm:
● Mysql là phần mềm mã nguồn mở phổ biến nhất và dễ dàng đối
với người mới sử dụng, có thể chạy trên nhiều flatform trong việc
sử dụng.
● Sự linh hoạt về flatform là 1 đặc tính nổi bật của MySQL với các
phiên bản đang được hỗ trợ của Linux, Unix, Windows, MySQL
cho phép tùy biến hoàn toàn theo ý muốn, thêm vào các yêu cầu
thích hợp cho database server.
● MySQL có thể đáp ứng khả năng xử lý những yêu cầu khắt khe
nhất của từng hệ thống, MySQL còn đưa ra các “công cụ” cần thiết
cho các hệ thống doanh nghiệp khó tính bằng tiện ích tải tốc độ
cao, bộ nhớ cache và các cơ chế xử lý nâng cao khác.
● Bảo mật: Có rất nhiều tính năng bảo mật, một số ở cấp cao đều
được xây dựng trong MySQL.
● Do MySQL có engine xử lý tốc độ cao và khả năng chèn dữ liệu
nhanh, hỗ trợ tốt cho các chức năng chuyên dùng cho web,…nên
10


MySQL là lựa chọn tốt nhất cho các ứng dụng web và các ứng
dụng web doanh nghiệp.

- Nhược điểm:
● Độ tin cậy: Cách các chức năng cụ thể được xử lý với MySQL (ví dụ
tài liệu tham khảo, các giao dịch, kiểm toán,...) làm cho nó kém tin
cậy hơn so với một số hệ quản trị cơ sở dữ liệu quan hệ khác.
c. SQLite
-

-

SQLite là một bộ thư viện dùng trong lập trình để hiện thực
một SQL Database Engine có khả năng tự tổ chức quản lý dữ
liệu, không cần server, không cần cấu hình mà vẫn hỗ trợ đầy
đủ các tính năng quản lý giao tác. SQLite hiện đang là SQL
Database Engine mã nguồn mở theo mô hình dữ liệu quan
hệ đang được sử dụng nhiều nhất trên thế giới do tính cơ động
cao, dễ sử dụng, gọn nhẹ, hiệu quả và tin cậy.
Một số đặc điểm chính của SQLite:









-

Đảm bảo đầy đủ 4 đặc tính ACID của các giao tác: SQLite được
đảm bảo đầy đủ 4 tính chất cơ bản của giao tác là tính nguyên tổ

(Atomic), tính nhất quán (Consistent), tính cô lập (Isolated), và tính
bền vững (Durable) thậm chí sau khi hệ thống bị crash hoặc gặp
các sự cố về nguồn điện.
Không cần cấu hình: với SQLite chúng ta sẽ không cần phải cài đặt
hay quản trị nó.
SQLite có gần như toàn bộ các đặc tính phổ biến của SQL theo
chuẩn SQL92. Tuy nhiên còn một số tính năng như RIGHT
OUTER JOIN, FULL OUTER JOIN, FOR EACH STATEMENT
TRIGGER,… chưa được hỗ trợ.
Toàn bộ Database được lưu trữ trong 1 tập tin trên đĩa duy nhất.
Bộ thư viện quản lý rất nhỏ, gọn: dưới 500 KB cho bản đầy đủ tính
năng, và có thể ít hơn nếu loại bớt một số đặc tính.
Đơn giản và dễ sử dụng bộ API tương ứng
Mã nguồn mở được viết bằng ANSI-C, được comment rất tốt và có
thể tái sử dụng với bất cứ mục đích gì.

Ứng dụng của SQLite:


SQLite có thể sử dụng như định dạng tập tin thích hợp cho các ứng
dụng: trước đây các tập tin cấu hình có thể được lưu dưới dạng
file .ini, rồi sau đó là .xml,… tuy nhiên chúng ta sẽ cần phải viết
hoặc phụ thuộc vào việc sử dụng các parser phù hợp. Sử dụng
11


SQLite không những giúp chúng ta khắc phục được yếu điểm này
mà chương trình của chúng ta lại còn có thể chạy trên nhiều nền
tảng khác nhau.
● SQLite có thể sử dụng làm CSDL cho các thiết bị điện tử: SQLite

nhỏ, sử dụng bộ nhớ, không gian lưu trữ và băng thông đĩa hiệu
quả, tin cậy mà không cần phải quản trị bởi các quản trị viên
chuyên nghiệp. Nếu bạn đang viết ứng dụng trên các thiết bị chạy
iOS như iPhone, iPad,… hay các thiết bị chạy Android hoặc
Windows Mobile,… thì SQLite chính là CSDL phù hợp cho các
thiết bị di động này.
- Một số hạn chế của SQLite:
● Tính đồng thời: SQLite sử dụng cơ chế khóa coarse-gained locking
có thể hỗ trợ nhiều người đọc dữ liệu, nhưng chỉ có 1 người có thể
ghi dữ liệu một lúc mà thôi.
● SQLite không có tính năng quản lý người dùng.
● Nối kết mạng: mặc dù SQLite có thể được chia sẻ thông qua các
network file systems, tuy nhiên độ trễ giữa các hệ thống tập tin này
sẽ ảnh hưởng nghiêm trọng tới hiệu suất thực hiện của SQLite
● Phù hợp với các ứng dụng có qui mô dữ liệu nhỏ: trong thời đại
bùng nổ thông tin như hiện nay, SQLite không phải là lựa chọn lý
tưởng để đáp ứng các nhu cầu xử lý trên 1 khối lượng dữ liệu lớn,
phát sinh liên tục.
d. PostgreSQL
- PostgreSQL là hệ quản trị cơ sở dữ liệu quan hệ mã nguồn mở tiên tiến
mà mục đích chính là tuân thủ theo chuẩn và khả năng mở rông.
PostgreSQL hay còn gọi là Postgree áp dụng chuẩn SQL ANSI/IOS
cùng với các phiên bản.
- So với các hệ quản trị cơ sử dữ liệu quan hệ khác, PostgreSQL khá
khác. Nó hỗ trợ hướng đối tượng mạnh mẽ và chức năng cơ sở dữ liệu
quan hệ. Ví dụ như hỗ trợ hoàn toàn cho các giao dịch đáng tin cậy
như là Atomicity, Consistency, Isolation, Durability (ACID).
- Do có nền tảng công nghệ mạnh mẽ, Postgres có hoàn toàn có khả
năng xử lý nhiều tiến trình rất hiệu quả. Sự hỗ trợ đồng thời đạt được
mà không cần đọc các khóa nhờ vào sự thực hiện của Multiversion

Concurrency Control (MVCC), mà nó cũng đảm bảo việc tuân thủ theo
ACID.
- Ưu điểm của PostgreSQL:

12


Là một chuẩn SQL phù hợp với hệ quản trị cơ sở dữ liệu quan
hệ: PostgreSQL là hệ quản trị cơ sở dữ liệu quan hệ mã nguồn
mở, miễn phí và mạnh mẽ.
● Cộng đồng mạnh: PostgreSQL được hỗ trợ bởi một cộng đồng
nhiệt tình và đầy kinh nghiệm.
● Hỗ trợ mạnh mẽ từ các bên thứ 3: Bất kể các tính năng tiên tiến
thì PostgreSQL đều được hỗ trợ bởi các công cụ tuyệt vời của
bên thứ 3 trong việc quản lý cơ sơ dữ liệu.
● Sự mở rộng: Nó có thể mở rộng lập trình PostgreSQL với các
thủ tục lưu trữ, giống như một RDBMS tiên tiến.
● Đối tượng hóa: PostgreSQL không chỉ là một hệ quản trị cơ sở
dữ liệu quan hệ, mà nó còn đối tượng hóa dữ liệu.
- Nhược điểm của PostgreSQL:
● Hiệu suất: Đối với các toán tử đơn giản thì PostgreSQL thực
hiện kém hiệu quả hơn so với các hệ quản trị cơ sở dữ liệu quan
hệ khác như MySQL. Nhưng đối với toán tử phức tạp thì
PostgreSQL thực hiện tốt hơn rất nhiều.
● Sự phổ biến: Do chưa có sự phổ biến nên ảnh hưởng đến người
dùng nhận được sự hỗ trợ kịp thời.
● Hosting: Do các yếu tố được đề cập bên trên nên nó khó được hỗ
trợ bởi các host.
e. Bảng so sánh
- Dưới đây là bảng so sánh các đặc điểm chính của các hệ quản trị cơ sở

dữ liệu đã được mô tả phía trên:


SQL Server

MySQL

SQLite

PostgreSQL

ACID

yes

yes

yes

yes

transactions

yes

yes

yes

yes


Referential integrity

yes

yes

yes

yes

Fine-grained locking

yes

yes

no

yes

max DB size

524,272
TB unlimited
(32 767 files *
16 TB max file
size)

128

TB
(231 pages
* 64 KB
max page
size)

unlimited

max table size

524,272 TB

Limited

32 TB

MyISAM

13


storage limits: by
256
TB; size
Innodb storage
limits: 64 TB

file

max CHAR size


2 GB

64 KB (text)

2 GB

1 GB

max NUMBER size

126 bits

64 bits

64 bits

unlimited

max DATE value

9999

9999

No DATE 5,874,897
type

Materialized view


yes

no

no

R-/R+ tree

Spatial Indexes Spatial Indexes yes

yes

Hash

yes

Heap
only

yes

Expression

yes

no

yes

yes


Partial

yes

no

yes

yes

Reverse

yes

no

no

yes

Bitmap

no

no

no

yes


GiST

no

no

no

yes

Full-text seach

yes

yes

yes

yes

Data Domain

yes

no

no

yes


Cursor

yes

yes

no

yes

Trigger

yes

yes

yes

yes

Function

yes

yes

no

yes


Procedure

yes

yes

no

yes

External routine

yes

yes

yes

yes

4.

tables no

yes

Ví dụ về SQL
- Đối với CSDL quan hệ, điểm mạnh lớn nhất đó là hỗ trợ transaction
(NoSQL không hỗ trợ điều này). Đối với các hệ thống như: Ngân hàng,

buôn bán, quản lý kho,... Các hệ thống này cần bảo mật cao, cũng như

14


-

-

-

thông tin cần chặt chẽ, nhất quán thì CSDL quan hệ là một sự lựa chọn
phù hợp.
Hãy xem xét một hệ thống theo dõi hàng hóa của một nhà kho. Ta cần
phải ghi lại những điều sau:
● Các sản phẩm được đưa đến kho và được đặt ở địa điểm hay khoang
nào.
● Sự dịch chuyển của các hàng hóa trong kho. VD: sắp xếp kho để các
sản phẩm cùng loại được đặt cùng một vị trí
● Các đơn đặt hàng và việc di chuyển các hàng hóa khỏi nhà kho cho
việc giao hàng
Giả sử có một giao dịch vận chuyển sản phẩm P từ khoang A sang
khoang B với số lượng là 5. Sẽ có 2 hành động được thực hiện:
● Khoang A trừ số lượng sản phẩm P là 5
● Khoang B thêm số lượng sản phẩm P là 5
Như vậy, sau khi kết thúc giao dịch, hai hành động cập nhật ở khoang A
và khoang B đều thành công nếu giao dịch thành công, hoặc sẽ không có
hành động nào thực hiện nếu có lỗi xảy ra để đảm bảo tính nhất quán và
phù hợp với giao dịch.


15


Phần II: Các hệ quản trị cơ sở dữ liệu phi
quan hệ - NoSQL
1. NoSQL
a. Khái niệm
NoSQL là 1 dạng CSDL mã nguồn mở và được viết tắt bởi: NoneRelational SQL hay có nơi thường gọi là Not-Only SQL.
- NoSQL được phát triển trên Javascript Framework với kiểu dữ liệu là
JSON và dạng dữ liệu theo kiểu key và value.
- NoSQL ra đời như là 1 mảnh vá cho những khuyết điểm và thiếu xót
cũng như hạn chế của mô hình dữ liệu quan hệ RDBMS (Relational
Database Management System - Hệ quản trị cơ sở dữ liệu quan hệ) về
tốc độ, tính năng, khả năng mở rộng,...
- Với NoSQL bạn có thể mở rộng dữ liệu mà không lo tới những việc như
tạo khóa ngoại, khóa chính, kiểm tra ràng buộc .v.v ...
- NoSQL bỏ qua tính toàn vẹn của dữ liệu và transaction để đổi lấy hiệu
suất nhanh và khả năng mở rộng.
- Cơ sở dữ liệu NoSQL làm việc như thế nào? Thay vì các bảng, cơ sở dữ
liệu NoSQL có định hướng tài liệu. Bằng cách này, dữ liệu không có cấu
trúc (chẳng hạn như bài báo, ảnh, dữ liệu truyền thông xã hội, video
hoặc nội dung trong một bài đăng blog) có thể được lưu trữ trong một
tài liệu đơn giản có thể tìm thấy nhưng không nhất thiết phải được phân
loại vào các trường như cơ sở dữ liệu quan hệ. Nó trực quan hơn, nhưng
lưu ý rằng lưu trữ dữ liệu với số lượng lớn như thế này đòi hỏi nỗ lực xử
lý thêm và lưu trữ nhiều hơn là dữ liệu SQL có tổ chức cao. Đó là lý do
tại sao Hadoop, một nền tảng máy tính mã nguồn mở và phân tích dữ
liệu có khả năng xử lý dữ liệu khổng lồ trong đám mây, rất phổ biến
cùng với các ngăn xếp cơ sở dữ liệu NoSQL.
- Cơ sở dữ liệu NoSQL cung cấp một lợi thế lớn, đặc biệt cho các nhà

phát triển ứng dụng: dễ truy cập. Các cơ sở dữ liệu quan hệ có quan hệ
đầy đủ với các ứng dụng được viết bằng các ngôn ngữ lập trình hướng
đối tượng như Java, PHP và Python. Cơ sở dữ liệu NoSQL thường có
thể chệch hướng vấn đề này thông qua các API, cho phép các nhà phát
triển thực hiện các truy vấn mà không cần phải học SQL hay hiểu kiến
trúc cơ sở của hệ thống cơ sở dữ liệu của họ.
Các đặc điểm của NoSQL
-

b.

16


High Scalability: Gần như không có một giới hạn cho dữ liệu và người
dùng trên hệ thống.
- High Availability: Do chấp nhận sự trùng lặp trong lưu trữ nên nếu một
node (commodity machine) nào đó bị chết cũng không ảnh hưởng tới
toàn bộ hệ thống.
- Atomicity: Độc lập data state trong các operation.
- Consistency: chấp nhận tính nhất quán yếu, có thể không thấy ngay
được sự thay đổi mặc dù đã cập nhật dữ liệu.
- Durability: dữ liệu có thể tồn tại trong bộ nhớ máy tính nhưng đồng
thời cũng được lưu trữ lại đĩa cứng.
- Deployment Flexibility: việc bổ sung thêm/loại bỏ các node, hệ thống
sẽ tự động nhận biết để lưu trữ mà không cần phải can thiệp bằng tay.
Hệ thống cũng không đòi hỏi cấu hình phần cứng mạnh, đồng nhất.
- Modeling flexibility: Key-Value pairs, Hierarchical data (dữ liệu cấu
trúc), Graphs.
- Query Flexibility: Multi-Gets, Range queries (load một tập giá trị dựa

vào một dãy các khóa).
Một số khái niệm trong NoSQL:
● Fields – tương đương với khái niệm Columns trong SQL.
● Document – thay thế khái niệm row trong SQL. Đây cũng chính là khái
niệm làm nên sự khác biệt giữa NoSQL và SQL, 1 document chứa số
cột (fields) không cố định trong khi 1 row thì số cột(columns) là định
sẵn trước.
● Collection – tương đương với khái niệm table trong SQL. Một
collection là tập hợp các document. Điều đặc biệt là một collection có
thể chứa các document hoàn toàn khác nhau.
● Key-value – cặp từ khóa – giá trị được dùng để lưu trữ dữ liệu trong
NoSQL
● Cursor – tạm dịch là con trỏ. Chúng ta sẽ sử dụng cursor để lấy dữ liệu
từ database.
Ưu điểm của NoSQL:
● Open source: hầu hết các sản phẩm nguồn mở đưa ra cho những người
phát triển với nhiều lợi ích to lớn, đặc biết là việc sử dụng miễn phí.
● Khả năng mở rộng linh hoạt: do không bị ràng buộc chặt về các mối
quan hệ, cấu trúc lưu trữ nên khả năng mở rộng của NoSQL rất linh
động.
-

-

-

17


Các CSDL NoSQL khác nhau cho những dự án khác nhau: mỗi loại

CSDL NoSQL cụ thể sẽ là giải pháp phục vụ cho một hoặc một vài vấn
đề cụ thể.
● NoSQL được các hãng lớn sử dụng: các công ty như Amazon, BBC,
Facebook và Google dựa vào các CSDL NoSQL.
● NoSQL phù hợp với công nghệ đám mây: Những yêu cầu về lưu trữ
của công nghệ đám mây với NoSQL là một sự trùng khớp tự nhiên.
Nhược điểm của NoSQL:
● Hỗ trợ không đồng đều cho các doanh nghiệp: trong khi các nhà cung
cấp chủ chốt của các RDBMS như SQL Server, Oracle, IBM,… thường
đưa ra sự hỗ trợ tốt cho khách hàng thì các nhà cung cấp nguồn mở mới
thành lập không thể được mong đợi sẽ cung cấp hỗ tốt hơn.
● Vấn đề lớn của NoSQL là thiếu về độ chín muồi và các vấn đề về tính
không ổn định, trong khi đó tính chín muồi, hỗ trợ đầy đủ chức năng và
tính ổn định của các RDBMS được thiết lập đã từ lâu.
● tính mới mẻ của NoSQL có nghĩa là không có nhiều lập trình viên và
người quản trị biết công nghệ này. Như vậy sẽ rất khó khăn cho các
công ty tìm người có hiểu biết phù hợp.
● mỗi CSDL NoSQL có các giao diện lập trình ứng dụng API riêng, các
giao diện truy vấn riêng… Sự thiếu hụt các tiêu chuẩn sẽ gây ra rất
nhiều khó khăn khi chuyển từ một nhà cung cấp này sang một nhà cung
cấp khác nếu có nhu cầu.


-

2. Phân loại NoSQL
-

a.
-


Có bốn loại chung (loại phổ biến nhất) của cơ sở dữ liệu NoSQL. Mỗi loại
đều có các thuộc tính và giới hạn riêng. Không có một giải pháp duy nhất
nào tốt hơn tất cả các giải pháp khác, tuy nhiên có một số cơ sở dữ liệu tốt
hơn để giải quyết các vấn đề cụ thể.

Key-value stores
Key-value stores là kiểu lưu trữ đơn giản nhất trong các loại CSDL NoSQL
đồng thời nó cũng là kiểu lưu trữ cho tất cả các HQTCSDL NoSQL. Thông
thường, các HQT CSDL Key-value lưu trữ dữ liệu dưới dạng key (là một
chuỗi duy nhất) liên kết với value có thể ở dạng chuỗi văn bản đơn giản
hoặc các tập, danh sách dữ liệu phức tạp hơn. Quá trình tìm kiếm dữ liệu
thường sẽ được thực hiện thông qua key, điều này dẫn đến sự hạn chế về độ
chính xác.

18


-

-

-

Với kiểu lưu trữ này, ta sẽ rất dễ dàng và nhanh chóng truy xuất được thông
tin của một người thông qua key, nhưng không hề đơn giản trong việc xử lý
những dữ liệu phức tạp.
Như vậy, với sự đơn giản của cách lưu trữ dạng Key-value làm cho các
CSDL loại này rất phù hợp với các ứng dụng cần truy xuất nhanh và khả
năng mở rộng cao, chẳng hạn như là các quản lý các phiên giao dịch

(session) hoặc quản lý các thông tin về giỏ hàng vì trong trường hợp này,
việc biết được ID của phiên giao dịch hoặc ID của khách hàng là điều rất cần
thiết. Hay việc quản lý thông tin của sản phẩm bao gồm những thông tin cơ
bản, các sản phẩm liên quan, đánh giá,… sẽ được lưu trữ dưới dạng key là
mã sản phẩm chẳng hạn và value là các thông tin còn lại của sản phẩm cần
lưu trữ. Điều này, cho phép ta truy xuất được tất cả các thông tin về một sản
phẩm chỉ thông qua mã sản phẩm cực kỳ nhanh.
Ưu điểm:
● Flexible data modeling: Vì mô hình dữ liệu rất linh hoạt và không
tuân theo bất kỳ cấu trúc dữ liệu nào, nên nó có thể cung cấp một mô
hình dữ liệu để phù hợp với các yêu cầu của ứng dụng. Có thể mở
rộng theo chiều ngang.
● Các keys được dùng để truy xuất thẳng tới các giá trị tìm kiếm, mà
không cần thông qua quá trình index (quá trình tìm kiếm dữ liệu và
đánh giá độ chính xác của dữ liệu đó của hệ thống CSDL), giúp quá
trình tìm kiếm diễn ra nhanh chóng.
● High performance: key-value database không cần thực hiện các phép
toán như: join, union, lock,… Do đó, hiệu năng sẽ tốt hơn so với cơ sở
dữ liệu quan hệ.

19


Có thể sử dụng key-value database với các máy chủ phân tán. Do đó
dữ liệu có thể được phân tán qua các máy chủ để tránh mất dữ liệu tại
1 điểm.
● Việc tìm kiếm trở lên dễ dàng và nhanh chóng khi biết giá trị key của
đối tượng, không cần tìm kiếm thông qua các cột hoặc các bảng.
● CSDL key – value có thể mở rộng theo chiều ngang dễ dàng và chi
phí vận hành thấp.

Nhược điểm:
● Tính linh hoạt của CSDL dạng key – value bị đánh đổi bởi tính chính
xác. Hầu như rất khó để truy xuất giá trị chính xác từ CSDL dạng này
vì dữ liệu được lưu trữ theo blob, nên kết quả trả về hầu như đều theo
blob. Điều này gây ra khó khan khi báo cáo số liệu hoặc cần chỉnh sửa
một phần của các giá trị.
● Bởi vì quá trình tìm kiếm thông qua key, điều này dẫn đến sự hạn chế
về độ chính xác.
Một vài cơ sở dữ liệu key-value phổ biến là Riak, Redis(thường dùng phía
server), memcached, Berkeley DB, HamsterDB, Amazon DynamoDB(mã
nguồn đóng), Project Voldemort và Couchbase.


-

-

Document Oriented database

b.
-

-

CSDL Document được thiết kế để quản lý và lưu trữ dữ liệu ở dạng
document. Những document này được mã hóa về các dạng chuẩn như là
XML, JSON (Javascript Option Notation) hay BSON (Binary JSON).
Khác với các kiểu lưu trữ dạng Key-value, giá trị của cột trong các CSDL
document chứa dữ liệu bán cấu trúc (Semi-Structured Data), đặc biệt là
cặp thuộc tính name (key) – value. Một điểm khác nữa so với các kiểu lưu

trữ dữ liệu dạng Key-value đơn giản là cả key và value đều có thể tìm
kiếm trong CSDL Document.

20


-

-

-

c.
-

CSDL Document phù hợp cho việc lưu trữ và quản lý tập dữ liệu có kích
thước lớn như là tài liệu văn bản, tin nhắn, cũng như biểu diễn một thực
thể CSDL như là Product hay Customer (tài liệu khái niệm trong XML).
Ưu điểm:
● Với document database, việc tìm kiếm trở lên chính xác hơn và nhanh
chóng khi cả key và value đều có thể tìm kiếm trong CSDL.
● Với cách lưu trữ ở dạng JSON, BSON hoặc XML, thì CSDL
document là sự lựa chọn phù hợp.
● Có khả năng mở rộng theo chiều ngang và có thể lưu bất kỳ
collection nào bạn muốn.
Nhược điểm:
● Không đảm bảo tính toàn vẹn của dữ liệu.
● Không đảm bảo được tính ACID
● Không phù hợp cho các dữ liệu kết nối với nhau.
● Query model limited to keys

Một số cơ sở dữ liệu Document phổ biến mà chúng ta hay gặp là:
MongoDB, CouchDB, Terastore, OrientDB, RavenDB.

Column-oriented databases (column-family)
Column Family được biết đến rộng rãi nhất qua sự triển khai BigTable của
Google. Nhìn bề ngoài, chúng khá giống với CSDL quan hệ nhưng thực tế
là hoàn toàn khác. Một số sự khác biệt dễ thấy nhất là việc lưu trữ dữ liệu
theo dòng đối với các HQT CSDL quan hệ với việc lưu trư dữ liệu theo cột
của các HQT CSDL Conlumn Family. Và các tư tưởng của cả hai loại
CSDL này cũng hoàn toàn khác nhau. Chúng ta không thể áp dụng cùng

21


-

-

một giải pháp mà chúng ta đã sử dụng trong CSDL quan hệ vào CSDL
Conlumn Family. Bởi vì, CSDL Column Family là các CSDL phi quan hệ.
Với các CSDL Column Family, chúng ta cần quan tâm đến các khái niệm
sau:
● Column family (họ cột): Một column family là cách thức dữ liệu
được lưu trữ trên đĩa. Tất cả dữ liệu trong một cột sẽ được lưu trên
cùng một file. Một column family có thể chứa super column hoặc
column.
● Super column (siêu cột): Một super column có thể được dùng như
một dictionary (kiểu từ điển). Nó là một column có thể chứa những
column khác (mà không phải là super column).
● Column (cột): Một column là một bộ gồm tên, giá trị và dấu thời gian

(thông thường chỉ quan tâm tới key-value).
Column và super column trong column family database dùng thay thế
nhau, có nghĩa là chúng sẽ là 0 byte nếu chúng không có chứa dữ liệu.
Không giống như một bảng, thứ duy nhất chúng ta cần xác định trong
column family database tên cột và các tùy chọn chính (không có lược đồ cố
định).

22


Row key: mỗi dòng sẽ có một định danh row key duy nhất. Nó được
sử dụng để nhận biết dữ liệu nằm ở các column của row nào.
● Column: mỗi một column chứa cặp name/value và timestamp.
● Name: tên của cặp name/value
● Value: giá trị của cặp name/value
● Timestamp: Cung cấp ngày đã được lưu.
CSDL Column Family được thiết kế để chạy trên một số lượng lớn các
máy, và lưu trữ một lượng dữ liệu cực lớn. Chúng ta không thể lưu trữ một
lượng lớn dữ liệu trong cơ sở dữ liệu quan hệ vì chắc chắn chúng sẽ nhanh
chóng bị sụp đổ hoặc là chết rất nhanh về kích thước của dữ liệu và những
truy vấn đó được các CSDL Column Family xử lý một cách dễ dàng. Các
CSDL Column Family loại bỏ các khái niệm trừu tượng, những thứ làm
cho nó cứng nhắc khi chạy trên một cụm máy.


-

23



-

-

-

Ưu điểm:
● Tiết kiệm được bộ nhớ.
● Query nhanh hơn row store khi có lượng dữ liệu lớn.
● một số câu query thực hiện rất nhanh . Ví dụ, tính tổng lương của tất
cả các nhân viên trong công ty. Vì dữ liệu được lưu trữ theo cột, nên
việc tính tổng chỉ cần dựa vào cột lương của nhân viên để tính.
● Khả năng nén dữ liệu: Column Store sẽ có khả năng nén dữ liệu dễ
dàng vì được lưu theo cột, các cột thì lại chỉ theo một kiểu dữ liệu
cụ thể như char, int, bigint,... Tùy vào định dạng mà sẽ có kiểu nén
thích hợp.
● Parallel Processing: Column Store hỗ trợ, hay nói cách khác là rất
thích hợp với việc query song song, hay là nhiều process cũng thực
hiện query. Ví dụ như khi bạn cần đưa ra tel và address của user
Hiếu. Khi bạn đã biết id là 1 thì bạn có 1 process chạy song song
query trên 2 block, 1 trên block lưu tel và 1 trên block lưu address.
Thời gian query giảm xuống còn 1 nửa.
Nhược điểm:
● Việc xây dụng được column store là khó hơn rất nhiều vì để tận
dụng được điểm mạnh của column store thì các hệ thống phải xây
dựng rất nhiều việc liên quan như: khả năng nén dữ liệu, phân chia
dữ liệu, query song song, hệ thống ổ cứng... Vì chỉ có như vậy mới
phát huy được hết sức mạng của column store.
● Một số trường hợp câu query có thể bị chậm khi cần trả về thông tin
của một hoặc nhiều row trong bảng.

● Không phù hợp cho các dữ liệu kết nối với nhau.
Một số sản phẩm tiêu biểu của Column Store Database là: Bigtable,
Cassandra, Hbase, Vertica, Druid, Accumulo, Hypertable,…

Graph databases

d.
-

Cơ sở dữ liệu đồ thị là một cơ sở dữ liệu dạng đồ thị sử dụng các cấu trúc
đồ thị với các nút (nodes), các mối quan hệ (relationships), các thuộc tính
(properties) để mô tả và lưu trữ dữ liệu.

24


-

-

-

-

Chúng ta có thể thực hiện những truy vấn phức tạp hơn như lọc trên các
thuộc tính quan hệ, xem xét trọng số của người đó, .. Graph Database
thường được sử dụng để giải quyết các vấn đề về mạng.
Trong thực tế, hầu hết các trang web mạng xã hội đều sử dụng một số hình
thức của graph database để làm những việc mà chúng ta đã biết như: kết
bạn, bạn của bạn , …

Ưu điểm:
● Các câu query thực sự rất nhanh khi tìm kiếm mối quan hệ giữa các
nodes. CSDL này là hỗ trợ điều hướng nhanh hơn giữa các các mối
quan hệ . Phù hợp với các ứng dụng mạng xã hội, các chức năng
suggest, recommend, quản lý các mạng lưới(network, traffic...) ...
● Performance là ưu điểm rất lớn của graph database so với relational
database và Nosql database. Khi dữ liệu trở nên lớn cùng với việc sử
dụng nhiều câu lệnh join sẽ khiến performance trở nên rất tệ, trong
khi thì graph database với cách query dữ liệu chỉ focus vào 1 phân
khu của graph có chứa các dữ liệu liên quan nên performance không
thay đổi nhiều.
● Chúng ta có thể thêm vào các nodes, các relationships, các subgraph
mà không làm ảnh hưởng đến dữ liệu cũ, các query cũ.
Nhược điểm:
● Phải sử dụng các API có sẵn.
● CSDL graph không hữu ích cho các trường hợp sử dụng nghiệp vụ
vì chúng không hiệu quả trong việc xử lý khối lượng giao dịch lớn.
Bởi vì chúng không được tối ưu hoá để lưu trữ và truy xuất các thực
25


×