第8章. データストレージのデザインパターン
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
ビッグデータ環境で仕事をしていて、クエリやジョブの結果を2分以上待ったことがあるだろうか?おそらく多くの人は「はい」と答えるだろうし、中には10分以上待ったことがある人もいるかもしれない。この時間の要素は、データエンジニアリングの仕事において重要な側面である。クエリやジョブの実行が早ければ早いほど、レスポンスも早く得られるし、できればそのコストも安くなる。
この時間的要因を最適化するには、2つの方法がある。第一に、コンピューティングリソースを追加することができる。これは、余分な組織的ステップを必要としない、比較的迅速で簡単なメソッドである。しかし、これは遡及的なステップでもあり、例えばユーザが読み取り遅延に不満を持ち始めた後など、プレッシャーのかかる状況下で実行する必要があるかもしれない。
最適化の第二の方法は、本章で取り上げたデータ・ストレージのデザイン・パターンを用いて、賢明なデータ編成に依存した先手を打つことである。このようによく考え抜かれた構成にすることで、実行タイムは改善され、より早い段階でフィードバックが得られるはずである。
この章ではまず、処理するデータの量を減らし、高速メタデータ・クリーナー・パターンなど、第4章で紹介した冪等性デザイン・パターンの実装を可能にする2つのパーティション分割戦略を発見する。残念ながら、パーティショニングがうまく機能するのは、カーディナリティの低い値(つまり、ある属性について異なる出現があまりない場合)のみである。高カーディナリティデータの場合、バケツ化やソートなど、より局所的な最適化戦略が必要になる。
データを整理する以外にも、ユーザ体験を向上させるためのアプローチがある。それらには次のようなものがある:
- メタデータ・レイヤーを活用し、不必要なデータ関係演算子を回避する。
- コストのかかる演算を一度だけ実行することで、後続の読者のためにそれを具体化する。
- コストのかかるリスト演算を回避することで、データ準備ステップを簡素化する。
最後に、2つのデータ表現アプローチも見ていただきたい。ノーマライザー・アプローチはデータの一貫性を重視し、デノーマライザー・アプローチは一貫性を実行時間の短縮と引き換えにする。
データ・ストレージ戦略をどのように実行に移せばいいのか焦っているなら、データのパーティション分割パターンに移ろう!
パーティショニング
、ストレージレイヤーのレイアウトを定義するとき、最初に答えなければならない質問は、データセットに簡単にアクセスできるようにするには、どのような分割方法が最適か、ということだ。そのレスポンスは、水平方向と垂直方向の整理を担当する2つのパターンで構成される。
パターン水平パーティショナー
これらのデータ編成のアプローチの中で、水平編成は実装の単純さとデータエンジニアリングの初期からの長期的な人気のため、おそらく最も一般的に使用されている。
問題
あなたは、過去4日間のローリング集計を計算するバッチジョブを作成した。数カ月は問題なく稼動していたが、ストレージレイヤーに多くのデータが届くようになると、ジョブのパフォーマンスが低下した。あなたが発見した最大の問題は、4日以上前のレコードを無視するフィルタリング演算の実行時間が増加したことである。
この問題を一時的に軽減するために、あなたはジョブのクラスタにコンピュートパワーを追加した。しかし、それはコストを増加させた。当初と同じようにコストを抑え、新しいデータを取り込んだにもかかわらず実行時間を短縮できるような、より良いアプローチを発見しなければならない。 ...