my sql.storage engine

9
Nghiên cứu phương pháp xây dựng storage engine cho hqun trcơ sở dliu MySQL Nguyn ThKhuê Trường Đại học Công nghệ Chuyên ngành: Hthống thông tin; Mã số: 60 48 05 Cán bộ hướng dn khoa hc: Tiến sĩ Nguyễn Hải Châu Năm bảo v: 2012 Abstract. Tìm hiểu kiến trúc pluggable storage engine của MySQL. Thông qua việc tìm hiểu mt sstorage engine điển hình và một sxu hướng lưu trữ dliu ni bt hiện nay cùng một sstorage engine tiêu biểu của xu hướng đó (như lưu trữ dliu theo ct vi InfoBright, NoSQL với HandlerSocket), đưa ra một cái nhìn tổng quan vMySQL storage engine cũng như một sgợi ý khi lựa chọn storage engine phù hợp cho mt ng dụng. Tìm hiểu nhng yếu tcần cân nhắc khi xây dựng storage engine như lựa chọn cách tổ chức lưu trữ dliệu, cách thức lưu đệm, htrchmc, htrgiao tác, các yêu cầu đặc biệt,… và cuối cùng đi tới nghiên cứu mt tiến trình xây dựng mt storage engine mới được cho là khả thi. Keywords: Hthống thông tin; Hqun trcơ sở dliu; Khai thác dữ liu Content. I. MỞ ĐẦU Tchức lưu trữ và truy cập tp (hay thiết kế vật lí cơ sở dliệu) là một trong các giải pháp hữu hiu nhm ci thin hiu sut thc thi ca mt hthống cơ sở dliu trong những tình huống cth. Tuy nhiên, các cơ chế truy cp tp hiện nay là vô cùng phong phú và không có cơ chế truy cp hiu qucho mọi trường hp. Do đó, nếu có thể xây dựng các cơ chế truy cp tp cho tng tình huống khác nhau như là những gói giải pháp riêng sđem lại hiu qucao hơn trong triển khai ng dụng cũng như đáp ứng được nhiu nhu cu của người dùng trong nhiều hoàn cảnh khác nhau. Đó cũng chính là cách mà MySQL đưa ra khi sdng lp pluggable storage engine cho phép lựa chn hoc xây dựng các các cơ chế truy cp tp thông qua các storage engine khác nhau và dễ dàng tra lắp với máy chủ. II. TỔNG QUAN VỀ MYSQL A. Hệ quản trị cơ sở dữ liệu MySQL MySQL là hệ qun trcơ sở dliu quan hmã nguồn mthuc shu ca MySQL AB. MySQL được phát triển trên ngôn ngữ C/C++, dựa theo mô hình client – server, htrđầy đủ các câu lnh SQL. MySQL sdng chiến lược phát triển song song và sử dụng cơ chế cp giấy phép kép – bên cạnh các sản phẩm tuân thủ đúng giấy phép nguồn mGPL, MySQL cũng được cấp phép như một sn phẩm thương mại.

Upload: le-nhan

Post on 04-Jul-2015

76 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: My sql.storage engine

Nghiên cứu phương pháp xây dựng storage engine

cho hệ quản trị cơ sở dữ liệu MySQL

Nguyễn Thị Khuê

Trường Đại học Công nghệ

Chuyên ngành: Hệ thống thông tin; Mã số: 60 48 05

Cán bộ hướng dẫn khoa học: Tiến sĩ Nguyễn Hải Châu

Năm bảo vệ: 2012

Abstract. Tìm hiểu kiến trúc pluggable storage engine của MySQL. Thông qua việc tìm hiểu

một số storage engine điển hình và một số xu hướng lưu trữ dữ liệu nổi bật hiện nay cùng một số

storage engine tiêu biểu của xu hướng đó (như lưu trữ dữ liệu theo cột với InfoBright, NoSQL

với HandlerSocket), đưa ra một cái nhìn tổng quan về MySQL storage engine cũng như một số

gợi ý khi lựa chọn storage engine phù hợp cho một ứng dụng. Tìm hiểu những yếu tố cần cân

nhắc khi xây dựng storage engine như lựa chọn cách tổ chức lưu trữ dữ liệu, cách thức lưu đệm,

hỗ trợ chỉ mục, hỗ trợ giao tác, các yêu cầu đặc biệt,… và cuối cùng đi tới nghiên cứu một tiến

trình xây dựng một storage engine mới được cho là khả thi.

Keywords: Hệ thống thông tin; Hệ quản trị cơ sở dữ liệu; Khai thác dữ liệu

Content.

I. MỞ ĐẦU

Tổ chức lưu trữ và truy cập tệp (hay thiết kế vật lí cơ sở dữ liệu) là một trong các giải pháp hữu hiệu

nhằm cải thiện hiệu suất thực thi của một hệ thống cơ sở dữ liệu trong những tình huống cụ thể. Tuy

nhiên, các cơ chế truy cập tệp hiện nay là vô cùng phong phú và không có cơ chế truy cập hiệu quả

cho mọi trường hợp. Do đó, nếu có thể xây dựng các cơ chế truy cập tệp cho từng tình huống khác

nhau như là những gói giải pháp riêng sẽ đem lại hiệu quả cao hơn trong triển khai ứng dụng cũng như

đáp ứng được nhiều nhu cầu của người dùng trong nhiều hoàn cảnh khác nhau. Đó cũng chính là cách

mà MySQL đưa ra khi sử dụng lớp pluggable storage engine cho phép lựa chọn hoặc xây dựng các các

cơ chế truy cập tệp thông qua các storage engine khác nhau và dễ dàng tra lắp với máy chủ.

II. TỔNG QUAN VỀ MYSQL

A. Hệ quản trị cơ sở dữ liệu MySQL

MySQL là hệ quản trị cơ sở dữ liệu quan hệ mã nguồn mở thuộc sở hữu của MySQL AB.

MySQL được phát triển trên ngôn ngữ C/C++, dựa theo mô hình client – server, hỗ trợ đầy đủ các câu

lệnh SQL. MySQL sử dụng chiến lược phát triển song song và sử dụng cơ chế cấp giấy phép kép –

bên cạnh các sản phẩm tuân thủ đúng giấy phép nguồn mở GPL, MySQL cũng được cấp phép như một

sản phẩm thương mại.

Page 2: My sql.storage engine

B. Kiến trúc MySQL

MySQL được mô tả như một hệ thống phân lớp các hệ thống con với các lớp như: lớp kết nối, lớp

connection pool, lớp truy vấn và đặc biệt là lớp plugable storage engine tạo nên sự linh hoạt vượt trội

cho MySQL thông qua việc xây dựng các cách thức tổ chức tổ chức lưu trữ dữ liệu, truy cập tệp, lưu

đệm, lập chỉ mục, … phù hợp với từng ứng dụng và lớp cuối cùng là lớp truy cập tệp.

C. Truy vấn dữ liệu trên MySQL

Giống như mọi hệ quản trị cơ sở dữ liệu quan hệ khác, quá trình truy vấn dữ liệu trên MySQL diễn ra

theo quy trình: yêu cầu người dùng được đưa vào thông qua giao diện SQL, sau đó được phân tách, tối

ưu, thực thi và cuối cùng kết quả được gửi lại cho người dùng thông qua giao diện SQL.

Điểm đặc biệt trong quá trình truy vấn trên MySQL là khả năng lưu đệm kết quả truy vấn trong bộ

đệm truy vấn. Một số hệ quản trị cơ sở dữ liệu có khả năng lưu lại các kế hoạch thực thi nên máy chủ

có thể bỏ qua quá trình phân tách, tối ưu cho các truy vấn đã được thực thi trước đó. MySQL còn tốt

hơn khi cho phép lưu trữ chính kết quả của các truy vấn đã được thực hiện và MySQL có thể lấy kết

quả được lưu đệm trước đó mà không cần mất chi phí thực hiện lại quá trình truy vấn. Điều đó giúp cải

thiện đáng kể hiệu suất truy vấn dữ liệu.

Ngoài ra, MySQL còn sử dụng rất nhiều bộ đệm như: bộ đệm bảng, bộ đệm bản ghi, bộ đệm khóa, bộ

đệm quyền truy cập, bộ đệm tên máy chủ để cải thiện hiệu suất thực thi truy vấn của mình.

D. Các đặc trưng của MySQL

Các đặc trưng chính của MySQL gồm:

Quản lí kết nối và an ninh. Các kết nối tới máy chủ được thực hiện trong các luồng đơn và được máy

chủ xác thực dựa trên tên người sử dụng, địa chỉ host ban đầu và mật khẩu.

Quản lí đồng thời: MySQL quản lí đồng thời dựa trên việc sử dụng 2 khóa: khóa chia sẻ (S) – cho

phép nhiều máy khách có thể cùng đọc một dữ liệu tại cùng một thời điểm; và khóa độc quyền (X) –

chặn mọi thao tác đọc tới dữ liệu khi dữ liệu đó đang được ghi. MySQL sử dụng hai chiến lược khóa

quan trọng là: khóa mức bảng – khóa toàn bộ bảng; và khóa mức dòng – khóa trên từng dòng dữ liệu.

Các cơ chế khóa trong MySQL thường được triển khai trong các storage engine, tuy nhiên, các máy

chủ MySQL cũng có thể sử dụng một khóa mức bảng cho câu lệnh ALTER TABLE không liên quan

gì tới storage engine.

Giao tác: MySQL có khả năng hỗ trợ giao tác, tuy nhiên các giao tác được triển khai ở mức storage

engine chứ không phải ở mức server. Các giao tác tuân thủ theo mô hình ACID, hỗ trợ 4 mức độ cách

ly theo chuẩn SQL là: READ UNCOMMITED, READ COMMITED, REPEATABLE READ và

SERIALIZABLE (mặc định là REPEATABLE READ), có khả năng phát hiện và phá vỡ deadlock

đồng thời lưu biên bản giao tác để nâng cao hiệu quả thực hiện giao tác. Giao tác triển khai trong các

storage engine như InnoDB, NDB cluster, … với những cơ chế khác nhau.

Page 3: My sql.storage engine

Điều khiển đồng thời đa phiên bản: nhằm nâng cao hiệu quả của khóa mức dòng, MySQL sử dụng

cơ chế điều khiển đồng thời đa phiên bản (Multiversion Concurrency Control – MVCC) để cải thiện

tính đồng thời.

Hỗ trợ chỉ mục: cơ chế chỉ mục được triển khai trong các storage engine theo những cách thức không

giống nhau. Tuy nhiên, có một số loại chỉ mục thường được sử dụng như: chỉ mục B-Tree, chỉ mục

băm, chỉ mục tiền tố, chỉ mục cụm, chỉ mục cụm và chỉ mục gói.

III. MYSQL PLUGGABLE STORAGE ENGINE

A. Tổ chức dữ liệu và các cơ chế truy cập tệp

Khi bắt đầu phát triển một ứng dụng cơ sở dữ liệu bất kì, quan tâm tớ cơ chế truy cập tệp hay còn gọi

là thiết kế vật lí cơ sở dữ liệu là một yếu tố không thể bỏ qua. Nó là một trong các yếu tố quan trọng

góp phần cải thiện hiệu suất thực thi của toàn bộ hệ thống. Mục đích chính của các cơ chế truy cập tệp

là tối thiểu chi phí vào/ra trong hệ cơ sở dữ liệu, tức là cho phép tìm kiếm nhanh chóng và hiệu quả chỉ

những dữ liệu liên quan thông qua con đường truy cập tối ưu nhất; và tổ chức dữ liệu trên đĩa sao cho

chi phí vào/ra khi tìm kiếm dữ liệu liên quan là tối thiểu.

Hiện nay có rất nhiều kĩ thuật phổ biến như: phân đoạn dữ liệu, tổ chức tệp, sử dụng các cơ chế lưu

đệm và lập chỉ mục.

B. Storage engine là gì?

Storage engine hay thực chất là kiểu bảng, là một khái niệm mới do MySQL đưa ra để chỉ một tập các

cơ chế lưu trữ, truy cập, hỗ trợ giao tác, các cơ chế khóa, cô lập, lập chỉ mục, …. Nhằm bổ sung các

kiểu lưu trữ mới cho máy chủ MySQL, làm nhiệm vụ cầu nối giữa máy chủ MySQL với hệ thống tệp

của hệ điều hành.

Storage engine là một thành phần trong máy chủ cơ sở dữ liệu MySQL chịu trách nhiệm thực hiện các

phép toán vào/ra dữ liệu cho một cơ sở dữ liệu cũng như cho phép và bắt buộc các tập tính năng nhất

định phục vụ nhu cầu của một ứng dụng riêng.

Các storage engine có thể tra lắp dễ dàng vào máy chủ MySQL thông qua một cơ chế đặc biêt chỉ duy

nhất có trong MySQL, pluggable storage engine.

C. Kiến trúc pluggable storage engine

Là một lớp trong kiến trúc của máy chủ MySQL chịu trách nhiệm trừu tượng hóa lớp lưu trữ vật lí với

các lớp logic của máy chủ và cung cấp các phép toán vào/ra mức thấp cho server. Nó cho phép lựa

chọn storage engine đã có phù hợp nhất với ứng dụng hoặc xây dựng mới các storage engine thông

qua một giao diện nhất quán và đơn giản đồng thời cung cấp một tập chuẩn quản lí và dịch vụ hỗ trợ

phổ biến cho mọi storage engine phía dưới. Điều đó khiến cho các storage engine có thể tra lắp dễ

dàng vào máy chủ sử dụng chung một giao diện chuẩn. Các storage engine có thể được cắm và rút cắm

vào một máy chủ đang chạy một cách dễ dàng.

D. Một số storage engine điển hình

MySQL hỗ trợ một vài storage engine như:

Page 4: My sql.storage engine

MyISAM: là storge engine mặc định từ phiên bản 3.23, thường được sử dụng trong các ứng dụng kho

dữ liệu, thương mại điện tử, các ứng dụng doanh nghiệp. các bảng MyISAM được lưu trữ trên 3 tệp:

.frm – tệp định nghĩa bảng, .myd – chứa các dòng dữ liệu, .myi: chứa các chỉ mục của bảng. Nó sử

dụng 3 định dạng bảng là: cố định, động và nén. Các phương thức lập chỉ mục gồm: B-Tree, R-Tree

(chỉ mục cho dữ liệu địa lí) và đặc biệt là fulltext - được thiết kế riêng và duy nhất hiện nay cho tìm

kiếm fulltext của MySQL. MyISAM sử dụng các khóa mức bảng với 3 loại khóa: READ LOCAL, các

khóa chia sẻ (S) và các khóa độc quyền (X). MyISAM không hỗ trợ giao tác.

InnoDB: là storage engine mặc định từ phiên bản 5.5.5, được đánh giá là một storage engine có độ tin

cậy, tính đồng thời, tính sẵn sàng cao và khả năng khôi phục sau sự cố.

InnoDB lưu trữ các bảng và chỉ mục trong một không gian bảng (tablespace) riêng trong một vài tệp

hoặc một vùng đĩa nguyên. Nó sử dụng cơ chế khóa mức dòng để tăng hiệu quả sử dụng tài nguyên, và

cơ chế điều khiển đồng thời đa phiên bản MVCC để đạt được tính đồng thời cao hơn. InnoDB sử dụng

cơ chế khóa 2 pha: khóa ngầm định (khóa chia sẻ (S) và khóa độc quyền (X)); và khóa mục tiêu (khóa

mục tiêu chia sẻ (IS) và khóa mục tiêu độc quyền (IX)) – nhằm chỉ ra ra rằng có một dòng đang bị

khóa hoặc sắp được khóa trên một bảng. InnoDB triển khai rất nhiều các kiểu khóa như: khóa bản ghi

(record lock), khóa khoảng trống (gap lock) và khóa Next-key.

InnoDB là một storage engine hỗ trợ giao tác điển hình được thiết kế theo mô hình ACID với khả năng

commit, rollback, khôi phục sau đổ vỡ để bảo vệ dữ liệu người dùng, cơ sở dữ liệu được duy trì trạng

thái nhất quán tại mọi thời điểm và các giao tác được cô lập với các giao tác khác (mặc định là

REPEATABLE READ) với chiến lược khóa Next – key để ngăn chặn đọc ma (“phantom”). InnoDB

tự động phát hiện deadlock và rollback lại một hoặc nhiều giao tác để phá vỡ deadlock.

InnoDB sử dụng các chỉ mục: chỉ mục cụm, chỉ mục phụ, chỉ mục băm; hỗ trợ khóa ngoại Foreign key

để duy trì toàn vẹn dữ liệu giữa các bảng liên quan. Dữ liêu có thể được nén trên các bảng để giảm

kích thước cơ sở dữ liệu, giảm chi phí vào/ra, cải thiện thông lượng đồng thời tăng độ hữu dụng của

CPU hay sử dụng bộ đệm buffer pool để lưu trữ dữ liệu và chỉ mục trong bộ nhớ trong làm tăng đáng

kể tốc độ xử lí; hoặc dự đoán trước khi đọc để tìm và nạp trước dữ liệu; sử dụng bộ đệm chèn; sử dụng

cơ chế checksum để cảnh báo khi dữ liệu bị gián đoạn,… Đó là các cách thức mà InnoDB đã sử dụng

để cải thiện đáng kể hiệu suất của hệ thống.

Archieve: là storage engine cung cấp khả năng lưu trữ một lượng lớn dữ liệu không lập chỉ mục trong

một không gian vừa đủ cực nhỏ. Nó chỉ hỗ trợ 2 phép toán INSERT VÀ SELECT. Dữ liệu được nén

lại ngay khi chúng được chèn vào theo thuật toán lossless zlib và được giải nén khi được đọc tới.

Federated: là storage engine cho phép truy cập dữ liệu từ một cơ sở dữ liệu MySQL từ xa mà không

sử dụng công nghệ nhân bản hay phân cụm. Federated gồm 2 thành phần: máy chủ từ xa (remote

server) và máy chủ địa phương (local server). Dữ liệu không được lưu trữ trong các bảng trên máy địa

phương mà được chuyển tới từ cơ sở dữ liệu trên máy chủ từ xa.

Page 5: My sql.storage engine

NDB cluster: được xây dựng dựa trên khái niệm không chia sẻ, một cơ sở dữ liệu NDB chứa các nút

dữ liệu, các nút quản trị và các nút SQL. Mỗi nút dữ liệu chứa một đoạn (mảnh) dữ liệu trong cụm. Dữ

liệu được nhân bản đảm bảo độ sẵn sàng cao, tính không dư thừa. Các nút quản trị có nhiệm vụ giám

sát và điều khiển các nút trong cụm. Tất cả các nút dữ liệu kết nối với nhau, và tất cả các máy chủ

MySQL kết nối với tất cả các nút dữ liệu cho nên độ trễ mạng thấp.

Memory (HEAP): tạo các bảng có mục đích lưu trữ đặc biệt trong bộ nhớ trong, thường được sử dụng

trong các ứng dụng cần thưc hiện các thao tác quản lí phiên và lưu đệm, cần lưu trữ dữ liệu để truy cập

nhanh với đỗ trễ thấp, và các ứng dụng chỉ đọc hoặc chủ yếu là đọc.

Merge (MRG_MyISAM): là một tập các bảng MyISAM giống hệt nhau có thể sử dụng như một

bảng duy nhất. Merge được sử dụng khi có một tập các bảng MyISAM giống hệt nhau có trước hay

khi lưu trữ một bảng quá lớn vượt qua giới hạn kích thước tệp của hệ điều hành cần phân đoạn bảng.

Merge có những ưu điểm như: quản lí một tập các bảng biên bản dễ dàng, tăng tốc độ, thực hiện tìm

kiếm hiệu quả hơn tuy nhiên việc đọc chỉ mục trong Merge chậm.

Blackhole: hoạt động giống như một “hố đen”, sử dụng dữ liệu và ném ngay mà không lưu trữ, được

sử dụng trong các trường hợp như xác nhận cú pháp của các tệp dump và đo chi phí khi lưu các biên

bản nhị phân (binary log).

CSV: lưu trữ dữ liệu trong các tệp văn bản, sử dụng dấu phẩy để phân biệt các giá trị. Các bảng CSV

có thể đọc (thậm chí là ghi) bởi các ứng dụng bảng tính như Excel hoặc StarOffice Calc.

Ngoài các storage engine mà MySQL đưa ra, hiện nay còn có rất nhiều storage engine khác được các

bên thứ ba phát triển. Trong số đó, có một số kĩ thuật lưu trữ nổi bật và các storage engine điển hình

cho các xu thế đó như lưu trữ dữ liệu theo cột, NoSQL.

Lưu trữ dữ liệu theo cột và storage engine: các hệ cơ sở dữ liệu truyền thống lưu dữ liệu theo các

dòng. Tuy nhiên, trong các ứng dụng kho dữ liệu, kinh doanh thông minh BI, khai phá dữ liệu, phân

tích dữ liệu trực tuyến (OLAP),… khi mà khối lượng dữ liệu khổng lồ nhưng chỉ quan tâm tới một

hoặc một vài thuộc tính nhất định, hệ thống phải duyệt một số lượng lớn các dữ liệu không cần thiết

dẫn đến làm giảm hiệu suất thực thi của hệ thống. Giải pháp được đưa ra là lưu trữ dữ liệu theo từng

cột. Khi đó, dữ liệu được tổ chức theo từng cột và việc tìm kiếm dữ liệu sẽ chỉ diễn ra trên những

thuộc tính cần quan tâm mà bỏ qua các thuộc tính không cần khác giúp tiết kiệm đáng kể chi phí. Tuy

nhiên, việc tổ chức dữ liệu theo cột không phải là vấn đề đơn giản.

Nhận thấy ưu điểm đó, một số nhà phát triển đã đưa ra các storage engine hỗ trợ lưu trữ theo cột làm

cho MySQL có khả năng lưu trữ dữ liệu theo cột và đáp ứng được các yêu cầu của các ứng dụng kho

dữ liệu, kinh doanh thông minh (BI), phân tích, khai phá dữ liệu,… như InfoBright, Kickfire,

InfiniBD, …

InfoBright: kết hợp cơ sở dữ liệu hướng cột với kiến trúc lưới tri thức để tối ưu hóa cơ sở dữ liệu cho

phân tích. Nó có khả năng phân tích một lượng lớn dữ liệu trên web, dữ liệu cuộc gọi, dữ liệu thương

mại, các biên bản hệ thống, mạng với tốc độ tải và thời gian truy vấn nhanh hơn rất nhiều.

Page 6: My sql.storage engine

NoSQL và storage engine: NoSQL có nghĩa là không ràng buộc (Non – Relational) hay phổ biến hơn

có nghĩa là không chỉ SQL (Not Only SQL), là thuật ngữ chung cho các hệ cơ sở dữ liệu không sử

dụng mô hình dữ liệu quan hệ. NoSQL đặc biệt nhấn mạnh đến mô hình lưu trữ cặp giá trị - khóa và

hệ thống lưu trữ phân tán. Việc tìm kiếm dữ liệu dựa trên cặp giá trị - khóa diễn ra nhanh hơn và nó

đặc biệt thích hợp với các ứng dụng có khối lượng dữ liệu cần lưu trữ cũng như lưu lượng truy cập

vào/ra cực lớn mà không đòi hỏi cao cấu hình phần cứng như dịch vụ tìm kiếm, mạng xã hội, …. Dữ

liệu trên các nút có thể được nhân bản, một yêu cầu truy vấn có thể gửi tới nhiều máy cùng lúc nên khi

một máy gặp sự cố cũng không ảnh hưởng tới toàn bộ hệ thống.

Các storage engine áp dụng NoSQL thường được triển khai như các plugin hỗ trợ các storage engine

khác để khiến chúng có thể hoạt động như một hệ CSDL NoSQL chẳng hạn như HandlerSocket,

Memcached, …

HandlerSocket: giao tiếp với các storage engine khác như là InnoDB và khiến chúng có thể hoạt động

như là một cơ sở dữ liệu NoSQL. HandlerSocket có thể hỗ trợ nhiều mô hình truy vấn như tìm kiếm

khóa chính duy nhất, tìm kiếm chỉ mục không duy nhất, duyệt vùng; quản lí nhiều kết nối đồng thời;

hiệu suất thực thi cao do sử dụng các gói mạng nhỏ hơn.

E. Sử dụng storage engine

Lựa chọn storage engine phù hợp: các storage engine là vô cùng phong phú do đó trước khi bắt đầu

một ứng dụng cơ sở dữ liệu trên MySQL, cần lựa chọn storage engine phù hợp. Việc lựa chọn có thể

cân nhắc một số yếu tố cơ bản như: hỗ trợ giao tác, tính đồng thời, sao lưu dữ liệu, khôi phục dữ liệu

sau đổ vỡ và các chức năng đặc biệt khác như nếu hệ thống muốn tìm kiếm fulltext thì chỉ có

MyISAM hỗ trợ,…

Một số cài đặt cơ bản: Để kiểm tra các storage engine được hỗ trợ trên MySQL sử dụng câu lệnh:

SHOW ENGINE.

MySQL sử dụng kiến trúc pluggable storage engine cho phép các storage engine được tải và gỡ ra

khỏi server khi đang chạy một cách dễ dàng.

- Tải thư viện chia sẻ:

Mysql>INSTALL PLUGIN <tên engine> SONAME „<tên thư viện chia sẻ>‟;

- Gỡ bỏ: Mysql> UNINSTALL PLUGIN <tên engine>;

- Tạo bảng:

CREATE TABLE …. ENGINE = <tên engine>;

Nếu không chỉ định rõ cho lựa chọn ENGINE thì MySQL sẽ tạo bảng có kiểu của storage engine mặc

định.

- Thay đổi kiểu bảng:

ALTER TABLE <tên bảng> ENGINE = <tên storage engine khác>;

Page 7: My sql.storage engine

IV. XÂY DỰNG MỘT STORAGE ENGINE

A. Cơ sở hạ tầng của một storage engine

Không có kiến trúc chung cho mọi storage engine hay nói cách khác tùy vào ứng dụng cụ thể trong

những hoàn cảnh cụ thể mà các storage engine được triển khai với nhũng đặc trưng phù hợp nhất cho

ứng dụng. Khi bắt đầu xây dựng một storage engine mới có thể cân nhắc một số yếu tố như: cách thức

lưu trữ vật lí, xét tính đồng thời, hỗ trợ giao tác, hỗ trợ chỉ mục, lưu đệm, một số kĩ thuật cải thiện hiệu

suất như đa luồng cho xử lí song song, kiểm soát cơ sở dữ liệu, chèn với số lượng lớn,… và các đặc

trưng mục tiêu chuyên biệt như hỗ trợ thực thi địa lí, các hạn chế an ninh,... Từ việc cân nhắc này, kết

hợp với yêu cầu thực tế của ứng dụng mà xác định cơ sở hạ tầng của storage engine cần xây dựng.

B. Handlerton

Là giao diện chuẩn cho mọi storage engine. Nằm trong tệp handler.cc và handler.h trong thư mục /sql.

Handlerton là một kiến trúc lớn với nhiều phương thức và kiểu dữ liệu được định nghĩa trong cấu trúc.

Các phương thức được triển khai như những con trỏ hàm.

C. Lớp handler

Được dẫn xuất từ lớp sql_alloc, lớp handler cung cấp một tập các phương thức nhất quán kết nối với

máy chủ thông qua cấu trúc handlerton. Trong lớp handler chứa đầy đủ các chức năng như tạo mới,

xóa, chỉnh sửa bảng; các phương thức tạo các trường, chỉ mục và thậm chí cả các phương thức bảo vệ

khỏi đổ vỡ, khôi phục và sao chép dự phòng.

D. Quá trình tạo một storage engine mới

Theo [4], quá trình tạo mới một storage engine có thể chia thành các giai đoạn sau:

- Giai đoạn 1: Tạo engine sơ khai – tạo ra một storage engine cơ sở có thể tra lắp dễ dàng với máy

chủ. Tại bước này, các tệp mã nguồn cơ bản được tạo ra, storage engine được thiết lập như là một dẫn

xuất của lớp handler cơ sở, và storage engine bản thân nó được tra lắp vào trong mã nguồn của máy

chủ.

- Giai đoạn 2: Làm việc với các bảng – đảm bảo storage engine có thể tạo, mở, đóng và xóa các tệp.

Đây là bước thiết lập các thường trình quản lí các tệp cơ sở và đảm bảo rằng engine làm việc với tệp

một cách đúng đắn.

- Giai đoạn 3: Đọc và ghi dữ liệu – Là tính năng cơ bản nhất của một storage engine. Đây là bước tạo

ra các phương thức để đọc dữ liệu được lưu trữ theo định dạng của phương tiện lưu trữ và dịch chúng

sang định dạng dữ liệu bên trong MySQL, và ngược lại, đọc dữ liệu từ định dạng bên trong MySQL

sang định dạng khác trên các phương tiện lưu trữ.

- Giai đoạn 4: Chỉnh sửa và xóa dữ liệu – Để storage engine sử dụng được trong các ứng dụng, cần

triển khai các phương thức cho phép thay đổi dữ liệu trong storage engine như là chỉnh sửa và xóa dữ

liệu.

Page 8: My sql.storage engine

- Giai đoạn 5: Lập chỉ mục dữ liệu – một storage engine đầy đủ chức năng nên bao gồm khả năng

cho phép đọc nhanh ngẫu nhiên và hạn chế phạm vi truy vấn. Bước này triển khai quá trình lập chỉ

mục dữ liệu.

- Giai đoạn 6: Bổ sung các hỗ trợ giao tác – là bước cuối cùng và phức tạp nhất. Đây là bước làm

cho storage engine trở thành một cơ chế lưu trữ CSDL quan hệ phù hợp để sử dụng trong môi trường

giao tác.

Quá trình xây dựng storge engine nên được thực hiện tuần tự từ giai đoạn đầu cho đến giai đoạn cuối

cùng. Tại mỗi giai đoạn, nên kiểm thử và gỡ lỗi theo bất kì cơ chế nào. Tùy vào ứng dụng cụ thể, các

storage engine không cần được xây dựng đầy đủ cả 6 giai đoạn, tuy nhiên về mặt chức năng một

storage engine nên được hoàn thiện tối thiểu ở giai đoạn 3 hoặc 4. MySQL cung cấp một storage

engine có tên là Example chứa một số thành phần có sẵn ở giai đoạn thứ nhất, có thể được sử dụng để

hỗ trợ quá trình tạo storage engine mới.

V. KẾT LUẬN

Như vậy, sau thời gian nghiên cứu tìm hiểu, luận văn đã đạt được các kết quả như sau:

Nghiên cứu tổng quan về MySQL, với tư cách là một hệ quản trị cơ sở dữ liệu mã nguồn mở thành

công nhất hiện nay. Sự độc đáo trong kiến trúc khi triển khai lớp pluggable storage engine, sử dụng bộ

đệm truy vấn và nhiều bộ đệm khác nhau để tăng tốc độ truy vấn dữ liệu, triển khai các cơ chế tổ chức

truy cập tệp, lập chỉ mục, hỗ trợ giao tác trong các storage engine riêng biệt có khả năng tra lắp dễ

dàng vào hệ thống là những đặc trưng nổi bật tạo nên sự độc đáo cũng như sự ổn định, hiệu suất cao

và đặc biệt là tính linh hoạt của MySQL.

Nghiên cứu kiến trúc pluggable storage engine của MySQL, cùng với một số storage engine điển hình

được MySQL phát triển. Tuy không thể đầy đủ vì số lượng các storage engine hiện nay là vô cùng

phong phú nhưng thông qua các nghiên cứu về các đặc trưng nổi bật của một số storage engine điển

hình đó, luận văn đã đưa ra cái nhìn tổng quan nhất về storage engine cũng như những lưu ý cần cân

nhắc khi lựa chọn storage engine phù hợp đồng thời trên cơ sở đó đưa ra một số cân nhắc về các chức

năng cần và có thể có của một storage engine.

Luận văn cũng đi tìm hiểu một số xu hướng lưu trữ mới nổi bật hiện nay và các storage engine được

phát triển dựa trên các xu hướng này như lưu trữ dữ liệu theo cột với InfoBright, NoSQL với đại diện

là HandlerSocket. Trên cơ sở đó, nhấn mạnh sự phong phú đa dạng của sự phát triển storage engine

hiện nay và trong tương lai.

Cuối cùng, luận văn cũng đã đi nghiên cứu về một quá trình xây dựng storage engine được cho là khả

thi từ bước cân nhắc các yếu tố cần thiết cho một storage engine tới một tiến trình xây dựng một

storage engine cơ bản.

Việc xây dựng một storage engine là vô cùng phức tạp và tùy thuộc rất lớn vào một bài toán ứng dụng

cụ thể. Do đó, luận văn mới chỉ đưa ra những bước tiếp cận ban đầu cho việc xây dựng một storage

Page 9: My sql.storage engine

engine. Phát triển thêm các chức năng của một storage engine đã có hay xây dựng một storage engine

mới có thể là những hướng phát triển tiếp theo của luận văn.

References.

1. Daniel J. Abadi (2008), Query Execution in column – oriented database system, MIT PhD

Dissertation, Massachusets Institute Technology, USA, pp. 17- 45.

2. Daniel J. Abadi (2007), “Column – stores for wide and sparse data”, Proceedings of CIDR,

Asilomar, USA.

3. Daniel J. Abadi, Samuel R. Madden, Nabil Hachem (2008), “Column-stores vs. Row-stores: How

different are they really?”, SIGMOD‟08 Proceedings of the 2008 ACM SIGMOD international

conference on Management of data, pp. 967 – 980.

4. Charles A. Bell (2007), Expert MySQL, Apress, NewYork, USA

5. Guy Harrison (2010), 10 things you should know about NoSQL databases, at:

http://www.techrepublic.com/blog/10things/10-things-you-should-know-about-nosql-

databases/1772

6. Knut Haugen (2010), A brief history of NoSQL, at: http://blog.knuthaugen.no/2010/03/a-brief-

history-of-nosql.html

7. Yoshinori Matsunobu (2010), Using MySQL as a NoSQL – A story for exceeding 750,000 qps on a

commondity server, at: http://yoshinorimatsunobu.blogspot.com/2010/10/using-mysql-as-

nosql-story-for.html

8. MySQL AB (2010), MySQL 5.5 manual, pp.37-150, 1184-1334

9. Baron Schwartz et al Peter Zaitsev, Vadim Tkachenko, Jeremy D. Zawodny, Arjen Lentz, and

Derek J. Balling (2008), High Performance MySQL, 2nd Edition, O‟Reilly, USA, pp.1-14, 80-

149, 204-216.

10. Sybase Inc. (2008), Gaining the performance edge using a column – oriented database

management system, USA.

11. Writing a custom storage engine, at:

http://forge.mysql.com/wiki/MySQL_Internals_Custom_Engine#Writing_a_Custom_Storage_E

ngine

12. MySQL specific CMake marcos, at:

http://forge.mysql.com/wiki/CMake#MySQL_specific_CMake_macros

13. How can I create a new storage engine for MySQL, at:

http://www.mysqlab.net/knowledge/kb/detail/topic/configuration/id/5892