KOF 2008での「はてな流大規模データ処理」by id:naoyaさんの発表に関して質問したときのメモ

KOF 2008 の発表資料 - naoyaのはてなダイアリー

こちらの発表に関して、後日質問した時のメモ。

  • 全文検索のインデックス生成等の為、MySQLのデータをバッチ処理でdumpしている、という点について。
    • データが多く、dump処理からして重い/時間が掛かるのでは?
      • そこまで即時性を求めないので、10日とか用途毎に適当な間隔で。
      • パーティショニングされたテーブルなら、各パーティションそれぞれ担当分のdumpとなり軽くなる。
      • また、master-master構成で片方をユーザーのアクセス用、もう片方を完全にバッチ用にしたり。
        • はてなは殆どMyISAM。テーブルロックになるのでユーザーの利用でアクセスするマシンでdumpすると、その間のレスポンスがえらいことに。
          • ちなみにMyISAMって結構よく壊れて、気付いたら滅茶苦茶リソース食って暴走してたりする。
          • でもファイルコピペするだけで他のDBにテーブル移動したりできて取り扱いは楽。
          • はてなの場合、トランザクション基本的に必要ないのでinnoDB使ってない。
    • 用途毎に特化したデータを出力している?
      • テキストになっていればHadoopに突っ込んで割とどうとでもなるので、そうでもない。
  • 全文検索について。Sedueを使っているが、既にLuceneなどもあるが?
    • Senna -> 以前試したが、segvしてMySQLごと落ちたりして使えなかった。今は良くなってると思うけど。インデックスがでかくなってメモリに載せられなかったり。
    • Lucene -> 試したが、目的の用途では遅くて使えなかった。融通も効きにくい。それにJavaだし。
      • その時一緒に話していた方より、Luceneは億単位のデータを扱っている例もあるとのこと。(ここでその方がSenのコミッタである事が判明。驚!!)
      • 日本語の扱いが…。またn-gramだとキーに紐付くドキュメント数が膨大になって、計算量が多くなりがち。
    • HyperEstraier -> 試してみていない模様?mixiとかでも使ってるのでいい感じなのかな、とのこと。
    • Sedue -> Suffix Arrayならではの弱点もある。(具体的な話は忘れた。)
    • 検索は自分で実装するのが良いよ!
  • Hadoop使いまくりですか?
    • 今年使い始めて、今8台のHadoopクラスタ
    • 最初はログデータの解析が追い付かないので使い始めたけど、その後クローラに使ったり、結構色々出来て便利。
  • memcachedは結構使ってる?
    • 勿論使ってるけど、そこまで使いまくってるというほどでもない。
    • 格納するデータはケースバイケースで。あんまり凝ったことをしようとし過ぎるとまたバッドノウハウの世界に…。
    • DBアクセスも、OSのキャッシュにデータがちゃんと載ってれば全然速い。


以上、特に公表してマズそうな内容も無さそうだし、もしかすると何か参考になる人がいるかも知れないので公開しておく。憶えている内容をそのまま書いただけで、間違ったことを書いている可能性もあるので注意。

ちなみに、id:kazuhookuさんのコメントで「〜OS のバッファの話からすると、myisam なん?」とあったが、例えばinnoDBだとOSのバッファが有効でないという事なんだろうか。実践ハイパフォーマンスMySQL読めば分るかな?

しかしJOINもトランザクションも要らないなら、もうそこはRDBMS捨てても良さそうな気もするんですが、本当に完全にJOIN使わないという訳でもなく、色々あってなかなか捨てられないもんなんですね。