技術レポート

求められたハードルは
100万規模

高速クロス集計インデックス
開発部
スペシャリスト
佐野 拓

どんな複雑な条件も高速に!

100万件などの多数の顧客データを、性別・年齢・住んでいる場所・関心がある事柄など、複数の条件を組み合わせて絞り込み、メールの配信を行いたいという案件がありました。
最初はSQLでアドホックにクエリを発行して、その結果を取得するようにしていましたが、絞り込みに時間がかかるのが不便でした。予め決めた件数より多く、かつなるべく反応が得られるユーザー層を条件に指定して絞り込みたいという要求があるため、条件を増やしたり減らしたりしながら目標とした件数に近づけていく必要があります。その際に、条件を変える度に長く待たされたため、作業がしにくい問題がありました。 この処理を大幅に高速化できれば、作業の負担を大幅に軽減することができます。これが開発のきっかけとなりました。

マルチスレッドによる高速化を実現

通常のDBを使った場合は、速度に限界がありました。絞り込みの多くの条件は、カーディナリティ(値の種類の数)が小さいものでした。例えば、性別であれば男性・女性の2つの値しかありませんし、都道府県であれば47の値しかありません。
そこで、ビットマップインデックス・Bツリーインデックスを独自に構築し、高速に絞り込みを行うソフトウェアを新規に構築することにしました。絞り込みの処理自体はマルチスレッドで並列実行できるようにし、大幅な高速化を実現しました。

絞り込みエンジンに特化した高い性能

通常のDBのビットマップインデックスでは、DBとしての機能(耐障害性など)を実現するために全体的な性能が落ちてしまいます。
ユミルリンクの高速クロス集計インデックスは、高速処理を優先し、耐障害性などの機能を省いています。オリジナルのデータ自体はDBにあるため、障害時は再度生成することができるからです。
機能を限定することで、絞り込み処理そのものに全リソースを使うことができるため、きわめて高速な性能を実現しました。

「1,000万規模でのリアルタイム性を追求。」

ユミルリンクの高速クロス集計インデックスは、データをロードしてインデックスを作成する処理も、絞り込み処理もきわめて高速です。その代わり、データを一括してロードし、インデックスを作成するという基本的な機能しかありません。インデックス作成はかなり高速ですが、1,000万件規模になると、ある程度の時間はかかってしまいます。今後、「リアルタイムに最新のデータを参照したい」といったお客様の要望を実現するため、データの差分更新を実現したいと思っています。


メールマガジン

ページの先頭へ