MySQLã®ãƒ¦ãƒ¼ã‚¶å®šç¾©é–¢æ•°ï¼ˆUDF)ã«ã¯ã‚‚ã‚„ã£ã¨ã—ãŸå¤¢ã‚’感ã˜ã¾ã™ã€‚
ã“ã®å¯èƒ½æ€§ã‚’探るã¹ãã€Base64ã®ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ãƒ»ãƒ‡ã‚³ãƒ¼ãƒ‰ã‚’題æã«è§¦ã‚Œã‚ã£ã¦ã¿ãŸã„ã¨æ€ã„ã¾ã™ã€‚
動機ã¨ã—ã¦ã¯ã€MySQLã®ãƒ¦ãƒ¼ã‚¶å®šç¾©é–¢æ•°ï¼ˆUDF)を作りãŸã„ã¨æ€ã„ã€é›°å›²æ°—を知りãŸã‹ã£ãŸã‹ã‚‰ã€‚
手çŸãªã‚‚ã®ã§ã‚れã°ä½•ã§ã‚‚良ã‹ã£ãŸã€‚今ã§ã¯åçœã—ã¦ã„・・・(ry
UDFã®ä½¿ã„ã©ã“ã‚
MySQLã®ãƒ“ルドイン関数ã§ã‚ã‚‹ abs()
ã‚„ concat()
ã®ã‚ˆã†ãªã‚‚ã®ã‚’独自ã«è¿½åŠ ã—ãŸã„ã¨ãã«ä¾¿åˆ©ã§ã™ã€‚ストアドプãƒã‚·ãƒ¼ã‚¸ãƒ£ãƒ¼ã«ã‚‚é™åº¦ãŒã‚ã‚‹ã®ã§ã€ç„¡ç†ãã†ãªã‚‰UDFã¨ã„ã†æµã‚Œã§ã™ã‹ã。
手法 | 実行速度 | 利用言語 | é–‹ç™ºã®æ‰‹é–“ |
---|---|---|---|
Stored Procedures | é…ã„ | SQL | å°ã•ãªã‚‚ã®ã§ã‚ã‚Œã°æ•°åˆ† |
UDF | 速ㄠ| C | 数時間 |
Native Function | 速ㄠ| C | 一大プãƒã‚¸ã‚§ã‚¯ãƒˆ |
※ Stored Proceduresã¯å分速ã„ã§ã™ãŒã€ãƒã‚¤ãƒ†ã‚£ãƒ–ã«æ¯”ã¹ã‚‹ã¨é…ã„ã¨ã„ã†ãƒ‹ãƒ¥ã‚¢ãƒ³ã‚¹ã§ã™
利用ã™ã‚‹ã‚³ãƒ¼ãƒ‰ä¸€å¼
https://github.com/y-ken/mysql-udf-base64
トラブル無ã使ãˆã‚‹ã‹ã¨æ€ã„ãã‚„ã€å‚考記事ã«ã‚ã£ãŸbase64ã®ã‚³ãƒ¼ãƒ‰ã®ã‚³ãƒ³ãƒ‘イルãŒé€šã‚Šã¾ã›ã‚“ï¼
仕方ãªã„ã®ã§å°‘ã—æ‰‹ã‚’入れã¦å‹•ãよã†ã«ã—ã¾ã—ãŸã®ã§ã€GitHubã«ä¸Šã’ã¦ãŠãã¾ã—ãŸã€‚
MySQL-5.6.11ã§å‹•作ã¯ç¢ºèªã—ã¦ã„ã¾ã™ãŒã€MySQL-5.1
ã‚„MySQL-5.5
ã§ã‚‚å‹•ãã¨æ€ã„ã¾ã™ã€‚
利用例
mysql> SELECT base64encode('data,binary,text,...'); +--------------------------------------+ | base64encode('data,binary,text,...') | +--------------------------------------+ | ZGF0YSxiaW5hcnksdGV4dCwuLi4= | +--------------------------------------+ 1 row in set (0.01 sec)
mysql> SELECT base64decode('ZGF0YSxiaW5hcnksdGV4dCwuLi4='); +----------------------------------------------+ | base64decode('ZGF0YSxiaW5hcnksdGV4dCwuLi4=') | +----------------------------------------------+ | data,binary,text,... | +----------------------------------------------+ 1 row in set (0.00 sec)
mysql> CREATE TABLE t1 (body text); Query OK, 0 rows affected (0.02 sec) mysql> INSERT INTO t1 (body) VALUES (base64encode('something')); Query OK, 1 row affected (0.01 sec) mysql> SELECT body, base64decode(body) from t1; +--------------+--------------------+ | body | base64decode(body) | +--------------+--------------------+ | c29tZXRoaW5n | something | +--------------+--------------------+ 1 row in set (0.00 sec)
インストール方法
ビルドã—ã¾ã™
$ git clone https://github.com/y-ken/mysql-udf-base64.git $ cd mysql-udf-base64 $ gcc -Wall -fPIC -I/usr/local/include -shared base64.c -o base64.so $ sudo install -m 755 base64.so `mysql_config --plugindir`
登録ã—ã¾ã™
mysql> CREATE FUNCTION base64encode RETURNS STRING SONAME 'base64.so'; mysql> CREATE FUNCTION base64decode RETURNS STRING SONAME 'base64.so';
以上。
å‚考記事
http://www.codeguru.com/cpp/data/mfc_database/misc/article.php/c12615/MySQL-UDFs.htm http://d.hatena.ne.jp/IT7C/20100831/1283261327
PlanetMySQL Voting: Vote UP / Vote DOWN