skillup

技術ブログ

Database

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

投稿日:

リトライ

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

デメリット

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

対策

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

バッチ分割

デメリット

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

対策

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

バッチ再利用不可

デメリット

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

対策

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

-Database
-

執筆者:


comment

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

関連記事

no image

SQL 集計関数の利用

先日同様、ある程度複雑な問題のSQLに関して。出典はSQL実践入門。 問題 下記のようなテーブル(テーブル名)で より古い年のデータが存在しない場合 NULL 直近の年のデータより売り上げが伸びた場合 …

no image

SQL case式やウィンドウ関数の威力

プログラマには「プログラムは思った通りに動かない。書いた通りに動く。」「バグではない仕様です」なんて面白い格言がいろいろありますが、データベースの世界にも「WHERE句で条件分岐させるのは素人のやるこ …

no image

joinとeager loading

フレームワークでデータをORMがらみでjoinするときのネタ。 自分の場合はLaravel。他のフレームワークでも考え方は通じるものあるかと・・ Contents1 通常のjoin2 ループの中で取得 …

no image

slow-query-logについて

データベースを伴う部分でののチューニングですが、大きく分けると SQLを書き直す インデックスを張りなおす プログラム内部でキャッシュを有効化する 設定ファイルの修正 上記のようなかんじになるのではな …

no image

SQL結合 サブクエリに関して

今回はサブクエリに関してです。 もちろんSQL実践入門を読み進めています。 SQL上ではテーブル、ビュー、サブクエリというのは機能的にはそれほど変わらず主にパフォーマンスの点で違いがでてきます。 以下 …