Kouhei Sutou
kou****@clear*****
2012年 6月 4日 (月) 18:02:27 JST
須藤です。 In <4FC84****@rozet*****> "[groonga-dev,00914] mroongaのファイルの置き場所の指定について" on Fri, 01 Jun 2012 13:11:43 +0900, 磯部 和広 <k-iso****@rozet*****> wrote: > 現在、mroongaを使うと、mysqlのdataディレクトリに > データベース名.mrn.* > が大量に作られます。 > > 複数のDBを扱っていて、かつ、データが大量にあると > 管理に困るほどです。 すみません。。。 > エンジンによっては、 > データベース名でディレクトリを作成 > その配下にファイルを作成 > となっており、大変扱いやすいです。 実は、MySQLのストレージエンジンのインターフェイスの絡みでそ れが難しいのです。。。(後述) > 例えば、 > このDBはアクセス速度が非常に重要なので > /dev/shm配下に配置して、シンボリックリンクをdataディレクトリに張る > 等が出来ます。 > > 勿論、SSDでも構いません。 > > 自分は、よくデータ解析用にDBを複製する場合に > DBを作成する > そのDBのディレクトリを/dev/shmに移動しシンボリックリンクを張る > テーブルを作成しデータをロード > データをグリグリ弄る > という作業を行います。 なるほど! > このようにしてアクセス速度の向上を簡単に行えるようにしたいのですが > 首題の件につき、何か良い方法は無いでしょうか。 現時点で手軽にできる方法としてはテーブルを作成してから、以下 のようなシェルスクリプトを実行するという感じかと思います。 cd /mysql/data/dir for mroonga_file in database_name.mrn*; do mv "$mroonga_file" /dev/shm ln -s "/dev/shm/$mroonga_file" ./ done mroongaのデータを置く場所を変数で設定できるようにする、とい うのもありかもしれません。 > 自分は、今32GBのRAMを積んだマシンを使用している為 > /dev/shmが16GB使えるので、この方式が使えるとかなり戦力になります。 > > ちなみに、データが1GB、mrnファイルが12GBありました。 少しメモリに余裕がありそうなので、ちょっと乱暴ですが、mysqlの dataディレクトリ毎/dev/shm以下にmvしてシンボリックリンクを張 るというのも手軽かもしれません。乱暴ですが。。。 > というか、あまりに大量にmrnファイルが出来るので > lsすると酷い事になり、毎回萎えます・・・ す、すみません。。。 > 希望的観測としては > データベース名.mrn* > というネーミングルールでファイルが作られているので > データベース名/データベース名.mrn* > でファイルを作るようにするだけのような気がしています。 実は、それができないんです。 データベース名/以下に置くファイルはMySQLに「こんな拡張子のファ イルを置きますよー」と伝えないといけないのですが、mroongaが 作るファイルの拡張子は.0000100というように連番になって、固定 の拡張子リストとして伝えることができません。(動的にリストを 作成する必要がある。)そのため、DROP DATABASE時などにMySQLに とって知らないファイルが見つかってエラーになってしまいます。 そこで、現在のようにMySQLの管理下に入らない場所にmroonga用の ファイルを作っています。 -- 須藤 功平 <kou****@clear*****> 株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270) groongaサポート: http://groonga.org/ja/support/ プログラミングが好きなソフトウェア開発者を募集中: http://www.clear-code.com/recruitment/