skillup

技術ブログ

Database

データベース設計のアンチパターン リトライ+バッチ分割+バッチの再利用不可

投稿日:

リトライ

※OLTP=オンライントランザクションシステム(多数の端末から中央のデータベースにアクセスするタイプのシステム)

デメリット

リトライが繰り返し発生することによる負荷の増大。サーバー再起動以外で切り抜けられないことが多い。

対策

  • リトライ回数の上限設定
  • 負荷の考慮
  • タイムアウト制限時間の考慮

バッチ分割

デメリット

トランザクションが長すぎて、最後のほうでエラーになる。バッチが途中でエラーになったが中途半端にデータが更新されてしまっている。

対策

  • 処理分割をきっちり行う
  • 例外に対する認識を常に持っておく
  • バッチの適切な分割(基本的にはワントランザクションで対処したほうがいいが、長すぎるのも危険)。
  • 不用意なautocommitをしない
  • リソースの監視
  • 再実行のことを考えた分割にしておく

バッチ再利用不可

デメリット

エラーが発生しても失敗したところから再実行できない。バッチ中に初期化やクリアの処理が入っていない

対策

  • 例外に対する認識を必ず持っておく
  • 処理が正常に進んでいるか否か、プロセス的なログ、テーブルの用意
  • 適切な分割

-Database
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

NULLについて

「達人に学ぶSQL徹底指南書」を読み進めていきましたがNULLについていろいろ書いてあるのでメモリます。 Contents1 NULLには未知と適用不能の2パターンがある2 = NULL が使えず I …

no image

JPAでのデータベースとの同期

このブログでも何回か書いてきたJPAですが、新規レコードをインサートさせた際IDを取得し、そのIDをもとに何らかのキーを作る、そういう処理があったので紹介させていただきます。 何回か書いてますが、JP …

no image

HAVING句の活用 発展編

今回からはまたまたHAVING句です。 下記のようなテーブル(teams)があり、全員が待機状態のチーム(全員がそろっている)を求めます。 member | team_id | status &#82 …

no image

オプティマイザと実行計画

データベースがSQLを受け取って処理を実行する前には下記のような段階があります。 Contents1 パーサー2 オプティマイザ3 カタログマネージャー4 テーブルからデータの取得5 参考リンク パー …

no image

オブジェクト指向 データベース層

本日も引き続き「現場で役立つシステム設計の原則」を読み進めてます。 本日は主にデータベース層の考え方について。 Contents1 データべース層1.1 要点1.1.1 典型的なダメテーブル設計1.1 …