【C#】Task.Runメソッドについて
Task.Runメソッドについて
MSドキュメント上では、「スレッド プール上で実行する指定された作業をキューに配置し、その作業を表す Task オブジェクトを戻します。」と記載されています。
Runメソッドの引数に指定された処理をスレッドプール上で実行するものくらいと認識しておきます。
スレッドプールという言葉が出てきたがスレッドと何が違うの...?
調べてみると
サーバ上でリクエストを並行処理する際にスレッドの生成・破棄を繰り返すとリソースへ負担がかかるため、スレッドプールという仕組みが出来た。
スレッドプールでは、リクエストをスレッドプール専用のキューへ登録し、一度確保したスレッドへリクエストを割り当てることでリソースを再利用するように設計されている。詳しくはこちらの記事を参照。
各文字コード(UTF, Unicode, JIS)の違い
各文字コード(UTF-8, Unicode, JIS)の違い
システムをメンテしている際に外部システムとのファイル連携やアップロード時に文字コードの違いによるバグが発生したため文字コードについて整理してみた。
システムの設計フェーズにて何の文字コードを使うか明記しておくことの重要性を実感した。
コンピュータ上では、文字はそれぞれのビットパターンに割り当てられている。
例えばa ⇒ 0100 0001、b ⇒ 0100 0010など
文字コードによってそれぞれビットパターンや表現が異なる
概要 | |
ASCIIコード | 数字・英字・記号を1バイトで表す |
JIS | 数字・英字・記号に加えてひらがな、カタカナ、漢字も表せる |
EUC | |
Unicode |
世界中の文字を統一。UTF-8, UTF-16, UTF-32などがある。 (それぞれ8, 16, 32ビット分の文字を表現することができる) |
文字化け
アプリでファイルを開く際の違う文字コードで表示されることで文字化けが起こる。
sakuraエディタでEUC形式で保存したファイルをメモ帳でUnicode形式で表示するとそれぞれの文字に割り当てられているビットパターンが異なるため文字化けを起こす。
【Java】streamメソッド・mapメソッド
Spring BootでToDoアプリを作成
Spring BootでToDoアプリを作成している際に、streamメソッド・mapメソッドが登場したため調べた。
これらのメソッドはStream APIと呼ばれるコレクションに対する操作をサポートするメソッドである。
streamメソッド
Stream APIでは、Streamインスタンスを生成する必要がある。
streamメソッドを使うことでfindメソッドで取得したList配列をもとにStreamインスタンスを生成する。
mapメソッド
streamメソッドで生成したインスタンスの各要素をラムダ式を用いてTaskDTOクラスへ変換している。この時点では、Stream型であるため最後にList型へ変換する。
【SQL】データベースチューニングをしてパフォーマンスを向上させる
なぜデータベースをチューニングするのか
※【22日間で学ぶ】SQL文、分析関数、テーブル設計、SQLチューニングまでMySQLで覚えるSQL実践講座を参考
データベースは運用を続けていくとデータ量は増加していき、パフォーマンスが落ちていく。
アプリケーションサーバの場合はパフォーマンスが遅くなったとしてもスケールアウトが容易であるが、データベースサーバの場合はスケールアウトは難しい。
オンライン処理では、データベースサーバのパフォーマンスが落ちてページの表示に時間がかかるとユーザは不満を感じる。
(だいたい3秒以上経つと遅いなと感じるとか)
オンライン処理全体で3秒をパフォーマンスの基準とすると、データベースサーバでは1秒以下のレスポンスが求められる。
オプティマイザと実行計画
データベースのパフォーマンスを向上させるには、SQLの実行の流れとオプティマイザを知る必要がある。
SQLの実行の流れは以下の図の通りである。
構文チェックとは、SQLの文法に誤りがないかをチェックする。
意味チェックとは、SQLに記述されているテーブルや列がデータベースに存在するかチェックする
共有プールとは、過去に実行したSQLを保存しておく場所であり、既に保存されていたらそのまま実行する。保存されていなかったら最適化へ進む。
最適化とは、実行計画を複数作成する。
実行計画の作成とは、実際に実行するプログラムを決定する。
実行とは、SQLを実行する。
実行計画とオプティマイザとは
実行方法とは、インデックス、カラムやデータ量、レコード件数などの情報をもとに割り出されたデータ探索の手段。
オプティマイザとは、複数の実行計画の中で統計的に最も効率的な実行計画を指す。この際の統計情報はインデックスやカラム、レコード件数などから割り出される。例えば、東京ー大阪間を移動するのに新幹線、バス、飛行機などの手段が実行計画にあたる。その中で、料金が安い、移動時間が短い、乗り換えが少ないなどを考慮した最適な移動方法がオプティマイザにあたる。
参考
【ASP.NET Core MVC】AsNoTrackingメソッドとは何か
AsNoTrackingメソッドとは
ASP.NET Core MVCで、DbContextを用いてデータベースからデータを取得する際に下記のような記述で取得されます。
EntityFrameworkではDbContextを更新・削除した場合、SaveChangesメソッドでDBへ変更内容を反映させます。その際にどのデータが更新されたか変更履歴を管理し、ロールバックなどの処理が可能になります。
一方で、変更履歴を管理するためアクセス数が多かったり、データ量によっては処理速度が遅くなります。
AsNoTrackingメソッドを使用することで変更履歴を管理しないでクエリを実行できます。
そのため、データ参照のみではAsNoTrackingメソッドを使うことが多いです。
【負荷テスト】JMeterを使ってみた
JMeterとは
業務にてアプリケーションサーバへのユーザ同時接続負荷テストを実行するためにJMeterを使いました。
JMeterは何人が何分(または秒、時間)の間に何回HTTPリクエストを送信するか設定できます。100人のユーザがURL1とURL2に5分間で100回アクセスするなど設定してサーバに負荷をかけます。
初めて使うツールでしたので下記を参考にしました。
【図解】はじめてでもわかるJMeterの使い方 - RAKUS Developers Blog | ラクス エンジニアブログ
JMeterでどのURLに送信するかシナリオを作成しますが、レコーディング機能を使うことでブラウザからの送信されたリクエストのヘッダーとボディ情報を記録しシナリオを簡単に作成できます。
【ASP.NET Core MVC】
ASP.NET Core MVCのデータアクセスの学び直し
ASP.NET Core MVCのデータアクセスを学び直して自身の発見や新しい理解をアウトプットとしてまとめました。
データベースコンテキストから生成されるテーブルの名前の変更方法
データベースコンテキストでは、以下のようにプロパティ名Courses, Students, Enrollmentsのような複数系の名前でデータベースのテーブル名が作成されます。
ここでテーブル名を単数形や任意の名前に変更したい場合は、以下の赤枠のコードを追加することで任意の名前でテーブル名を定義することができます。
DBサービスを登録する
ASP.NET Core MVCでは、コントローラ処理やDBとの連携処理をサービスとして登録することで利用することができます。
以下では、コントローラ処理とDBとの連携処理をサービスとして登録しています。
また、初めてDBを作成する際はDbInitializerクラス(DBの初期データ登録用クラスを)作成してサービスとし利用します。