SlideShare a Scribd company logo
1 of 9
Download to read offline
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.
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.
Đ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ư:
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.
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.
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>;
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.
- 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
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

More Related Content

What's hot

De cuong chi tiet hoc phan oracle
De cuong chi tiet hoc phan oracleDe cuong chi tiet hoc phan oracle
De cuong chi tiet hoc phan oraclephamminhthuanfuny
 
Chương 5 Chia sẻ file và máy in trên mạng - Giáo trình FPT
Chương 5 Chia sẻ file và máy in trên mạng - Giáo trình FPTChương 5 Chia sẻ file và máy in trên mạng - Giáo trình FPT
Chương 5 Chia sẻ file và máy in trên mạng - Giáo trình FPTMasterCode.vn
 
A4 xay dung va quan tri moi truong mang doanh nghiep 5 8 (25-10-07)[bookboomi...
A4 xay dung va quan tri moi truong mang doanh nghiep 5 8 (25-10-07)[bookboomi...A4 xay dung va quan tri moi truong mang doanh nghiep 5 8 (25-10-07)[bookboomi...
A4 xay dung va quan tri moi truong mang doanh nghiep 5 8 (25-10-07)[bookboomi...bookbooming1
 
Giao trinh-co-so-du-lieu
Giao trinh-co-so-du-lieuGiao trinh-co-so-du-lieu
Giao trinh-co-so-du-lieuAnh Ta
 
Gt he quan_tri_csdl_ms_sql_server
Gt he quan_tri_csdl_ms_sql_serverGt he quan_tri_csdl_ms_sql_server
Gt he quan_tri_csdl_ms_sql_serveranhanh81
 

What's hot (7)

De cuong chi tiet hoc phan oracle
De cuong chi tiet hoc phan oracleDe cuong chi tiet hoc phan oracle
De cuong chi tiet hoc phan oracle
 
Chương 5 Chia sẻ file và máy in trên mạng - Giáo trình FPT
Chương 5 Chia sẻ file và máy in trên mạng - Giáo trình FPTChương 5 Chia sẻ file và máy in trên mạng - Giáo trình FPT
Chương 5 Chia sẻ file và máy in trên mạng - Giáo trình FPT
 
A4 xay dung va quan tri moi truong mang doanh nghiep 5 8 (25-10-07)[bookboomi...
A4 xay dung va quan tri moi truong mang doanh nghiep 5 8 (25-10-07)[bookboomi...A4 xay dung va quan tri moi truong mang doanh nghiep 5 8 (25-10-07)[bookboomi...
A4 xay dung va quan tri moi truong mang doanh nghiep 5 8 (25-10-07)[bookboomi...
 
Qt he co so du lieu
Qt he co so du lieuQt he co so du lieu
Qt he co so du lieu
 
File server 2008
File server 2008File server 2008
File server 2008
 
Giao trinh-co-so-du-lieu
Giao trinh-co-so-du-lieuGiao trinh-co-so-du-lieu
Giao trinh-co-so-du-lieu
 
Gt he quan_tri_csdl_ms_sql_server
Gt he quan_tri_csdl_ms_sql_serverGt he quan_tri_csdl_ms_sql_server
Gt he quan_tri_csdl_ms_sql_server
 

Viewers also liked

Pembuktian hp kreatif dan inovatif
Pembuktian hp kreatif dan inovatifPembuktian hp kreatif dan inovatif
Pembuktian hp kreatif dan inovatifUmai Yusof
 
Mohannad Barakat
Mohannad BarakatMohannad Barakat
Mohannad BarakatMariaBaring
 
Obraz malenkoyi lyudini
Obraz malenkoyi lyudiniObraz malenkoyi lyudini
Obraz malenkoyi lyudinikhristina2005
 
All finals presentation
All finals presentationAll finals presentation
All finals presentationJonah Adshead
 
Te presento mi eva
Te presento mi evaTe presento mi eva
Te presento mi evaomapatarda
 
Framtidens læremidler
Framtidens læremidlerFramtidens læremidler
Framtidens læremidlerEllenGimle
 
Türkiye'de psikoloji
Türkiye'de psikolojiTürkiye'de psikoloji
Türkiye'de psikolojiAlev94
 
Evaluation: Question 4
Evaluation: Question 4 Evaluation: Question 4
Evaluation: Question 4 av123456789
 
Budget for start a school uniforms manufacturing unit
Budget for start a school uniforms manufacturing unitBudget for start a school uniforms manufacturing unit
Budget for start a school uniforms manufacturing unitchandan kumar
 
recommendation letter Sarah
recommendation letter Sarahrecommendation letter Sarah
recommendation letter SarahSarah Inna
 
A Evolução dos Primeiros Animais Pré-Históricos
A Evolução dos Primeiros Animais Pré-HistóricosA Evolução dos Primeiros Animais Pré-Históricos
A Evolução dos Primeiros Animais Pré-HistóricosMundo dos Animais
 
MWWoodsConsult16
MWWoodsConsult16MWWoodsConsult16
MWWoodsConsult16Mark Woods
 

Viewers also liked (16)

Pembuktian hp kreatif dan inovatif
Pembuktian hp kreatif dan inovatifPembuktian hp kreatif dan inovatif
Pembuktian hp kreatif dan inovatif
 
Abstracción ciudades medievales
Abstracción ciudades medievales Abstracción ciudades medievales
Abstracción ciudades medievales
 
Mohannad Barakat
Mohannad BarakatMohannad Barakat
Mohannad Barakat
 
Obraz malenkoyi lyudini
Obraz malenkoyi lyudiniObraz malenkoyi lyudini
Obraz malenkoyi lyudini
 
All finals presentation
All finals presentationAll finals presentation
All finals presentation
 
Te presento mi eva
Te presento mi evaTe presento mi eva
Te presento mi eva
 
Framtidens læremidler
Framtidens læremidlerFramtidens læremidler
Framtidens læremidler
 
Türkiye'de psikoloji
Türkiye'de psikolojiTürkiye'de psikoloji
Türkiye'de psikoloji
 
Izabela-Wojcik
Izabela-WojcikIzabela-Wojcik
Izabela-Wojcik
 
Evaluation: Question 4
Evaluation: Question 4 Evaluation: Question 4
Evaluation: Question 4
 
Budget for start a school uniforms manufacturing unit
Budget for start a school uniforms manufacturing unitBudget for start a school uniforms manufacturing unit
Budget for start a school uniforms manufacturing unit
 
recommendation letter Sarah
recommendation letter Sarahrecommendation letter Sarah
recommendation letter Sarah
 
1
11
1
 
A Evolução dos Primeiros Animais Pré-Históricos
A Evolução dos Primeiros Animais Pré-HistóricosA Evolução dos Primeiros Animais Pré-Históricos
A Evolução dos Primeiros Animais Pré-Históricos
 
MWWoodsConsult16
MWWoodsConsult16MWWoodsConsult16
MWWoodsConsult16
 
Line Card
Line CardLine Card
Line Card
 

Similar to My sql.storage engine

bai giang mon sql- buoi 1.ppt
bai giang mon sql- buoi 1.pptbai giang mon sql- buoi 1.ppt
bai giang mon sql- buoi 1.pptHungHuyNguyen3
 
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 1
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 1Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 1
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 1pisu412
 
b1-gioithieu-190213084421.pdf
b1-gioithieu-190213084421.pdfb1-gioithieu-190213084421.pdf
b1-gioithieu-190213084421.pdfQuyVo27
 
MongoDB Introduction
MongoDB IntroductionMongoDB Introduction
MongoDB Introductionthanh can
 
Bài giảng môn Cơ sở dữ liệu - truongkinhtethucpham.com
Bài giảng môn Cơ sở dữ liệu - truongkinhtethucpham.comBài giảng môn Cơ sở dữ liệu - truongkinhtethucpham.com
Bài giảng môn Cơ sở dữ liệu - truongkinhtethucpham.commai_non
 
Chuong 1_Gioo thieu DB.pdf
Chuong 1_Gioo thieu DB.pdfChuong 1_Gioo thieu DB.pdf
Chuong 1_Gioo thieu DB.pdfCriz20
 
MongoDB.pptx
MongoDB.pptxMongoDB.pptx
MongoDB.pptxDuyThnh28
 
Drupal framework xanh
Drupal framework xanhDrupal framework xanh
Drupal framework xanhXanh Nguyen
 
Bao cao web cake php
Bao cao web cake phpBao cao web cake php
Bao cao web cake phplaonap166
 
Bao cao-cloud-linux-hosting
Bao cao-cloud-linux-hostingBao cao-cloud-linux-hosting
Bao cao-cloud-linux-hostinglaonap166
 
Dynamo: Amazon’s Highly Available Key-value Store
Dynamo: Amazon’s Highly Available Key-value StoreDynamo: Amazon’s Highly Available Key-value Store
Dynamo: Amazon’s Highly Available Key-value StoreViet-Trung TRAN
 
1.+tai+lieu+thiet+ke
1.+tai+lieu+thiet+ke1.+tai+lieu+thiet+ke
1.+tai+lieu+thiet+keLinh Hoang
 
Bài 1: Tổng quan về cơ sở dữ liệu - Giáo trình FPT
Bài 1: Tổng quan về cơ sở dữ liệu - Giáo trình FPTBài 1: Tổng quan về cơ sở dữ liệu - Giáo trình FPT
Bài 1: Tổng quan về cơ sở dữ liệu - Giáo trình FPTMasterCode.vn
 
Cơ sở dữ liệu
Cơ sở dữ liệuCơ sở dữ liệu
Cơ sở dữ liệuThành Luân
 
Managing and Querying Encrypted Data
Managing and Querying Encrypted DataManaging and Querying Encrypted Data
Managing and Querying Encrypted DataHiếu Bùi Đức
 
My sql part 1 - installation-_www.key4vip.info
My sql   part 1 - installation-_www.key4vip.infoMy sql   part 1 - installation-_www.key4vip.info
My sql part 1 - installation-_www.key4vip.infolaonap166
 
Sql server chuong 2 nkhanh
Sql server chuong 2 nkhanhSql server chuong 2 nkhanh
Sql server chuong 2 nkhanhJohn Carter
 

Similar to My sql.storage engine (20)

bai giang mon sql- buoi 1.ppt
bai giang mon sql- buoi 1.pptbai giang mon sql- buoi 1.ppt
bai giang mon sql- buoi 1.ppt
 
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 1
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 1Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 1
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 1
 
b1-gioithieu-190213084421.pdf
b1-gioithieu-190213084421.pdfb1-gioithieu-190213084421.pdf
b1-gioithieu-190213084421.pdf
 
MongoDB Introduction
MongoDB IntroductionMongoDB Introduction
MongoDB Introduction
 
Bài giảng môn Cơ sở dữ liệu - truongkinhtethucpham.com
Bài giảng môn Cơ sở dữ liệu - truongkinhtethucpham.comBài giảng môn Cơ sở dữ liệu - truongkinhtethucpham.com
Bài giảng môn Cơ sở dữ liệu - truongkinhtethucpham.com
 
NoSql Database
NoSql DatabaseNoSql Database
NoSql Database
 
Quản trị mạng _Chương 1-2-3
Quản trị mạng _Chương 1-2-3Quản trị mạng _Chương 1-2-3
Quản trị mạng _Chương 1-2-3
 
Chuong 1_Gioo thieu DB.pdf
Chuong 1_Gioo thieu DB.pdfChuong 1_Gioo thieu DB.pdf
Chuong 1_Gioo thieu DB.pdf
 
MongoDB.pptx
MongoDB.pptxMongoDB.pptx
MongoDB.pptx
 
Drupal framework xanh
Drupal framework xanhDrupal framework xanh
Drupal framework xanh
 
Bao cao web cake php
Bao cao web cake phpBao cao web cake php
Bao cao web cake php
 
Bao cao-cloud-linux-hosting
Bao cao-cloud-linux-hostingBao cao-cloud-linux-hosting
Bao cao-cloud-linux-hosting
 
Dynamo: Amazon’s Highly Available Key-value Store
Dynamo: Amazon’s Highly Available Key-value StoreDynamo: Amazon’s Highly Available Key-value Store
Dynamo: Amazon’s Highly Available Key-value Store
 
1.+tai+lieu+thiet+ke
1.+tai+lieu+thiet+ke1.+tai+lieu+thiet+ke
1.+tai+lieu+thiet+ke
 
Bài 1: Tổng quan về cơ sở dữ liệu - Giáo trình FPT
Bài 1: Tổng quan về cơ sở dữ liệu - Giáo trình FPTBài 1: Tổng quan về cơ sở dữ liệu - Giáo trình FPT
Bài 1: Tổng quan về cơ sở dữ liệu - Giáo trình FPT
 
Com201 slide 1
Com201   slide 1Com201   slide 1
Com201 slide 1
 
Cơ sở dữ liệu
Cơ sở dữ liệuCơ sở dữ liệu
Cơ sở dữ liệu
 
Managing and Querying Encrypted Data
Managing and Querying Encrypted DataManaging and Querying Encrypted Data
Managing and Querying Encrypted Data
 
My sql part 1 - installation-_www.key4vip.info
My sql   part 1 - installation-_www.key4vip.infoMy sql   part 1 - installation-_www.key4vip.info
My sql part 1 - installation-_www.key4vip.info
 
Sql server chuong 2 nkhanh
Sql server chuong 2 nkhanhSql server chuong 2 nkhanh
Sql server chuong 2 nkhanh
 

My sql.storage engine

  • 1. 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.
  • 2. 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.
  • 3. Đ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ư:
  • 4. 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.
  • 5. 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.
  • 6. 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>;
  • 7. 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.
  • 8. - 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
  • 9. 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