読者です 読者をやめる 読者になる 読者になる

振り返ってみて

一般

去年の2月に着想して、提案して、1年間、C言語N-gramベースの全文検索エンジンの実装を毎日やってた。だいぶ詳しくなりました。
なんとかできあがったので、振り返ってみる。

性能って結局のところ

  • I/Oコストの削減
  • CPUコストの削減

という結論に至りました。I/O要求回数を減らし、I/O量を減らすと劇的に性能は改善します。
そういったところをうまくできるように実装することが求められるわけです。

ただ、システムによっては、高速なI/Oを持っている場合があります。
例えば、SSDを採用した場合は、HDDの10倍のI/O性能を出すことができます。
こうなってくると今度は、CPUがビジーになります。なので、CPUコストをうまく削減できるような実装が求められます。

結局、両方のコストを削減すると、システム構成が貧弱でもそれなりの性能を出すことができ、システム構成が豪華になればより性能が上がるということになる。こういう実装をしておくと提案しやすいと思う。

さて、簡単に書いたが、実際の実装はとても大変だった。
I/O量を削減するために、キャッシュ機構を導入したりするわけだが、インデックスへの更新と検索の同時実行などを考えると簡単ではない。
インデックスの更新もうまくブロック化しないとI/O量が多くなってしまう。ただし、ブロック化しすぎると今度はI/O要求回数が多くなってしまう。いっそブロック化などしないという方法もあるが、その場合は、インデックスサイズが大きくなってしまう。これらはトレードオフであり、設計方針に従って、良い閾値を決める必要がある。
検索も実用に耐えるレベルまでにしようと思うと様々なクエリをサポートする必要がある。
こういった難しいことを解決して実用レベルにまでもっていくのは簡単ではなかった。

最初の性能測定で思うほど性能が出なかった時はかなりつらかった。
心が折れそうになったが、二の矢、三の矢を放てるように普段からいろんな手法を調査しておいて助かった。常日頃から勉強しておくのが重要だと再確認しました。

さて、今年は、もう少し大きなことをしたいので、研究所とかと絡んでいろいろやっていきたいと思う。

広告を非表示にする