ã“ã®è¨˜äº‹ã¯ Groonga Advent Calendar 2014 ã®12日目ã®è¨˜äº‹ã§ã™ã€‚
最åˆã¯ã€ŒMroonga with MySQL Fabric(ä»®)ã€ã¨ã„ã†ã‚¿ã‚¤ãƒˆãƒ«ã‚’考ãˆã¦ã„ãŸã‚“ã§ã™ãŒã€MySQL Fabricã¯ãƒ•ツーã®MySQLサーãƒãƒ¼ã®ä¸Šã§ãƒžã‚¹ã‚¿ãƒ¼æ˜‡æ ¼ã¨ã‹ã‚ˆã—ãªã«ã‚„ã£ã¦ãれるãŸã‚ã®ãƒŸãƒ‰ãƒ«(?)ウェアãªã®ã§ã€Mroongaã‚‚å‹•ã„ã¦å½“ãŸã‚Šå‰ã ã¨æ€ã£ã¦ã‚„ã‚ã¾ã—ãŸã€‚
ã˜ã‚ƒã‚別ã®MySQLã®HA実装ã®XtraDB Clusterã§ã‚‚ã‚„ã‚ã†ã‹ãªã¨æ€ã„ã¾ã—ãŸãŒã€ã‚ˆã考ãˆãŸã‚‰ãれã¯ã‚‚ã†1å¹´åŠå‰ã«ã‚„ã£ã¦ã„㦠( mroongaã‚’XtraDB Clusterã§å†—長化ã§ããã†ãªãƒ¡ãƒ¢ ) 当時ã¯ã¾ã "m"ãŒå°æ–‡å—ã ã£ãŸã‚“ã ãªãƒ¼ã¨ã‹æ„Ÿæ…¨æ·±ã„ã§ã™ã。
PXCã‚‚5.6ã«ãªã‚Šã¾ã—ãŸã—wsrepã‚‚ãƒãƒ¼ã‚¸ãƒ§ãƒ³ä¸ŠãŒã£ã¦ã¾ã™ãŒã€ä»Šã§ã‚‚ã§ãã‚‹ã®ã‹ã©ã†ã‹ã¯çŸ¥ã‚Šã¾ã›ã‚“。誰ã‹è©¦ã—ã¦ãã ã•ã„。
MySQL Cluster with Mroongaã¯ä»•組ã¿ä¸Šä¸å¯èƒ½ã ã— (ラッパーモード使ã£ã¦ã‚‚ã€SQLノード上ã«è»¢ç½®ç´¢å¼•ãŒä½œæˆã•れるã®ã§ãƒ€ãƒ¡) ã‚‚ã†HAã‚„ã‚ã¦ã€ãƒ•ãƒ„ãƒ¼ã«æ™®æ®µã‚„ã£ã¦ã„ã‚‹ã“ã¨ã‚’メモã—ã¦ãŠã“ã†ã¨æ€ã„ã¾ã™ã€‚
é•·ã‹ã£ãŸãªå‰ç½®ã。
基本的ã«MySQLã—ã‹è§¦ã£ãŸã“ã¨ãªã‹ã£ãŸäººãŒMroongaã§å…¨æ–‡æ¤œç´¢â€¦ãªã®ã‚’想定ã—ã¦ã„ã¾ã™ã€‚ãã†ã€ä¿ºã 。
ã•ã¦ã€ä½•ã¯ã¨ã‚‚ã‚れテーブルã®å®šç¾©ã‚’確èªã—ãŸã‚Šã—ã¾ã™ã€‚
特ã«ä½•ã‚‚ã“ã ã‚りãŒãªã„ã¨ãã¯--output_type tsvを指定ã—ã¦ãŠãã¨ã€æ”¹è¡ŒãŒå¤šããªã£ã¦è¦‹ã‚„ã™ã„ã®ã§ã‚ãŸã—ã¯å¥½ãã§ã™ã€‚
groongaコマンドラインクライアントã‹ã‚‰å©ãã¨ãã¯ã€ä½™è¨ˆãªã‚‚ã®ãŒä½•ã‚‚ã¤ã„ã¦ã„ãªã„"データベースå".mrnファイルを指定ã—ã¾ã™ã€‚
ä½•ãŒæ›¸ã„ã¦ã‚ã‚‹ã®ã‹è©³ã—ãã¯åˆ¤ã‚Šã¾ã›ã‚“ãŒã€è»¢ç½®ç´¢å¼•ã¯t1-val("テーブルå"-"インデックスå")ã¨ã„ã†ã‚ªãƒ–ジェクトã«å…¥ã£ã¦ã„るよã†ã§ã™ã€‚
トークナイザーã¯TokenBigram, ノーマライザーã¯NormalizerMySQLGeneralCIã§ã™ã。トークナイザーやノーマライザーをTypoã™ã‚‹ã¨ã“ã“ãŒæƒ³å®šã—ã¦ã„ã‚‹ã®ã¨é•ã†å€¤ã«ãªã£ãŸã‚Šã—ã¾ã™ã_|ï¿£|â—‹
実際ã«ãƒˆãƒ¼ã‚¯ãƒŠã‚¤ã‚ºã•れãŸçµæžœãŒè¦‹ã‚‰ã‚Œã¾ã™ã€‚本番ã§ã“れをやるã¨çµæ§‹å¤§å¤‰ãªã®ã§ã€CREATE TABLE .. LIKE, INSERT INTO .. SELECTã§ã‚ºãƒ¬ã¦ã‚‹æ°—ãŒã™ã‚‹è¡Œã ã‘を抽出ã—ã¦èªã¿ã¾ã™ã€‚
ãŸã¨ãˆã°ãƒˆãƒ¼ã‚¯ãƒŠã‚¤ã‚¶ãƒ¼ã‚’変ãˆã‚‹ã¨ã©ã†ãªã‚‹ã‚“ã ã¨ã‹ã„ã†ã®ã¯ã“ã®ã‚ˆã†ã«èª¿ã¹ã¦ã„ã¾ã™ã€‚(Groongaã®)selectã‚³ãƒžãƒ³ãƒ‰ã¯æš—é»™ã«--limit 10を押ã—込んã§ãれるã®ã§ã€ãƒˆãƒ¼ã‚¯ãƒ³ãŒ10個以上ã«åˆ†ã‹ã‚Œã‚‹(ãŸã¶ã‚“ã€ãƒ•ツーã¯åˆ†ã‹ã‚Œã‚‹ã€ã ã‚ã†)å ´åˆã¯--limit -1ã§ç„¡åˆ¶é™ã«å‡ºåŠ›ã•ã›ã‚‰ã‚Œã¾ã™ã€‚
ã“ã‚“ãªæ„Ÿã˜ã§èª¿ã¹ã¦ã€ãªã‚“ã‹ã©ã†ã‚‚全角ã®è¨˜å·ã‚ˆã‚Šå¾Œã‚ã«è©°ã‚ã‚‰ã‚ŒãŸæ–‡å—ãŒã¡ã‚ƒã‚“ã¨ãƒˆãƒ¼ã‚¯ãƒŠã‚¤ã‚ºã•れã¦ãªãã? ã¨ã‹ã„ã†ã®ã«æ°—付ã„ãŸã‚Šæ°—付ã‹ãªã‹ã£ãŸã‚Šã—ã¾ã™ã€‚
http://sourceforge.jp/projects/groonga/lists/archive/dev/2014-February/002110.html
ã¡ãªã¿ã«Tritonn時代ã«ã‚‚sennaコマンドラインクライアント(ãŸã¶ã‚“groongaコマンドラインクライアントã¨åŒã˜ã‚ˆã†ãªæ©Ÿèƒ½ã‚’æŒã£ã¦ã„ãŸã‚“ã ã‚ã†ã‘れã©)ãŒã‚ã£ãŸã‚“ã§ã™ãŒã€ã“ã£ã¡ã¯ã‚³ãƒžãƒ³ãƒ‰ã®ãƒ‰ã‚ュメントãŒã©ã“ã«ã‚‚å˜åœ¨ã—ãªã‹ã£ãŸã®ã§æŒ«æŠ˜ã—ã¾ã—ãŸã€‚。(Tritonnã‹ã‚‰Mroongaã¸ã®ç§»è¡Œã®æ™‚ã«ã€åŒã˜ã‚ˆã†ãªã®ãŒè¦‹ã‚‰ã‚ŒãŸã‚‰å°‘ã—便利ã ã£ãŸã ã‚ã†ãªãã€ã¨æ€ã„ã¤ã¤ï¼‰
ã¨ã¯ã„ãˆã€ã€Œæ¤œç´¢çµæžœãŒãŠã‹ã—ã„ã€ã“ã¨ã«æ°—付ãã®ã£ã¦é›£ã—ã„ã§ã™ã‚ˆã。。
PlanetMySQL Voting: Vote UP / Vote DOWN
最åˆã¯ã€ŒMroonga with MySQL Fabric(ä»®)ã€ã¨ã„ã†ã‚¿ã‚¤ãƒˆãƒ«ã‚’考ãˆã¦ã„ãŸã‚“ã§ã™ãŒã€MySQL Fabricã¯ãƒ•ツーã®MySQLサーãƒãƒ¼ã®ä¸Šã§ãƒžã‚¹ã‚¿ãƒ¼æ˜‡æ ¼ã¨ã‹ã‚ˆã—ãªã«ã‚„ã£ã¦ãれるãŸã‚ã®ãƒŸãƒ‰ãƒ«(?)ウェアãªã®ã§ã€Mroongaã‚‚å‹•ã„ã¦å½“ãŸã‚Šå‰ã ã¨æ€ã£ã¦ã‚„ã‚ã¾ã—ãŸã€‚
ã˜ã‚ƒã‚別ã®MySQLã®HA実装ã®XtraDB Clusterã§ã‚‚ã‚„ã‚ã†ã‹ãªã¨æ€ã„ã¾ã—ãŸãŒã€ã‚ˆã考ãˆãŸã‚‰ãれã¯ã‚‚ã†1å¹´åŠå‰ã«ã‚„ã£ã¦ã„㦠( mroongaã‚’XtraDB Clusterã§å†—長化ã§ããã†ãªãƒ¡ãƒ¢ ) 当時ã¯ã¾ã "m"ãŒå°æ–‡å—ã ã£ãŸã‚“ã ãªãƒ¼ã¨ã‹æ„Ÿæ…¨æ·±ã„ã§ã™ã。
PXCã‚‚5.6ã«ãªã‚Šã¾ã—ãŸã—wsrepã‚‚ãƒãƒ¼ã‚¸ãƒ§ãƒ³ä¸ŠãŒã£ã¦ã¾ã™ãŒã€ä»Šã§ã‚‚ã§ãã‚‹ã®ã‹ã©ã†ã‹ã¯çŸ¥ã‚Šã¾ã›ã‚“。誰ã‹è©¦ã—ã¦ãã ã•ã„。
MySQL Cluster with Mroongaã¯ä»•組ã¿ä¸Šä¸å¯èƒ½ã ã— (ラッパーモード使ã£ã¦ã‚‚ã€SQLノード上ã«è»¢ç½®ç´¢å¼•ãŒä½œæˆã•れるã®ã§ãƒ€ãƒ¡) ã‚‚ã†HAã‚„ã‚ã¦ã€ãƒ•ãƒ„ãƒ¼ã«æ™®æ®µã‚„ã£ã¦ã„ã‚‹ã“ã¨ã‚’メモã—ã¦ãŠã“ã†ã¨æ€ã„ã¾ã™ã€‚
é•·ã‹ã£ãŸãªå‰ç½®ã。
基本的ã«MySQLã—ã‹è§¦ã£ãŸã“ã¨ãªã‹ã£ãŸäººãŒMroongaã§å…¨æ–‡æ¤œç´¢â€¦ãªã®ã‚’想定ã—ã¦ã„ã¾ã™ã€‚ãã†ã€ä¿ºã 。
ã•ã¦ã€ä½•ã¯ã¨ã‚‚ã‚れテーブルã®å®šç¾©ã‚’確èªã—ãŸã‚Šã—ã¾ã™ã€‚
mysql56> use d1
Database changed
mysql56> CREATE TABLE t1 (num serial, val varchar(32), FULLTEXT KEY(val)) Engine= Mroonga Comment= 'Engine "InnoDB"';
Query OK, 0 rows affected (0.06 sec)
mysql56> SELECT mroonga_command('table_list')\G
*************************** 1. row ***************************
mroonga_command('table_list'): [[["id","UInt32"],["name","ShortText"],["path","ShortText"],["flags","ShortText"],["domain","ShortText"],["range","ShortText"],["default_tokenizer","ShortText"],["normalizer","ShortText"]],[259,"t1","d1.mrn.0000103","TABLE_HASH_KEY|PERSISTENT","ShortText",null,null,null],[260,"t1-val","d1.mrn.0000104","TABLE_PAT_KEY|PERSISTENT","ShortText",null,"TokenBigram","NormalizerMySQLGeneralCI"]]
1 row in set (0.00 sec)
mysql56>
mysql56> SELECT mroonga_command('table_list --output_type tsv')\G
*************************** 1. row ***************************
mroonga_command('table_list --output_type tsv'): "id" "UInt32"
"name" "ShortText"
"path" "ShortText"
"flags" "ShortText"
"domain" "ShortText"
"range" "ShortText"
"default_tokenizer" "ShortText"
"normalizer" "ShortText"
259
"t1"
"d1.mrn.0000103"
"TABLE_HASH_KEY|PERSISTENT"
"ShortText"
260
"t1-val"
"d1.mrn.0000104"
"TABLE_PAT_KEY|PERSISTENT"
"ShortText"
"TokenBigram"
"NormalizerMySQLGeneralCI"
1 row in set (0.02 sec)
特ã«ä½•ã‚‚ã“ã ã‚りãŒãªã„ã¨ãã¯--output_type tsvを指定ã—ã¦ãŠãã¨ã€æ”¹è¡ŒãŒå¤šããªã£ã¦è¦‹ã‚„ã™ã„ã®ã§ã‚ãŸã—ã¯å¥½ãã§ã™ã€‚
groongaコマンドラインクライアントã‹ã‚‰å©ãã¨ãã¯ã€ä½™è¨ˆãªã‚‚ã®ãŒä½•ã‚‚ã¤ã„ã¦ã„ãªã„"データベースå".mrnファイルを指定ã—ã¾ã™ã€‚
$ /usr/groonga/4.0.6/bin/groonga d1.mrn
> table_list --output_type tsv
0 1418374830.69561 0.00125479698181152
"id" "UInt32"
"name" "ShortText"
"path" "ShortText"
"flags" "ShortText"
"domain" "ShortText"
"range" "ShortText"
"default_tokenizer" "ShortText"
"normalizer" "ShortText"
259
"t1"
"d1.mrn.0000103"
"TABLE_HASH_KEY|PERSISTENT"
"ShortText"
260
"t1-val"
"d1.mrn.0000104"
"TABLE_PAT_KEY|PERSISTENT"
"ShortText"
"TokenBigram"
"NormalizerMySQLGeneralCI"
END
ä½•ãŒæ›¸ã„ã¦ã‚ã‚‹ã®ã‹è©³ã—ãã¯åˆ¤ã‚Šã¾ã›ã‚“ãŒã€è»¢ç½®ç´¢å¼•ã¯t1-val("テーブルå"-"インデックスå")ã¨ã„ã†ã‚ªãƒ–ジェクトã«å…¥ã£ã¦ã„るよã†ã§ã™ã€‚
トークナイザーã¯TokenBigram, ノーマライザーã¯NormalizerMySQLGeneralCIã§ã™ã。トークナイザーやノーマライザーをTypoã™ã‚‹ã¨ã“ã“ãŒæƒ³å®šã—ã¦ã„ã‚‹ã®ã¨é•ã†å€¤ã«ãªã£ãŸã‚Šã—ã¾ã™ã_|ï¿£|â—‹
mysql56> SELECT * FROM t1;
+-----+----------+
| num | val |
+-----+----------+
| 1 | yoku0825 |
| 2 | yoku0826 |
+-----+----------+
2 rows in set (0.00 sec)
mysql56> SELECT mroonga_command('select t1-val --output_type tsv')\G
*************************** 1. row ***************************
mroonga_command('select t1-val --output_type tsv'): 3
[ "_id" "UInt32" ] [ "_key" "ShortText" ] [ "index" "t1" ]
2 "0825" 1
3 "0826" 1
1 "YOKU" 4
1 row in set (0.02 sec)
実際ã«ãƒˆãƒ¼ã‚¯ãƒŠã‚¤ã‚ºã•れãŸçµæžœãŒè¦‹ã‚‰ã‚Œã¾ã™ã€‚本番ã§ã“れをやるã¨çµæ§‹å¤§å¤‰ãªã®ã§ã€CREATE TABLE .. LIKE, INSERT INTO .. SELECTã§ã‚ºãƒ¬ã¦ã‚‹æ°—ãŒã™ã‚‹è¡Œã ã‘を抽出ã—ã¦èªã¿ã¾ã™ã€‚
mysql56> ALTER TABLE t1 DROP KEY val;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql56> ALTER TABLE t1 ADD FULLTEXT KEY (val) Comment 'parser "TokenBigramIgnoreBlankSplitSymbolAlphaDigit"';
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql56> SELECT mroonga_command('table_list --output_type tsv')\G
*************************** 1. row ***************************
mroonga_command('table_list --output_type tsv'): "id" "UInt32"
"name" "ShortText"
"path" "ShortText"
"flags" "ShortText"
"domain" "ShortText"
"range" "ShortText"
"default_tokenizer" "ShortText"
"normalizer" "ShortText"
259
"t1"
"d1.mrn.0000103"
"TABLE_HASH_KEY|PERSISTENT"
"ShortText"
260
"t1-val"
"d1.mrn.0000104"
"TABLE_PAT_KEY|PERSISTENT"
"ShortText"
"TokenBigramIgnoreBlankSplitSymbolAlphaDigit"
"NormalizerMySQLGeneralCI"
1 row in set (0.02 sec)
mysql56> SELECT mroonga_command('select t1-val --limit -1 --output_type tsv')\G
*************************** 1. row ***************************
mroonga_command('select t1-val --limit -1 --output_type tsv'): 10
[ "_id" "UInt32" ] [ "_key" "ShortText" ] [ "index" "t1" ]
5 "08" 8
7 "25" 1
9 "26" 1
8 "5" 1
10 "6" 1
6 "82" 9
3 "KU" 6
2 "OK" 5
4 "U0" 7
1 "YO" 4
1 row in set (0.02 sec)
ãŸã¨ãˆã°ãƒˆãƒ¼ã‚¯ãƒŠã‚¤ã‚¶ãƒ¼ã‚’変ãˆã‚‹ã¨ã©ã†ãªã‚‹ã‚“ã ã¨ã‹ã„ã†ã®ã¯ã“ã®ã‚ˆã†ã«èª¿ã¹ã¦ã„ã¾ã™ã€‚(Groongaã®)selectã‚³ãƒžãƒ³ãƒ‰ã¯æš—é»™ã«--limit 10を押ã—込んã§ãれるã®ã§ã€ãƒˆãƒ¼ã‚¯ãƒ³ãŒ10個以上ã«åˆ†ã‹ã‚Œã‚‹(ãŸã¶ã‚“ã€ãƒ•ツーã¯åˆ†ã‹ã‚Œã‚‹ã€ã ã‚ã†)å ´åˆã¯--limit -1ã§ç„¡åˆ¶é™ã«å‡ºåŠ›ã•ã›ã‚‰ã‚Œã¾ã™ã€‚
ã“ã‚“ãªæ„Ÿã˜ã§èª¿ã¹ã¦ã€ãªã‚“ã‹ã©ã†ã‚‚全角ã®è¨˜å·ã‚ˆã‚Šå¾Œã‚ã«è©°ã‚ã‚‰ã‚ŒãŸæ–‡å—ãŒã¡ã‚ƒã‚“ã¨ãƒˆãƒ¼ã‚¯ãƒŠã‚¤ã‚ºã•れã¦ãªãã? ã¨ã‹ã„ã†ã®ã«æ°—付ã„ãŸã‚Šæ°—付ã‹ãªã‹ã£ãŸã‚Šã—ã¾ã™ã€‚
http://sourceforge.jp/projects/groonga/lists/archive/dev/2014-February/002110.html
ã¡ãªã¿ã«Tritonn時代ã«ã‚‚sennaコマンドラインクライアント(ãŸã¶ã‚“groongaコマンドラインクライアントã¨åŒã˜ã‚ˆã†ãªæ©Ÿèƒ½ã‚’æŒã£ã¦ã„ãŸã‚“ã ã‚ã†ã‘れã©)ãŒã‚ã£ãŸã‚“ã§ã™ãŒã€ã“ã£ã¡ã¯ã‚³ãƒžãƒ³ãƒ‰ã®ãƒ‰ã‚ュメントãŒã©ã“ã«ã‚‚å˜åœ¨ã—ãªã‹ã£ãŸã®ã§æŒ«æŠ˜ã—ã¾ã—ãŸã€‚。(Tritonnã‹ã‚‰Mroongaã¸ã®ç§»è¡Œã®æ™‚ã«ã€åŒã˜ã‚ˆã†ãªã®ãŒè¦‹ã‚‰ã‚ŒãŸã‚‰å°‘ã—便利ã ã£ãŸã ã‚ã†ãªãã€ã¨æ€ã„ã¤ã¤ï¼‰
ã¨ã¯ã„ãˆã€ã€Œæ¤œç´¢çµæžœãŒãŠã‹ã—ã„ã€ã“ã¨ã«æ°—付ãã®ã£ã¦é›£ã—ã„ã§ã™ã‚ˆã。。
PlanetMySQL Voting: Vote UP / Vote DOWN