1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

都市伝説 3階層セレクトアーキテクチャ

Last updated at Posted at 2020-05-14

はじまり

業務の中で1つのトランザクションデータを複数に分割されているテーブル構成があり、3階層セレクトというアーキテクチャがあるそうなので調べてみた。

結果

そのようなアーキテクチャはない…?

説明を受けたアーキテクチャ構成

受注テーブルがあったとして、テーブル名を受注としたとき、以下の3つのテーブルに分割する。

  • 受注R
  • 受注S
  • 受注W

それぞれのアルファベットと意味は以下を表す。

アルファベット 英語表記 用途
R Real 直近データの保持に使用
S Stock ちょっと古いデータの保持に使用
W Warehouse 古いデータの保持に使用

この構成をとることにより、直近データを全表走査しても高速に対象データを取り出すことができ、かつ古いデータを結果から省くことが出来る。

足を引っ張るだけのような…?

この構想には以下の問題があると考えます。

  • 保持期間(直近、ちょっと古い、古い)の判断基準
  • 保持期間の判断基準がデータの用途によって異なる
  • 保持期間ごとにどのテーブルへのクエリなのかアプリケーション側で判断する必要性が増える
  • 同様にバッチ処理などで保持期間ごとの適切なテーブルへのデータ移行の必要性が増える

かなり現実的ではないことだらけのような気がします。

解決策

日付などの基準でパーティションテーブルを使ったほうがいいと思います。
まさにパーティションテーブルの得意分野!という感じがします。
パーティショニングの運用は追加されますが、全表操作しても範囲を限定できますし、テーブルとしては1つになるので保持期間の概念の考慮がシンプルになります。

最後に

この説明を受けた際に「3階層セレクトアーキテクチャをご存知ないんですか?w」と嘲笑されるように指摘され、結構カチンときました。
ですが、私がDB2を知らないだけで、これが常識かも知れません。
また、DB2のバージョンが古いためパーティションテーブルなどがなく、プロジェクトとしてこのようなアーキテクチャを設計し、採用したのかもしれません。

「常識」ってやつはほんとに厄介なやつです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?