FORCIA CUBEフォルシアの情報を多面的に発信するブログ

SQLの100倍高速化にチャレンジ! - サマーインターンメンターが語るインターン生の取り組み【前編】

2018.11.08

技術本部の光山です。今夏、フォルシアでは初の試みとなる「FORCIA Summer Internship 2018」を開催しました。前回の記事では、インターンチームからの視点で、サマーインターンを実現するまでの道のりをご紹介しました。今回はメンター視点で、具体的にインターン生に取り組んでもらった課題について、前編・後編の2回に分けてご紹介します。サマーインターンに参加されなかった学生の皆さんにも、フォルシアの取り組みやフィロソフィーを多少でも知っていただけたら幸いです。

私はメンターとして、下記2つのコースを担当しました。

  • 検索高速化コース(第1ターム・第3ターム)

    ECサイトのオンラインのSQLを徹底的にチューニングするコースです。

  • データクレンジングコース(第2ターム・第3ターム)

    「検索改善のための、ECサイト用データのクレンジング」に取り組むコースです。
    記事はこちら

前編では、「検索高速化コース」について、詳しく説明していきます。

検索高速化コース

高速化はなぜ重要か

フォルシアは創業時から、一貫して「速さ」にこだわり、検索の高速化に取り組んできました。なぜ高速化が重要なのでしょうか。私の考える代表的な理由は次のとおりです。

  • ユーザにとって、ストレスの無いサービスとなる
  • 速ければその分、複雑な処理をさせることができる

複雑な処理とは、例えばユーザごとに検索結果の並び順を最適化したり、料金などの表示内容を変えたりすることです。フォルシアの検索速度へのこだわりについてはこちらの記事にもまとめられていますので、ぜひご覧ください。

この検索高速化コースはまさにフォルシアのコア技術、そしてコアバリューを体感していただく絶好の場となるはずだと思い、私も気合いを入れて課題作成を行いました。

課題の概要

今回は、とあるECサイトの検索で実際に使用されているSQLを、課題用に多少簡略化した状態で、インターンシップの最初に提示しました。このSQLは、商品の基本情報を保持する「商品マスタ」、商品が属するカテゴリの情報を保持した「カテゴリマスタ」など、10種類程度のマスタ群から、ECサイトの商品一覧の表示に使用する10項目程度を返却するSQLになります。

このSQLは、インデックスも作成されていませんし、NULLも含まれていますし、オンラインで複数テーブルとのJOINも行われています(課題とは言え、なかなかひどいSQLでした)。そのまま実行した場合の実行時間は10秒以上です。

オンラインのレスポンスが毎回10秒以上となると、ユーザに与えるストレスは多大なものとなってしまいます。そのようなサービスがあったとしたら、まともに使われることはないでしょう。そこで、「実行時間が10秒以上のこのSQLを高速化せよ!目標性能は300ミリ秒以内」を検索高速化コースのお題としました。

インターン生の取り組み

第1タームのインターン生は、Webアプリケーションの開発経験はあるものの、SQLはORMの使用が中心で、SQLのチューニングをしたり、複雑なSQLを書いたりした経験は無い、というバックグラウンドの方でした。ご自身もその点に課題意識があり、弱点克服のためにこのインターンシップに応募してくださいました。実際、ORMであっても、どのようなSQLが実行されているのか理解しておくことはとても重要になります。その意味で、課題意識がとても素晴らしい方だなと思いました。

DSC01604.JPG

第3タームのインターン生は、データ分析用のSQLの経験がある方でした。ただし、データ分析を行っていたときは、一晩かけて実行して翌日結果を確認する、といったことが多かったようです。1秒でも「遅い」と言われるオンラインでのパフォーマンスの世界に最初は戸惑いつつも、果敢に課題にチャレンジされていました。
インターンシップ期間中は、インデックスの作成(闇雲に作成すればよいというものではありません)や、検索に最適なデータの保持方、PostgreSQLのユーザ定義関数の実装など、様々な角度から高速化を検討していただきました。

DSC01932.JPG

特に印象的だったのは、ただ高速化を図るだけではなく、お二方とも、

  • 不必要にリッチな提供はしない(速度面を考慮して料金は離散値で保持、など)
  • 精度も考慮した機能の提供(キーワード検索において、合致したカラムに応じて並び順を変更するロジックの実装、など)

のように、 機能面でも積極的に工夫をされている点でした。

さらには、最終日に振り返りをしていたとき、第1タームのインターン生が

「何のための高速化であるのか、という観点がとても重要であることが分かりました。そのために、高速化以外にも、UI/UXの設計やデータクレンジングも併せて考慮する必要があるのだと実感しました」

とおっしゃっていました。こちらは正にそのとおりで、この発言には私も思わず膝を打ちました。実際、今回のインターンシップではUI/UXコースもデータクレンジングコースもあります。顧客に価値を提供するためにも、これらは密に関連しているからです。たった5日間でこの発言に至る彼の成長速度に大変感動し、本当にトップレベルの優秀な学生の方に来て頂いたんだなと実感した次第です。

おまけ

おすすめ本

達人に学ぶSQL徹底指南書.jpg

達人に学ぶ SQL徹底指南書

著者:ミック
出版社:翔泳社 (2008/2/7)

SQLの基礎固め用に、事前課題として「達人に学ぶ SQL徹底指南書」という本を読んでもらいました。
SQLは集合指向の言語であるということが(しつこいくらい?)書いてあり、手続き型言語と根本思想が異なることがよく分かります。応用編と併せてとてもおすすめなので、SQL入門者の方にぜひ読んでいただきたい本です。

次回予告

次回は、「サマーインターンメンターが語るインターン生の取り組み【後編】」として、データクレンジングコースの取り組みをご紹介します。お楽しみに!

この記事を書いた人

光山倫央

2013年新卒入社、エンジニア。
MRO(企業向けの消耗品)業界向けの検索サービス開発を担当。
最近では、新規事業開発にも携わり、新たな技術の創出を目指す。