Quantcast
Channel: Planet MySQL
Viewing all articles
Browse latest Browse all 1081

mroongaのストレージコストを考えてみる(その1)

$
0
0
寝ぼけ眼でぼんやり計算しただけなので、間違いがあったらご指摘いただけると非常にありがたいですm(_"_)m

まず前提。
ウチではかつてはTritonn全盛、今はmroonga全盛な「MySQL de FullTextSearch」が大好きな感じでやっています。Sphinxとか誰か手を出さないかなぁと思いつつ、いい加減MySQL de FTSから足を洗って全文検索ライブラリはMySQLとは連携させないでやろうぜ、というのもあったりします。

そこで取り敢えず現状の洗い出し(?)の一環として、mroongaのストレージコストをぼんやりと考えてみることにします。
というか運用している分にはこれがキツい。
インデックス用のmrnファイルは(tokenBigramなせいもあって)データサイズに対して線形に増えるので、ストレージ容量と、あとそれをキャッシュするだけのメモリ増設がもうままならない。

じゃあ実際どれくらい食うのかを取り敢えず計算してみる。


サンプルデータはTwitterのツイート履歴。
ただし全文検索が試したいだけだったり、カラムをもろもろ列挙したりするのがものすごく面倒だったので

mysql55> CREATE TABLE tweet ( tweet_id BIGINT UNSIGNED PRIMARY KEY, timestamp TIMESTAMP NOT NULL DEFAULT 0, text TEXT) Engine = mroonga;
と超簡略版のテーブル定義に
mysql55> LOAD DATA INFILE '/tmp/tweets.csv' INTO TABLE tweet FIELDS TERMINATED BY ',' ENCLOSED BY  '"' IGNORE 1 LINES (tweet_id, @dummy, @dummy, @dummy, @dummy, timestamp, @dummy, text, @dummy);
と余計なカラムを読み捨てさせることで面倒を回避した(つもり
いくつかワーニングで弾かれているけど、この段階では非常に些末な問題なので放置。
この状態ではmroongaストレージエンジンにデータだけが存在しているていになる。
mysql55> SHOW TABLE STATUS LIKE 'tweet'\G
*************************** 1. row ***************************
           Name: tweet
         Engine: mroonga
        Version: 10
     Row_format: Dynamic
           Rows: 10045
 Avg_row_length: 0

    Data_length: 54857728
Max_data_length: 0
   Index_length: 0
      Data_free: 0
 Auto_increment: NULL
    Create_time: NULL
    Update_time: NULL
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options:
        Comment:
1 row in set (0.01 sec)

shell> ll *.mrn* | awk '{i+=$5}END{print i}'
72962048
MySQL越しで55M弱, datadirに並べられたmrnファイルを見ると(いやデータ以外に色々入ってるんだろうが)72MBくらい。


同じものをInnoDBに突っ込むと

mysql55> SHOW TABLE STATUS LIKE 'tw_innodb'\G
*************************** 1. row ***************************
           Name: tw_innodb
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 9639
 Avg_row_length: 164
    Data_length: 1589248
Max_data_length: 0
   Index_length: 0
      Data_free: 4194304
 Auto_increment: NULL
    Create_time: 2013-08-17 01:58:25
    Update_time: NULL
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options:
        Comment:
1 row in set (0.00 sec)

shell> ll mrn/tw_innodb.*
-rw-rw---- 1 mysql mysql    8638  8月 17 01:58 2013 mrn/tw_innodb.frm
-rw-rw---- 1 mysql mysql 9437184  8月 17 01:58 2013 mrn/tw_innodb.ibd
10MB…?;

マジで?;

まだ何も全文検索作ってないけどこんなもん?;

( ´-`).oO(でも最大140文字*UTF8が3バイトに他のカラムで10000行くらいなら、InnoDBやMyISAM的にはこの程度のサイズで十分納得というかなんに使ってるんだmroonga。。


PlanetMySQL Voting: Vote UP / Vote DOWN

Viewing all articles
Browse latest Browse all 1081

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>