待ち行列理論について

待ち行列理論とは、スーパーやコンビニのレジに並ぶ客の待ち時間を統計的に算出するものであり、他の何らかの処理系がありそれを利用する待ち行列があるときに応用される。各種性能の問題などで、平均待ち時間などを算出する理論である。

平均待ち時間を計算するには、処理系が処理する性能の分布(レジの数)と客の数などの待ち行列の分布が必要になる。それを記号で表記する、M/M/1モデルであれば、ランダム分布の客に、ランダム分布の処理系が1つある場合である。これをケンドール記法という。次にケンドール記法に使われる記号を示す。

M ランダム分布あるいは指数分布
G 一般分布
D 一定値

サービス要求の発生額度分布/サービス処理時間分布/サービス窓口数

単位時間あたりの平均到着数 λ
単位時間あたりの平均処理件数 μ
窓口の利用率 ρ
処理中のトランザクションを含めたシステム内に帯留するトランザクション数の平均 L
平均到着数 λ = 1 / ts
平均サービス率 μ = 1 / t

M/M/1の待ち行列モデル

M 単位時間あたりのトランザクションの到着数 ランダム到着としてポアソン分布に従う。
M 1件あたりのサービス時間 指数分布に従う。
1 サービス窓口の数 1つ
窓口の利用率(ρ)
待たされる確率
= 処理時間の割合
= 単位時間あたりの処理時間
= 単位時間あたりの平均到着数(λ) * 1件の平均処理時間(1 / μ)
= 単位時間あたりの平均到着数(λ) / 単位時間あたりの処理できる件数(μ)
=λ / μ

系内にだれもいない確率 = 1 – ρ

系内の平均客数
=処理中のトランザクションを含めたシステム内に帯留するトランザクション数の平均( L )
= ρ/(1-ρ)
この式は、数列を使用して算出されたものであり、必ず覚えること。

待ち行列内の平均客数
=サービス待ち行列の客数の平均( Lq )
= L-ρ
=ρ2/(1-ρ)

sql(structured query languege)について

関係データーベースを操作する言葉、言語として、sqlがあります。しかしながら、データベースによって違いがあり、標準化されていません。でも、まとめを書いてみるとします。

sqlと言っても、ddlとdmlがあります。ddlとは、データベースを作成したり、テーブルを作成したりします。dmlとは、データの操作、データの抽出、変更、削除など、CUID(Create Update Insert Delete)を指します。

その中でも、まずは、基本中の基本、抽出と言うか、表示をするコマンドを書きます。

select フィールド名 from テーブル名;

コマンドのあとに条件式を入れることもできます。

select フィールド名 from テーブル名 where フィールド名 = 値;

次にデータを変更するsqlを書きます。

update テーブル名 set フィールド名=更新する値 where 更新する行を選択する条件式;

update テーブル名 set フィールド名=更新する値,フィールド名=更新する値 where 更新する行を選択する条件式;

次にデータを追加するsqlを書きます。

insert into テーブル名 (フィールド名,フィールド名) values (追加する値, 追加する値);

次にデータを削除するsqlを書きます。

delete from テーブル名 where 削除するデータの条件式;

DMLの以上になります。

データベースについて

いろいろな種類と特徴があるが、関係データベースについて、書いてみようと思う。

関係データベースとは

表形式にデータを格納し(テーブルと言う)、複雑なデータ構造の場合は、データごとにインデックスや主キーなど番号を振り、複数のテーブルをリンクさせて、データを格納するものである。(正規化と言う)

関係データベースの種類と特徴

今、このブログのデータは、mysqlと言うデータベースに格納されている。サーバーであり、常に起動していて、データに関する要求に答えてくれる。sqliteと言うデータベースは、常に起動しているわけではなくて、要求があったときだけ、要求に答えてくれる。主に、小中規模のデータを扱うときに使用される。phpフレームワークであるLaravelは、この2つのデーターベースをサポートしています。

正規化の必要性

複雑でかつ大規模なデータ構造のデータには、複数のテーブルに分けて、適切にリンクさせる必要があります。しかし、小規模のデーターでは、必ずしもテーブルを分けない方法もあり、正規化レベルの設定は、データ量に依存し、要求されるデータ操作の速度要求レベルにも依存します。

正規表現について

正規表現の重要性がますます高まっている。たとえば、HTMLのフォームでも、正規表現による値のチェックができるようになってきている。

HTML 5.2: 4.10. Forms – W3C

そこで、簡単ではあるが、正規表現の例を書いてみようと思う。
次の正規表現は、郵便番号というか、3桁の半角数字、ハイフン、4桁の半角数字が入力された場合、マッチすると言う言い方をするが、整合する表現になる。

\d{3}-\d{4}

まとめると

c 特殊な意味を持たない任意の文字cはその文字自身を意味する。
\c 文字cの特殊な意味をなくす。
^文字 行の先頭の文字にマッチ
文字$ 行の終わりの文字にマッチ
文字\b 空白で区切られた単語にマッチ
文字\B 空白で区切られていない単語にマッチ
. 任意の1文字にマッチ(改行は除く)
[文字] 文字のうちの任意の1文字にマッチ、a-zのような範囲の指定も有効
[^文字] 文字にない任意の1文字にマッチ、範囲指定も有効。
\n n番目の\(…\)がマッチしたものを示す。
r* 0回以上のrの繰り返しにマッチ
r+ 1回以上のrの繰り返しにマッチ
r? 0または1回のrの出現でマッチ
文字{値} 値の指定個数でマッチ
文字{値,} 値の指定個数以上でマッチ
文字{値1,値2} 値1~値2の指定範囲でマッチ
r1r2 r1r2という並び
r1 | r2 r1またはr2、|で区切られた任意の文字にマッチ
\(r\) タグ付き正規表現r。ネスト可能。
(r) 正規表現r。ネスト可能。
\c文字 コントロールコードの文字にマッチ
\d 数値([0-9])にマッチ
\D 数値以外の文字([^0-9])にマッチ
\f フォームフィールドの文字にマッチ
\n 改行文字にマッチ
\r 復帰文字にマッチ
\s 1文字の区切り文字([\f\n\r\t\v])にマッチ
\S 区切り文字以外([^\f\n\r\t\v])の一文字にマッチ
\t タブ文字にマッチ
\v 垂直タブ文字にマッチ
\w 英数文字([A-Za-z0-9_])にマッチ
\W 英数文字([A-Za-z0-9_])以外の文字にマッチ
\★ ★(数値)番目の文字列(…)にマッチ
\o値 8進数の値にマッチ
\x値 16進数の値にマッチ
\. 「.」そのものの文字にマッチ
\- 「-」そのものの文字にマッチ
\\ 「\」そのものの文字にマッチ
\/ 「/」そのものの文字にマッチ
() グループ化(マッチデータはRegExp.$1~9で取り出せる)

まだまだあるが、最後に、リンクにhttpが含まれないパターンの正規表現を私なりに書いてみる。否定的先読みという正規表現を使用する。

<a href=”((?!http).*)” target=”_blank”>

仮想化について

仮想化とは

ソフトウェア(ここでいうソフトウェアは、オペレーティングシステム、Windows, Linuxなどを指す)をソフトを使用して、マシンの中に別のマシン(ここでいうマシンはハードウェアがあるかのようなという意味、仮想マシンと言う)が存在するかのように動作させる仕組みのことを指す。

仮想化の目的

  • 動かしたいソフトウェアがホストマシン上で動かないとき
  • 多重起動したいのに多重起動ができない場合
  • 動かしたいソフトウェアがホストマシンに適合するソフトウェアがない時
    ntp(chrony)など、Windows 10にはない機能の場合
  • 動かしたいソフトウェアがホストマシンに影響する場合
  • ウイルスなどが混入している可能性がある場合
  • ウェブサーバーなど一つしか起動できない場合(ネットワークのポート80番が競合する場合)
  • Visual Studioのように、システムを根本から変更し、アンインストールできないものをインストールしたい場合

仮想化の利点

  • 目的に使用するためのCPUリソース、メモリリソース、必要な環境を知る機能がある
  • 操作以前に戻す機能(スナップショット、差分ファイル)など
  • 他にも、クラスタ化など、いろいろな用途に応用されている。

仮想化の種類と特徴

  • ハイパーバイザ(完全仮想化)- Hyper-v(Microsoft) KVM(Linux) Xen あと、VMWara社も出しているが製品名は知らない
    ハードウェアによる仮想化なので、高速に作動する
  • 準仮想化 Virtual Box(Oracle) android studio(Google) VMware
    ハイパーバイザを利用しつつエミュレーションを行うので、動作が遅くなる
  • エミュレーター
    ソフトウェア的にエミュレーションをするので、動作が遅くなるがサポートできるソフトウェアが多くなる。動くソフトウェアが多くなる。