groongaã¹ãã¬ã¼ã¸ã¨ã³ã¸ã³ã試ãã¦ã¿ã
http://dev.mysql.com/doc/refman/5.1/ja/storage-engines.html
MySQLã§ã¯ããã¤ãã®ã¹ãã¬ã¼ã¸ã¨ã³ã¸ã³ããµãã¼ããã¦ã¾ããã
ä»åã¯å ¨ææ¤ç´¢ã¨ã³ã¸ã³ã§ããgroongaãç¶æ¿ããgroongaã¹ãã¬ã¼ã¸ã¨ã³ã¸ã³ã試ãã¦ã¿ã¾ãã
ãã®è¨äºã§ã¯ä½¿ãæ¹ãæ¤è¨¼ãè¡ã£ã¦ãã¾ãããã¦ã³ãã¼ããã¤ã³ã¹ãã¼ã«ã¯ãã¡ããåèã«ãã¦ã¿ã¦ãã ããã
â ä½¿ãæ¹
http://github.com/mroonga/mroonga/tarball/v0.1
ããã«ç¾å¨å©ç¨ã§ããSQLã®ãµã³ãã«ãç½®ããã¦ããã®ã§ããã«åºæ¬æ²¿ã£ã¦ãã¾ãã
åºæ¬çã«groongaã®å ¨ææ¤ç´¢ãå©ç¨ããã«ã¯
ã»tableã®engineãgroongaã«ãªã£ã¦ããã ã»æ¤ç´¢å¯¾è±¡ã®ã«ã©ã ã«FULLTEXT INDEXãããã£ã¦ããã
ãè¨å®ããå¿ è¦ãããã¾ãã
ã»create table
mysql> set storage_engine=groonga; Query OK, 0 rows affected (0.00 sec) // DEFAULTãgroongaã«ãªã£ã¦ããã°OK mysql> show engines; mysql> create table t1 (c1 int primary key, c2 varchar(255), c3 text, fulltext index(c2), fulltext index(c3)); Query OK, 0 rows affected (0.43 sec)
groonga ã storage_engine ã«ã»ããããä¸ã§ãé常éã create table ãããã° table ãåºæ¥ã¾ãã
ãã®éã«æ¤ç´¢å¯¾è±¡ã®ã«ã©ã ã«ã¯ fulltext index ãããã¾ãã
ã»select fulltext
mysql> insert into t1 values(1, "ææ¥ã®å¯å£«å±±ã®å¤©æ°ã«ã¤ãã¦","ããããããã"); Query OK, 1 row affected (0.01 sec) mysql> insert into t1 values(2, "ããããã","ææ¥ã®å¯å£«å±±ã®å¤©æ°ã¯åããã¾ãã"); Query OK, 1 row affected (0.00 sec) mysql> insert into t1 values(3, "dummy", "dummy"); Query OK, 1 row affected (0.00 sec) mysql> select * from t1; +----+-----------------------------------------+--------------------------------------------------+ | c1 | c2 | c3 | +----+-----------------------------------------+--------------------------------------------------+ | 1 | ææ¥ã®å¯å£«å±±ã®å¤©æ°ã«ã¤ã㦠| ããããããã | | 2 | ããããã | ææ¥ã®å¯å£«å±±ã®å¤©æ°ã¯åããã¾ãã | | 3 | dummy | dummy | +----+-----------------------------------------+--------------------------------------------------+ 3 rows in set (0.00 sec) mysql> select * from t1 where match(c2) against("å¯å£«å±±"); +----+-----------------------------------------+-----------------------+ | c1 | c2 | c3 | +----+-----------------------------------------+-----------------------+ | 1 | ææ¥ã®å¯å£«å±±ã®å¤©æ°ã«ã¤ã㦠| ããããããã | +----+-----------------------------------------+-----------------------+ 1 row in set (0.00 sec)
match([column_name]) against([search_word]) å½¢å¼ã§æ¤ç´¢ããã°å ¨ææ¤ç´¢ãå¯è½ã§ãã
MySQL ã® FULLTEXT INDEX ã§ãã£ã以ä¸ã®å¶éãgroongaã§ã¯ãªãã§ãã
ã»å ¨ã¬ã³ã¼ãã®50%以ä¸ãå¼ã£ãããæ¤ç´¢èªã¯é¤å¤ããã
ã»æ¤ç´¢èªã¯4æå以ä¸ã
â æ¤è¨¼
ä½¿ãæ¹ãåãã£ãã¨ããã§é度ã¨ãæ¸å¿µäºé ããªããæ¤è¨¼ãã¦ããã¾ãã
ã»é度
storage engine ã InnoDB ã®ã¨ groonga ã® table ãä½ã£ã¦10ä¸ä»¶ãã¹ããã¼ã¿å ¥ãã¦æ¤è¨¼ãã¦ã¿ã¾ããã
mysql> select * from test_innodb; 103488 rows in set (9.07 sec) mysql> select * from test_groonga; 103488 rows in set (3.05 sec) mysql> flush tables; Query OK, 0 rows affected (0.00 sec) mysql> select count(*) from test_innodb; +----------+ | count(*) | +----------+ | 103488 | +----------+ 1 row in set (1.93 sec) mysql> select count(*) from test_groonga; +----------+ | count(*) | +----------+ | 103488 | +----------+ 1 row in set (2.15 sec) mysql> flush tables; Query OK, 0 rows affected (0.00 sec) mysql> select count(*) from test_innodb limit 5000; +----------+ | count(*) | +----------+ | 103488 | +----------+ 1 row in set (5.06 sec) mysql> select count(*) from test_groonga limit 5000; +----------+ | count(*) | +----------+ | 103488 | +----------+ 1 row in set (2.16 sec) mysql> flush tables; Query OK, 0 rows affected (0.00 sec) mysql> select count(*) from test_innodb where RECIPE_NAME like '%ã±ã¼ã%'; +----------+ | count(*) | +----------+ | 4704 | +----------+ 1 row in set (1.95 sec) mysql> select count(*) from test_groonga where match(RECIPE_NAME) against('ã±ã¼ã'); +----------+ | count(*) | +----------+ | 4704 | +----------+ 1 row in set (0.02 sec)
å ¨ææ¤ç´¢ãlimitå¥ãªã©ãç¨ããå ´åãgroongaã®æ¹ãå§åçã«æ©ããã¨ãåããã¾ããã
ã»æ¸å¿µç¹
AUTO_INCREMENTã«å¯¾å¿ãã¦ããªã
âINSERTæã®IDãªã©ã§ãã§ãã¯ãå¿
è¦
ã¾ã ver0.2ã¨ãããã¨ãªã®ã§ããããã宿çã«ãã§ãã¯ãã¦ã¿ããã¨æãã¾ãã