skillup

技術ブログ

Database

アンチパターン トランザクションスコープ+大量データのリアルタイム集計+接続が詰まる

投稿日:

本日は主にインフラの設計的なことに関して。

トランザクションスコープの設定

トランザクション(一回の処理)が大きすぎる

デメリット

  • レスポンスが悪い
  • 障害の時に余計に待たされたり、エラーになったりすることがある
  • 非同期だと、ユーザーには成功したという表示がでるのに、実際には処理が落ちている・・ということがあり得る

対策

  • 普段からプログラムをわかりやすく書く(主にコントローラーの部分に処理を集中させればどれがどれかわからない・・・という状態は防げる)
  • 1リクエストでの処理=トランザクションにする(現在業務で使っているアプリは自動的にこれ。かならず1リクエスト=1トランザクションになる。どれがどれだかわからない・・・という状態は防げる)
  • 1リクエストにいろいろな処理をいれすぎず、不要な処理は省く
  • 継ぎ足しでシステムを構築しない
  • キューイングシステムなどの構築

大量データのリアルタイム集計

なんでもかんでもリアルタイムにデータ集計をさせる。ユーザーの要求をいわれるがままにきき、処理量を考慮できていないことが多い。

デメリット

  • 画面表示が遅い
  • SQLが重くレスポンスが返ってこない→ユーザーがボタン連打→さらに遅くなる

対策

  • 最初の段階で大量データでのテストを行う
  • 非正規化などの集計テーブル(ビューも考慮に入れる)を使う
  • トリガーなどを使い、元データが更新された場合自動的に非正規化された表を反映させる
  • 多重処理(いくつもの処理を同時に行う)をやっていない
  • バッチなどで回せる場合は、複雑な処理をバッチに回す

詰まると接続が増えるアーキテクチャ

ある1つの接続がつまり、続いて別の接続がつまり・・というように連鎖反応を起こすシステム。負荷系の障害であり、再現しないタイプのもののため難易度は高め

デメリット

  • DBへの接続数が異常になり、遅くなる
  • 原因がネットワーク不良やIOの遅延など判別しにくく、わからないことが多い

対策

  • 性能テスト(同時に接続数を増やすようなテスト)を行う
  • コネクションプールの理解
  • 接続数の上限を設定しておく

-Database
-

執筆者:


comment

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

関連記事

no image

データベースによるテストデータ作成

テスト環境を作る際に、テストデータを作るのが面倒・・・なんかライブラリでもないかな・・と思っていたんですが、MySQLでいろいろと簡単にできます。 数字 [crayon-5b4eff275eaac29 …

no image

論理設計のアンチパターン

今回からは論理設計のアンチパターンについて。 やってはいけない設計のパターンですね。これはまわりがやっていると気づかずにやっている可能性があるのでしっかりメモしておきたいです。 Contents1 非 …

no image

cakePHPでのマイグレーション

開発を続けているとデータベースのカラムの構造が変更するってことはしょっちゅうですが、管理がいい加減だとメンバー間でテーブルの構造が変わっていたり、本番と開発で違ってくるなどのトラブルが続出します。 そ …

no image

MySQLのセキュアな設定

以前SSHの設定についていろいろ書いたんで今回はMySQLに関して。 Contents1 基本的な処方箋(MySQLに限らないかも)2 ホストのアクセスを制限する3 LOCAL INFILEコマンドを …

no image

MySQLの大文字、小文字問題について

MySQLでテーブルを作る際にカラムに重複を許さない制約(unique)を振ることがあると思います。 数字の場合は問題ないのですが、文字列の場合、なんと英語の大文字と小文字が区別されません。 つまりa …