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
Trang 1Nghiê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ỔNGQUANVỀ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
Trang 2B 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
Trang 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 MYSQLPLUGGABLESTORAGEENGINE
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ư:
Trang 4MyISAM: 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
Trang 5NDB 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
Trang 6NoSQL 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>;
Trang 7IV XÂYDỰNGMỘTSTORAGEENGINE
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
Trang 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ẾTLUẬ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
Trang 9engine 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