Mở rộng truy vấn MySQL và ứng dụng chuyển đổi dữ liệu dạng bảng sang JSON

13 745 1
Mở rộng truy vấn MySQL và ứng dụng chuyển đổi  dữ liệu dạng bảng sang JSON

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Extend query of MySQL and application conversion data table to JSON NXB H. : ĐHCN, 2012 Số trang 65 tr. +

1 Mở rộng truy vấn MySQL ứng dụng chuyển đổi dữ liệu dạng bảng sang JSON Extend query of MySQL and application conversion data table to JSON NXB H. : ĐHCN, 2012 Số trang 65 tr. + Lê Văn Nam 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: TS. Nguyễn Hải Châu Năm bảo vệ: 2012 Abstract. Chương 1: Tổng quan về Json ứng dụng: Trong chương này sẽ trình bày một cách khái quát về định dạng trao đổi dữ liệu JSON như cấu trúc của dữ liệu dạng JSON, quá trình gửi nhận dữ liệu dạng JSON giữa máy chủ máy khách ứng dụng của JSON. Chương 2: Tổng quan kiến trúc hệ quản trị cơ sở dữ liệu MySQL: Trong chương này sẽ trình bày một cách khái quát chi tiết nhất về lịch sử hình thành kiến trúc của hệ quản trị CSDL MySQL. Chương 3: Mở rộng truy vấn chuyển đổi dữ liệu sang dạng json: Trong chương này sẽ trình bày các cách khác nhau để thêm mới một hàm vào máy chủ MySQL. Tập trung tìm hiểu cách viết thêm mới một hàm do người dùng định nghĩa (UDF) vào MySQL từ đó ứng dụng vào xây dựng hàm UDF để chuyển đổi dữ liệu truy vấn sang dạng JSON. Keywords: Dữ liệu; Chuyển đổi dữ liệu; Cơ sở dữ liệu; Công nghệ thông tin Content. I. TỔNG QUAN VỀ JSON ỨNG DỤNG A.Khái niệm JSON ứng dụng Khái niệm: JSON (JavaScript Object Notation) là một định dạng trao đổi dữ liệu. Nó gần giống như một tập hợp con của cú pháp JavaScript, mặc nó không phải là một tập hợp con nghiêm ngặt. Nó rất hữu ích khi viết bất kỳ loại ứng dụng dựa trên JavaScript, bao gồm cả các trang web phần mở rộng trình duyệt. Ưu điểm của JSON so với định dạng trao đổi dữ liệu XML  Không dài dòng, dữ liệu của nó nhỏ phù hợp trong việc trao đổi dữ liệu  Trực tiếp giả mã tuần tự hóa (deserializable) thành cấu trúc các đối tượng bằng cách sử dụng hàm sẵn có trong Javascript là eval(). Cấu trúc của JSON Json được xây dựng dựa trên 2 cấu trúc phổ biến sau: 2 1. Là tập hợp của các cặp tên giá trị (name-value). Trong những ngôn ngữ khác nhau, đây được nhận thấy như là 1 đối tượng (object), bản ghi (record), cấu trúc (struct), từ điển(dictionary), bảng băm (hash table), danh sách khoá (keyed list), hay mảng liên hợp. Hình 1.1 Cấu trúc của Json 2. Là 1 tập hợp các giá trị đã được sắp xếp. Trong hầu hết các ngôn ngữ nó có thể là 1 mảng, véctơ, tập hợp. Quá trình gửi nhận dữ liệu dạng JSON từ máy khách đến máy chủ: Quá trình gửi nhận dữ liệu dạng JSON từ máy khách đến máy chủ được tả bằng sơ đồ sau: Hình 1.2 Quá trình gửi nhận dữ liệu JSON từ máy khách đến máy chủ. Ứng dụng của JSON : 1. Lưu trữ dữ liệu đơn thuần. Đôi khi chúng ta muốn lưu trữ dữ liệu dưới dạng metadata ở phía máy chủ chuỗi JSON sẽ được lưu vào cơ sở dữ liệu sau đó khi cần dữ liệu thì sẽ được giải mã. Phương pháp lưu trữ dữ liệu này cũng tươn tự như sử dụng tính năng serialize unserialize của các ngôn ngữ lập trình. Nhưng trong khi serialize unserialize sử dụng với cả dữ liệu biến tức là phụ thuộc vào ngôn ngữ lập trình. Vì vậy nếu dữ liệu của chúng ta chỉ đơn thuần là dữ liệu cơ bản (chuỗi kí tự, số…) thì hoàn toàn không nên sử dụng serialize mà nên sử dụng JSON. 2. Sử dụng trong ngôn ngữ JavaScript ActionScript để xử lý thông tin trả về từ phía máy chủ rất nhanh về dễ dàng II. KIẾN TRÚC TỔNG QUAN CỦA HỆ QUẢN TRỊ CSDL MYSQL A.Lịch sử phát triển của hệ quản trị cơ sở dữ liệu MySQL. - MySQL là hệ quản trị cơ sở dữ liệu mã nguồn mở phổ biến nhất thế giới được các nhà phát triển rất ưa chuộng trong quá trình phát triển ứng dụng. MySQL là hệ quản trị cơ sở dữ liệu tốc độ cao, ổn định dễ sử dụng, có tính linh hoạt, hoạt động trên nhiều hệ điều hành cung cấp một hệ thống lớn các hàm tiện ích rất mạnh. Với tốc độ tính bảo mật cao nên MySQL rất thích hợp cho các ứng dụngtruy cập CSDL trên Internet. Hệ quản trị MySQL miễn phí hoàn. Lịch sử phát triển của hệ quản trị CSDL MySQL trải qua các mốc cơ bản sau: - 2001: MySQL phát hành phiên bản 3.23. 3 - 2003: MySQL phát hành phiên bản 4.0. Phiên bản 4.0 có tính năng kết hợp mệnh đề. Tính năng này cho phép hai nhóm dữ liệu có thể hòa trộn thành một nhóm dữ liệu. - 2004: MySQL phát hành phiên bản 4.1. Phiên bản 4.1 có tính năng mới như hỗ trợ truy vấn con, lưu trữ trên các cấu trúc R-trees B-trees. - 2005: MySQL phát hành phiên bản 5.0. Phiên bản có các tính năng như con trỏ(cursors),sự kiện(triggers), Khun nhìn (Views), Thủ tục(stored procedures) giao dịch(transactions - 2008: MySQL phát hành phiên bản 5.1. Phiên bản này có tính năng phân vùng, lập lịch các sự kiện, sửa lỗi, máy chủ ghi nhật ký các bảng plugin API. B.Kiến trúc của hệ quản trị CSDL MySQL Hình 2.1 chỉ ra cấu trúc logic của kiến trúc MySQL. Tầng cao nhất của kiến trúc bao gồm các dịch vụ không phải là duy nhất đối với MySQL. Chúng là các dịch vụ mà hầu hết các công cụ dựa trên mạng Client/Server hoặc các máy chủ cần như: điều khiển kết nối, xác thực, an ninh, vv. Tầng thứ hai là nơi mà mọi thứ trở nên đáng quan tâm. Phần lớn bộ não của MySQL tập trung ở đây, bao gồm cả mã cho phân tích cú pháp truy vấn, phân tích, tối ưu hóa, bộ nhớ đệm, tất cả các chức năng built-in (ví dụ như ngày tháng, thời gian, toán học, mã hóa). Bất kỳ chức năng được cung cấp cùng với kỹ thuật lưu trữ sẽ tồn tại ở cấp độ này, ví dụ như các thủ tục lưu trữ, triggers, views. Hình 2.1 Kiến trúc tổng quan của hệ quản trị cơ sở dữ liệu MySQL Lớp thứ ba có chứa các kỹ thuật lưu trữ. Chúng có nhiệm vụ lưu trữ thu hồi tất cả các dữ liệu được lưu trữ trong MySQL. 1) Quản lý kết nối an ninh Khi các máy khách kết nối với máy chủ MySQL, máy chủ cần xác thực chúng. Xác thực dựa trên tên đăng nhập, máy chủ nguồn mật khẩu. Xác nhận X.509 cũng có thể được sử dụng trên một kết nối Secure Sockets Layer (SSL). Khi một client đã kết nối, máy chủ kiểm tra xem client này có đặc quyền cho mỗi truy vấn mà nó đưa ra (Ví dụ có hay không client được phép phát đi một câu lệnh SELECT để truy cập bảng Country trong cơ sở dữ liệu). 2) Tối ưu hóa thực thi MySQL phân tích các truy vấn để tạo ra một cấu trúc bên trong (cây phân tích cú pháp) sau đó áp dụng một loạt các tối ưu hóa. Việc tối ưu hóa này có thể bao gồm việc viết lại các truy vấn, xác định thứ tự mà nó sẽ đọc các bảng, lựa chọn các chỉ số nào để sử dụng, vv…. Chúng ta có thể chuyển 4 các gợi ý tới bộ tối ưu hóa thông qua các từ khóa đặc biệt trong truy vấn, ảnh hưởng đến tiến trình ra quyết định của mình. 3) Kiểm soát đồng thời Bất cứ khi nào nếu nhiều hơn một truy vấn để thay đổi dữ liệu đồng thời, lúc này sẽ phát sinh vấn đề kiểm soát đồng thời. Mục đích của chúng tôi trong chương này sẽ tìm hiểu về MySQL đã làm điều này ở hai cấp độ: cấp độ máy chủ cấp độ kỹ thuật lưu trữ. Kiểm soát đồng thời là một chủ đề lớn mà phần lớn nội dung lý thuyết của các tài liệu viết về nó, nhưng luận văn này không mang tính lý thuyết hoặc thậm chí không nói về nội tại MySQL. Vì vậy, chúng tôi sẽ chỉ cung cấp một cái nhìn tổng quan đã được đơn giản hóa về cách mà MySQL đề cập của chương này Chúng tôi sẽ sử dụng một hộp thư điện tử trên một hệ thống Unix là một ví dụ. Định dạng của tập tin cổ điển Mbox là rất đơn giản. Tất cả các thông điệp trong hộp thư mailbox được nối với nhau theo trật tự cái này sau cái kia. Điều này làm cho nó rất dễ dàng để đọc phân tích các thông điệp thư. Nó cũng làm cho chuyển phát thư dễ dàng: chỉ cần nối thêm một tin nhắn mới ở phần cuối của tập tin. Nhưng những gì sẽ xảy ra khi có hai tiến trình cố gắng để chuyển các thông điệp cùng một lúc tới cùng một hộp thư. Rõ ràng rằng điều này có thể làm lỗi hộp thư để lại hai tin nhắn xen kẽ vào cuối của tập tin mailbox. Các hệ thống phân phối mail sử dụng phương thức khóa để ngăn chặn việc lỗi file này. Nếu một Client cố gắng chuyển nhận mail lần thứ hai trong khi hộp thư bị khóa, nó phải chờ đợi để có được khóa riêng của mình trước khi chuyển nhận thông điệp của mình. Phương thức này hoạt động khá tốt trong thực tế, nhưng nó lại mang đến sự không hỗ trợ tính đồng thời. Bởi vì chỉ có một quá trình duy nhất có thể thay đổi hộp thư tại bất kỳ thời điểm nhất định, phương pháp này sẽ trở thành vấn đề với một hộp thư có dung lượng lớn. Khóa Read/Write Việc đọc từ mailbox không khó. Không ổn khi có nhiều Client cùng đọc đồng thời một mail. Bởi vì chúng không gây ra sự thay đổi, không có gì bị lỗi. Nhưng chuyện gì xảy ra nếu một người nào đó cố để xóa số 25 trong khi các chương trình khác đang đọc hộp thư đó. Vậy để cho an toàn việc đọc hộp thư yêu cầu phải thận trọng. Nếu chúng ta nghĩ rằng một hộp thư như là một bảng trong cơ sở dữ liệu mỗi thư như là một hàng, thì ta dễ dàng nhận thấy vấn đề ở cùng nội dung. Với nhiều cách, hộp thư thực sự chỉ là một bảng cơ sở dữ liệu đơn giản. Việc sửa đổi các hàng trong một bảng cơ sở dữ liệu tương tự như việc xóa hoặc thay đổi nội dung của các thông điệp trong một file hộp thư. Các giải pháp cho vấn đề kinh điển này của việc kiểm soát đồng thời là khá đơn giản. Các hệ thống phải đối phó với việc truy cập read/write đồng thời thực hiện một hệ thống khóa bao gồm hai loại khóa. Các khóa này thường được biết đến như việc chia sẻ khóa: khóa riêng biệt hoặc các khóa read/write. 5 Điều khiển truy cập đồng thời Khóa phân mảnh là một cách để cải thiện việc đồng thời chia sẻ nguồn tài nguyên chia sẻ trở nên có chọn lọc hơn về những gì chúng ta khóa. Thay vì khóa toàn bộ tài nguyên, ta chỉ cần khóa một phần có chứa các dữ liệu chúng ta cần phải thay đổi. Tốt hơn, việc khóa chỉ nên thực hiện chính xác với phần dữ liệu chúng ta có kế hoạch thay đổi. Việc giảm thiểu số lượng dữ liệu mà chúng ta muốn khóa tại một thời điểm, cho phép các thay đổi một nguồn tài nguyên nhất định nào đó xảy ra đồng thời miễn là chúng không xung đột với nhau. B. C.Các Storage engine trong kiến trúc MySQL MySQL hỗ trợ các kỹ thuật lưu trữ khác nhau để điều khiển tạo ra các bảng phục vụ cho các mục đích ứng dụng khác nhau của người dùng. Với kiến trúc MySQL hoàn toàn độc lập với các ứng dụng DBA ở tất cả các cấp độ thực thi chi tiết ở mức độ lưu trữ, cung cấp một hình ứng dụng phù hợp dễ dàng với các API. Với phiên bản hiện tại MySQL 5.1 đã hỗ trợ các kỹ thuật lưu trữ sau - MyISAM: là kỹ thuật lưu trữ mặc định (trước phiên bản 5.1), được sử dụng ở hầu hết các ứng dụng web, ứng dụng kho dữ liệu những môi trường ứng dụng ứng dụng khác. - InnoDB: Một kỹ thuật lưu trữ an toàn trong trong giao dịch như commit, rollback khả năng phục hồi để bảo vệ dữ liệu người dùng. InnoDB cung cấp khóa hàng, cũng cung cấp tính toàn vẹn dữ liệu bằng các ràng buộc toàn vẹn tham chiếu khóa ngoài. - Infobright: Đây là một kỹ thuật mới nhất của cộng đồng mã nguồn mở, hoàn toàn miễn phí. Với kỹ thuật này chúng ta có thể sử dụng vào nhiều ứng dụng khác nhau đặc biệt là ứng dụng trong kho dữ liệu. Vì không gian lưu trữ hiệu năng của kỹ thuật này mang lại là vượt trội so với các kỹ thuật trước đó. - Memory: Lưu trữ tất cả dữ liệu trong bộ nhở RAM để truy cập nhanh các ứng dụng đòi hỏi cao về hiệu năng. Kỹ thuật này trước đây được biết đến như là kỹ thuật HEAP - Merge: cho phép một DBA hoặc người phát triển nhóm một chuỗi các hoạt động bảng MyISAM giống nhau tham chiếu chúng như là những đối tượng. Kỹ thuật này tốt cho môi trường VLDB giống như kho dữ liệu. - Archive: cung cấp giải pháp hoàn hảo để lưu trữ lấy số lượng lớn - Federated: cung cấp khả năng liên kết các máy chủ riêng biệt MySQL để tạo ra một cơ sở dữ liệu logic từ các máy chủ vật lý. - NDBCLUSTER (cũng được biết đến như NDB): đây là một kỹ thuật phân cụm cơ sở dữ liệu đặc biệt phù hợp cho các ứng dụng đòi hỏi cao về thời gian hoạt động tính sẵn dùng. - CSV: là kỹ thuật lưu trữ dữ liệu trên file văn bản, sử dụng các giá trị định dạng bằng dấu. - Blackhole: Mục đích của kỹ thuật này phục vụ trong thiết kế cơ sở dữ liệu phân tán. - 6 III. MỞ RỘNG TRUY VẤN CHUYỂN ĐỔI DỮ LIỆU SANG DẠNG JSON Mục này giới thiểu các loại hàm trong MySQL các cách tạo ra các hàm trong MySQL tuy nhiên trong khuôn khổ luận văn chỉ giới thiệu tập trung vào cách mở rộng truy vấn sử dụng các hàm do người dung tự phát triển. Từ đó ứng dụng xây dựng các hàm UDF chuyển đỗi dữ liệu truy vấn dạng bảng sang JSON. 1) A.Hàm do người dùng định nghĩa (UDF) Các hàm do người dùng định nghĩa phải được viết bằng ngôn ngữ lập trình C hoặc C++ hệ điều hành phải hỗ trợ chức năng tải các thư viện động. Các hàm do người dùng định nghĩa cung cấp các tính năng như sau:  Hàm có thể trả về kiểu số nguyên, kiểu chuỗi, kiểu số thực cũng như chấp nhận nhiều tham số đầu vào cùng kiểu dữ liệu  Chúng ta có thể tạo ra một hàm đơn giản để điều khiển một dòng tại một thời điểm hoặc hàm tổng hợp để điều khiển một nhóm dòng.  Thông tin cung cấp trong các hàm cho phép kiểm tra số lượng, kiểu tham số tên của các tham số của hàm  Giá trị trả về của hàm có thể là Null hoặc thông báo lỗi xảy ra Với mỗi hàm nếu chúng ta muốn sử dụng trong câu lệnh SQL chúng ta nên định nghĩa tương ứng trong C hoặc C++. Ví dụ tên “xxx” được sử dụng cho tên một hàm để phân biệt giữa SQL C (C++) XXX() viết hoa là một hàm trong SQL còn xxx() là một hàm trong C/C++ Khi sử dụng C++ chúng ta có thể đóng gói hàm trong C với từ khóa extern "C" { . } điều này sẽ bảo đảm rằng tên của hàm trong C++ có thể đọc được khi hoàn thành hàm UDF. Hàm trong C/C++ mà chúng ta phải viết để thực thi giao diện XXX() là xxx() 2) B. Hàm UDF đơn giản Trong phần này sẽ tả các hàm khác nhau cần định nghĩa khi tạo các hàm UDF đơn giản. Khi tạo ra một hàm UDF đơn giản cần phải tạo ra 3 hàm, 2 trong số 3 hàm đó có thể tùy chọn  Hàm xxx_init(): hàm tùy chọn. Khi một truy vấn SQL gọi hàm UDF thì hàm init sẽ được gọi đầu tiên nếu nó tồn tại. Hàm này có nhiệm vụ sau đây: o Kiểm tra số tham số trong hàm xxx(). o Kiểm tra tham số nào là bắt buộc phải có, tham số nào là tùy chọn để chỉ cho Mysql buộc phải có đối số đó khi hàm chính được gọi. o Phân bổ bộ nhớ theo yêu cầu của hàm chính.  Hàm xxx(): Hàm chính (hàm bắt buộc) sau khi hàm khởi tạo xxx_init() được gọi thì hàm xxx() sẽ được gọi hàm này có trách nhiệm xử lý dữ liệu trả về kết quả. 7  Hàm xxx_denit(): Hàm tùy chọn Khi hàm chính kết thúc trả về kết quả hàm hủy xxx_denit() sẽ được gọi nếu nó tồn tại. Hàm này có chức năng hủy giá trị khởi tạo cho hàm xxx(). Khi một hàm UDF đơn giản được gọi thứ tự gọi các hàm sẽ như sau: Khai báo các hàm như sau: Hàm khởi tạo xxx_init my_bool xxx_init(UDF_INIT *initid, UDF_ARGS *args, char *message); Hàm chính xxx() Đối với hàm trả về kết quả là chuỗi ký tự (String) được khai báo như sau: char *xxx(UDF_INIT *initid, UDF_ARGS *args,char *result, unsigned long *length,char *is_null, char *error); Với hàm trả về kết quả là số nguyên (INTEGER) được khai báo như sau long long xxx(UDF_INIT *initid, UDF_ARGS *args,char *is_null, char *error); Với hàm trả về kết quả là số thực (REAL) được khai báo như sau double xxx(UDF_INIT *initid,UDF_ARGS *args,char *is_null, char *error); Hàm hủy xxx_deinit() void xxx_deinit(UDF_INIT *initid); C.Hàm UDF tổng hợp Trong phần này sẽ tả những thiết lập cần thiết khi tạo ra các hàm UDF tổng hợp. Như đã trình bày ở mục Hàm UDF tổng hợp ngoài các hàm của hàm UDF đơn giản nó còn có thêm các hàm như hàm xxx_reset, xxx_add xxx_clear. Thứ tự các hàm được gọi khi truy vấn SQL gọi hàm UDF tổng hợp như sau: init reset xxx_init() xxx() xxx() ……. xxx_denit() 8 add add . main reset add add . main … deinit Hàm xxx_reset() Hàm này sẽ được gọi khi MySQL tìm thấy dòng đầu tiên của nhóm mới. Nó thiết lập lại giá trị của biến tổng hợp sau đó sử dụng tham số UDF_ARGS như là giá trị đầu tiên của nhóm hàn được khai báo như sau: Void xxx_reset(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error); Hàm xxx_reset() không cần thiết trong phiên bản MySQL 5.1 nó được thay bằng hàm xxx_clear(). Tuy nhiên chúng ta có thể khai báo cả 2 hàm xxx_reset xxx_clear() để có thể làm việc với các phiên bản của MySQL cũ hơn (Nếu khai báo cả 2 hàm trên trong rất nhiều trường hợp nó gọi hàm xxx_reset để thiết lập lại giá trị của các biến sau đó gọi hàm xxx_clear() để thêm vào tham số UDF_ARGS giá trị đầu tiên của nhóm.  xxx_clear() Hàm này được gọi khi MySQL cần thiết lập lại kết quả tổng hợp. Nó được gọi khi bắt đầu một nhóm mới nhưng cũng có thể được gọi để thiết lập lại giá trị cho truy vấn khi không có dòng nào thỏa mãn điều kiện hàn xxx_clear() được khai báo như sau void xxx_clear(UDF_INIT *initid, char *is_null, char *error); is_null được thiết lập là CHAR(0) trước khi gọi hàm xxx_clear(). Hàm xxx_clear() là hàm cần có trong MySQL phiên bản 5.1 Hàm xxx_add() Đây là hàm được gọi cho tất cả các dòng thuộc cùng một nhóm. Chúng ta sử dụng để thêm giá trị trong tham số UDF_ARGS cho giá trị tổng hợp. Hàm xxx_add() được khai báo như sau: void xx_add(UDF_INIT *initid,UDF_ARGS *args, char *is_null, char *error); 9 Hàm xxx() là hàm UDF có chức năng tổng hợp được khai báo như hàm xxx() của hàm UDF đơn giản. Hàm chính xxx: Hàm chính trong hàm tổng hợp khác với hàm chính trong hàm UDF đơn giản thay vì hoạt động trên các dòng dữ liệu đơn hàm chính trong hàm UDF luôn hoạt động trên dữ liệu tổng hợp được tổng hợp bởi hàm add dữ liệu này thường được lưu trữ bởi cấu trúc dữ liệu được tham chiếu bởi con trỏ initid->ptr được tạo ra bởi hàm init. Hàm chính sẽ lấy dữ liệu từ cấu trúc này tính toán tổng hợp dữ liệu. 3) D. Biên dịch cài đặt hàm UDF Các bước tiếp theo sau khi đã hoàn thành thao tác lập trình các hàm trên chúng ta phải thực hiện các bước sau để có thể sử dụng các hàm đó trong MySQL  Biên dịch các hàm UDF  Tải các hàm UDF vào máy chủ MySQL  Sử dụng các hàm UDF trong câu truy vấn. Biên dịch hàm UDF trên máy chủ Linux  Bước 1: Tạo ra một File liên kết động bằng cách sử dụng lệnh sau  shell> gcc -shared -o udf_example.so udf_example.c  Nếu sử dụng câu lênh gcc với lệnh configure libtool chúng ta có thể sử dụng câu lệnh tạo file *.so đơn giản hơn như sau  shell>make udf_example.la  Sau khi biên dịch thành một đối tượng chia sẻ chứa các hàm UDF chúng ta cần phải cài đặt chúng thông báo cho MySQL biết. Khi sử dụng câu lệnh gcc để biên dịch file udf_example.c thành file udf_example.so. Việc biên dịch nếu sử dụng câu lệnh make sẽ tạo ra file udf_example.so.0.0.0 trong thư mục libs. Copy các đối tượng chia sẻ vào thư mục plugins của Server.  Đây là những thay đổi dành cho phiên bản MySQL 5.1 đối với các phiên bản cũ hơn đối tượng chia sẻ có thể được tìm thấy ở bấy kỳ thư mục nào bởi hệ thống tìm kiếm trong thư viện liên kết động,  Trên một số hệ thống chương trình ldconfig có thể cấu hình hệ thống liên kết đồng không nhận ra đối tượng chia sẻ trừ khi nó được đặt tên bắt đầu bằng lib trong trường hợp đó ta thay đổi tên file udf_example.so thành libudf_example.so Biên dịch hàm UDF trên máy chủ Windows Trên hệ thống window để biên dịch các hàm UDF cần thực hiện như sau  Bước 1: Tải mã nguồn phát triển của Hệ quản trị CSDL MySQL 5.1  Bước 2: Cài đặt chương trình Cmake nếu cần thiết (phiên bản 2.6 hoặc cao hơn)  Bước 3: Trong mã nguồn tìm kiếm thư mục sql. Trong đó có file udf_example.def udf_example.c. Copy cả 2 file đó vào thư mục làm việc. 10  Bước 4: Dùng chương trình Cmake tạo file với nội dung như sau PROJECT(udf_example) # Path for MySQL include directory INCLUDE_DIRECTORIES("c:/mysql/include") ADD_DEFINITIONS("-DHAVE_DLOPEN") ADD_LIBRARY(udf_example MODULE udf_example.c udf_example.def) TARGET_LINK_LIBRARIES(udf_example wsock32)  Bước 5: Tạo VC project solution File bằng lệnh Cmake –G “<Generator>”  Bước 6: Tạo File udf_example.dll bằng lệnh devenv udf_example.sln /build Release Cài đặt hàm UDF trên máy chủ MySQL Sau khi tạo xong đối tượng chia sẻ được cài đặt sẽ có một thông báo của mysql về việc thêm hàm mới với câu lệnh. Nếu đối tượng File có phần hậu tố khác với .so trên hệ thống hãy sửa lại cho đúng. Lệnh tạo hàm trong mysql CREATE FUNCTION <tên hàm> RETURNS <kiểu dữ liệu> SONAME <tên File chia sẻ> Ví dụ: mysql>CREATE UNCTION metaphon RETURNS STRING SONAME 'udf_example.so'; C. E. Xây dựng hàm UDF chuyển đổi dữ liệu truy vấn sang dạng JSON 1) Hàm udf_json_to_array() Mục đích của hàm: udf_json_to_array () sẽ trả về chuỗi json là một mảng trong javascript với các phần tử là các tham số Tham số đầu vào arg1, ,argN Kiểu dữ liệu của tham số có thể là Kiểu số sẽ được ánh xạ thành kiểu số thực Kiểu chuỗi : sẽ được ánh xạ thành chuỗi nằm trong dấu trích dẫn Hàm này có thể không có tham số nếu không truyền vào tham số kết quả ra là một mảng rỗng. Kết quả ra: Là một biểu thức Javascript chuyển thành đối tượng mảng. Ví dụ:

Ngày đăng: 26/11/2013, 20:16

Hình ảnh liên quan

Hình 1.1 Cấu trúc của Json - Mở rộng truy vấn MySQL và ứng dụng chuyển đổi  dữ liệu dạng bảng sang JSON

Hình 1.1.

Cấu trúc của Json Xem tại trang 2 của tài liệu.

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan