Расширение MySQL с помощью User defined functions (UDF)

На днях я вплотную занялся вопросами расширения MySQL. В этой заметке вы узнаете, как это возможно, и какие инструменты MySQL предлагает для этого.

Плагины MySQL

В первую очередь, средством расширения выступают плагины. Краткое представление о них вы можете составить по этой презентации:

Всем извесный движок хранения InnoDB, поставляется как раз в виде плагина типа “storage engine”. HandlerSocket работает, как плагин-демон. MySQL API позволяет компилировать плагины отдельно от сервера, а значит даёт разработчикам возможность создавать свои расширения.

User defined functions (UDF)

Есть и другой класс расширений – UDF, которые представляют собой новые функции, которые вы можете использовать в запросах. По добавлению UDF есть неплохая мануалка на сайте MySQL. В этой статье я хочу дать обзор некоторым UDF, которые вы можете использовать в своих проектах.

lib_mysqludf_fPROJ4

Библиотека по конвертации географической широты и долготы в декартовы координаты. Может пригодиться в сервисах геолокации.

lib_mysqludf_json

Сейчас JSON практически стал стандартом де-факто для RIA и AJAX взаимодействий. Поэтому нативные (напомню, что они скомпиленные и ооочень быстрые) функции по преобразованию кортежей в формат JSON окажутся очень кстати.

lib_mysqludf_log

Эта библиотечка позволяет писать лог из хранимых процедур и функций, что может помочь в отладке, а также позволяет сделать вывод из процедур вне MySQL.

lib_mysqludf_myxml

Эта библиотека осуществляет XML преобразования (конвертацию из/в) с помощью XPath и XQuery.

lib_mysqludf_preg

Библиотека работы с регулярными выражениями. Основное её преимущество в том, что она работает гораздо быстрее чем регулярки на PHP, и даже быстрее чем встроенные в MySQL RLIKE/REGEXP.

lib_mysqludf_stat

Библиотека функций статистического анализа.

lib_mysqludf_stem

В этой библиотеки содержатся функции стемминга.

Сте́мматизация (сте́мминг) — это процесс нахождения основы слова для заданного исходного слова. Основа слова необязательно совпадает с морфологическим корнем слова. Алгоритм стемматизации представляет собой давнюю проблему в области компьютерных наук. Первый документ по этому вопросу был опубликован в 1968 году. Данный процесс применяется в поиcковых системах для обобщения поискового запроса пользователя.
Конкретные реализации стемматизации называются алгоритм стемматизации или просто стеммер.

Они используют Dr. M.F. Porter’s Snowball API и самое интересное, что поддерживают русскую морфологию.

lib_mysqludf_str

Эта библиотека работы со строковыми функциями, для тех, кому не хватает встроенных функций MySQL.

lib_mysqludf_sys

Пожалуй одна из самых интересных UDF билиотек. Позволяет запускать команды ОС из запроса/хранимой процедуры. О ней скоро будет отдельная статья.

lib_mysqludf_ta

Библиотека содержит функции технического анализа фондовых рынков. Может пригодиться тем, кто кодит биржевых роботов. Я с этим правда завязал, так что думаю что мне не понадобится. Преимущество этих функций в том, что они отрабатывают быстрее, чем самописные аналоги допустим в PHP.

lib_mysqludf_udf

UDF библиотека для отладки UDF библиотек 🙂

lib_mysqludf_xql

Эта бибилиотека позволяет получать ответ от MySQL сервера в XML виде. Если вы используете для своих сервисов прослойку, которая по MySQL ответу генерит XML, то можете использовать эту UDF вместо неё. А потом замерьте скорость 😉

mysql-udf-regexp

Ещё один вариант работы с регулярками в MySQL.

memcached

На десерт – самое интересное. Эта библиотека добавляет функции работы с Memcached напрямую из MySQL. Это позволит, например, делать инвалидацию кэша в триггерах, да и много чего ещё.

В общем, UDF – это отличный инструмент, который позволит вам делать некоторые вещи быстрее, чем на уровне веб-приложения (т.к. они скомпилированы), и добавляет много разных интересных возможностей.

Литература

Репозитарий UDF функций MySQL
http://www.smira.ru/2010/10/30/mysql-udf-json-memcacheq/
http://www.mysql.ru/docs/man/Adding_UDF.html
UDF для работы с Memcached напрямую из MySQL

1 Comment

Leave a Comment