skillup

技術ブログ

Database

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

投稿日:

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

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

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

デメリット

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

対策

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

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

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

デメリット

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

対策

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

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

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

デメリット

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

対策

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

-Database
-

執筆者:


comment

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

関連記事

no image

MySQLのセキュアな設定

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

no image

SQL 更新系に関して

SQL実践入門、残り2章になりましたが、いやーむずいっす。 今回は9章を進めていますがSQLはもともと検索を主な用途として発展したため、SELECT文の使用がメインになります。 ですが、UPDATE文 …

no image

Firebaseについて

前回Lambdaに少し触れましたが、2019年6月現在、サーバーレスなアプリというものが活況(?)のようです。 大規模なアプリというと Webサーバー+RDB+サーバーサイドプログラミング言語 が必須 …

no image

HAVING句の活用 発展編

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

no image

データベースのインデックスについて

今回はデータベースのインデックスに関して。 検索条件を早くする場合、何よりも速度が速くなるのはインデックスを張ることでしょう。 インデックスを張ることは単語を索引順に並べることですので、劇的に速度が向 …

アーカイブ