磯部 和広
k-iso****@rozet*****
2012年 6月 4日 (月) 19:13:56 JST
いつもお世話になっております。 懇切丁寧な解説ありがとうございます! >少しメモリに余裕がありそうなので、ちょっと乱暴ですが、mysqlの > dataディレクトリ毎/dev/shm以下にmvしてシンボリックリンクを張 > るというのも手軽かもしれません。乱暴ですが。。。 実はこれ、出来ないんです。 mySQLがmysql/dataにアシンクロナスファイルアクセスしようと するのですが/dev/shmではそれが出来なく・・・(涙 >現時点で手軽にできる方法としてはテーブルを作成してから、以下 >のようなシェルスクリプトを実行するという感じかと思います。 自分もこれを考えたのですが、スクリプト実行後にファイルが増えると アレレ・・・なので止めています。 それと、ご存知のようにHDDアクセスはメモリアクセスの千倍遅いです。 テーブルを作ってからでは、テーブル(とインデックス)作成の 時間を短縮したい要望には応えられないのです・・・ >そこで、現在のようにMySQLの管理下に入らない場所に >mroonga用の ファイルを作っています。 であれば、例えば mysql/data/mroonga_data/データベース名 配下に置けるようなオプションを実装して頂けるだけで 涙がちょちょ切れるくらい嬉しいのですが・・・ そうすれば、結果的に2つシンボリックリンクを張るだけで 同じ事が出来ますので。 (2012/06/04 18:02), Kouhei Sutou wrote: > 須藤です。 > > 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用の > ファイルを作っています。 >