1
/
5

研修4-1 -ウェブサーバの構築 php-

今回からウェブサーバの構築に入ります。

php, ruby, python, javaでウェブサーバを構築したのち、JMeterを用いて負荷試験を行います。

まずは、phpでウェブサーバを構築しました。

既に研修1の内容でphpは表示できる状態になっていましたのでそのまま進めていきます。

今回の内容は、

1.MySQLにデータベースをつくる。

2.id1, id2, letterの3つのカラムをつくる(id1のみインデックスあり)。

3.テストデータを100万レコード入れる。

4.パラメータを付けてアクセスしたときに、id1あるいはid2の値に応じてletterの値を表示する。

5.JMeterを使って負荷試験を行う。

少しわかりにくいので例を挙げると、

データベースに(id1 = 1, id2 = 1, letter = a)というデータを入れたとします。

このとき、http://192.168.0.160/test.php?id=1でアクセスしたときに、

ブラウザにletterの値。すなわち"a"と表示するということです。

実際に記述した内容は以下になります。

test.php

<?php
//connect
$conn = mysqli_connect('localhost', 'ユーザ名', 'パスワード', 'データベース名');
// mysql query
$sql = "";
$sql .= "select";
$sql .= " letter";
$sql .= " from テーブル名";
if(isset($_GET['id1'])) {
$id1 = $_GET['id1'];
}
if(isset($_GET['id2'])) {
$id2 = $_GET['id2'];
}
if ($id1 == null){
if ($id2 == null){
System.out.print("NG302");
}else if ($id2 > 1000000 || $id2 < 1){
System.out.print("NG303");
}else {
//connect database. pick letter up!
$sql .= " where id2 = $id2";
$result = mysqli_query($conn, $sql);
while($row = mysqli_fetch_assoc($result)){
$letter = $row["letter"];
}
//出力
System.out.print("OK id2 $id2 $letter");
}
}else if ($id2 != null){
System.out.print("NG301");
}else if ($id1 > 1000000 || $id1 < 1){
System.out.print("NG303");
}else {
//connect database. pick letter up!
$sql .= " where id1 = $id1";
$result = mysqli_query($conn, $sql);
while($row = mysqli_fetch_assoc($result)){
$letter = $row["letter"];
}
//出力
System.out.print("OK id1 $id1 $letter");
}
//結果セットを解放
$result->free();
// データベース切断
mysqli_close($conn);
?>

まず初めに、データベースに接続するための情報を書いています。

そして、送られてきたパラメータに応じて条件分岐を行っています。

id1, id2が同時に指定されたときはNG301、

id1, id2がどちらも指定されなかったときはNG302、

id1, id2の値が1~1,000,000じゃなかったときはNG303、

それ以外の場合はid1, id2に応じたletterの値をデータベースから検索して表示しています。

ちなみに、100万件のテストデータは

(1, 1, "a-zからランダム")

(2, 2, "a-zからランダム")

・・・

(1000000, 1000000, "a-zからランダム")

となっています。

今回はPHPスクリプトで、データの生成とデータベースへの挿入を行いました。

コードは以下の通りです。

makedata.php

<?php
//random letter
$str = array_merge(range('a', 'z'));
//connect mysql
$conn = mysqli_connect('localhost', 'ユーザ名', 'パスワード');
//select database
mysqli_select_db($conn, 'データベース名');
for($i = 1; $i < 1000001; $i++ ){
$r_str = $str[rand(0, count($str) - 1)];
$sql = "";
$sql .= "insert";
$sql .= " into テーブル名";
$sql .= "(id1, id2, letter)";
$sql .= " values";
$sql .= "($i, $i, '$r_str')";
mysqli_query($conn, $sql);
print($sql);
}
?>

まずa-zの文字列を生成しています。後ほどここからランダムに1文字抽出し、letterとします。

次に、データベースに接続する情報を記述します。

そして1-1,000,000までの数字に対してデータを生成し、都度データベースへ挿入しています。

合計で2時間半ほどかかりました。

終わってから、先にテストデータを生成しておいて一気にデータベースに挿入した方が早かったかなと思いました。

次回はその方法を用いてデータを挿入しています。

負荷試験の結果は最後にまとめて紹介します。

php編は以上です。次回はruby編です。

株式会社アクシス's job postings
2 Likes
2 Likes

Weekly ranking

Show other rankings
Like Ryota Yamada's Story
Let Ryota Yamada's company know you're interested in their content