« Home « Kết quả tìm kiếm

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


Tóm tắt Xem thử

- 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.
- 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..
- Hệ quản trị cơ sở dữ liệu.
- Khai thác dữ liệ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ể.
- Đó 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ủ..
- 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 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.
- Truy vấn dữ liệu trên MySQL.
- 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 đó.
- Điều đó giúp cải thiện đáng kể hiệu suất truy vấn dữ liệu..
- 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.
- chặn mọi thao tác đọc tới dữ liệu khi dữ liệu đó đang được ghi.
- 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.
- Giao tác triển khai trong các storage engine như InnoDB, NDB cluster.
- 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.
- 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.
- 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..
- 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.
- 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..
- Kiến trúc pluggable storage engine.
- 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..
- Một số storage engine điển hình.
- MySQL hỗ trợ một vài storage engine như:.
- 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à 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.
- 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 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ỏ.
- 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.
- 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.
- 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..
- 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ị.
- 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.
- Giải pháp được đưa ra là lưu trữ dữ liệu theo từng cột.
- 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.
- 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ệ.
- 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.
- 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:.
- 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..
- 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..
- ENGINE = <tên storage engine khác>;.
- 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..
- Là giao diện chuẩn cho mọi storage engine.
- 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..
- 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..
- 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.
- 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..
- Đâ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..
- 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..
- 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ể.
- 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..
- How can I create a new storage engine for MySQL, at: