Agile – 増加型開発と反復型開発)

1月 1, 2003 · Posted in アジャイル開発 · Comment 

増加型開発と反復型開発

反復型開発(イテレーティブな開発:iterative development)

システム開発を、複数回のイテレーションに分割して行う。イテレーションを進めるごとに品質やパフォーマンスを改善していく。

増加型開発(インクリメンタルな開発:incremental development)

反復型開発同様、システム開発を、複数回のイテレーションに分割して行う。イテレーションを進めるごとに、全体のうちで選定された機能を実装する。

反復増加型開発(イテレーティブでインクリメンタルな開発:iterative and incremental development:IID)

反復型開発+増加型開発

Agile

1月 1, 2003 · Posted in アジャイル開発 · Comment 

メモ

リンク

初代googleのアーキテクチャ_検索処理の作成_単純検索

処理の流れ

[[Googleを支える技術:http://www.amazon.co.jp/dp/4774134325]]
1章 1.5 検索サーバー P34 図1.26 検索の流れより

1.利用者から検索リクエストが送られる
2.検索後がLexiconによってwordIDに変換される
3.wordIDを転置インデックス(Barrels)から検索し、docIDのリストを得る
4.得られたdocIDのすべてにランキング関数を適用し、点数の高い順に並び替える
5.ランキング上位のdocIDのそれぞれについて、WEBページの情報を取り出す
6.得られた情報を見やすい結果に整え、利用者に返す

テーブル構造は[[PHPとWEBサービスを使って初代googleのアーキテクチャを勉強する]]の図を参照

ひながた(search.php)

実行はブラウザからアクセスして検索キーを入力してサブミットボタンをクリック(またはEnterキー)
めんどくさいからサニタイズしない。
文字コードはeuc。
データベースアクセスはPDO。
ここではキーワードは一つだけに対応。
”PageRank”非対応

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="content-type" content="text/html; charset=euc-jp">
<title>phpgoogle</title>
</head>
<body>

<?php
$keyword = $_GET{"keyword"};

print<<<EOF
<form action="search.php">
<input type="text" name="keyword" value="{$keyword}"><input type="submit">
</form>
EOF;

if(empty($keyword)){
die();
}

function createPdo(){
return new PDO("mysql:host=localhost; dbname=google", "root", "");
}

// ここに処理

?>
</body>
</head>

単純。

検索後をwordIDに変換

// lexiconでwordidに変換
$wordId = array();
try{
$pdo = createPdo();

$stmt = $pdo->prepare("select id from lexicon where word = :word");
$stmt->bindValue(":word", $keyword);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);

$lexiconId = $result{"id"};

}catch(PDOException $e){
var_dump($e->getMessage());
die();
}
// 切断
$pdo = null;

print_r($lexiconId);

wordIDによるBarrelsテーブルの検索

docIDのリストを取得する。
// barrels →docindex

$docIdList = array();
try{
$pdo = createPdo();

$stmt = $pdo->prepare("select distinct doc_id from barrels where lexicon_id = :lexicon_id");
$stmt->bindValue(":lexicon_id", $lexiconId);
$stmt->execute();

while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
$docIdList[] = $row{"doc_id"};
}

}catch(PDOException $e){
var_dump($e->getMessage());
die();
}
// 切断
$pdo = null;

print_r($docIdList);

docIDをもとにDocIndexを検索

WEBページの詳細情報を取得する。

$docList = array();
$pdo = createPdo();
foreach($docIdList as $docId){
try{

$stmt = $pdo->prepare("select title from docindex where id = :doc_id");
$stmt->bindValue(":doc_id", $docId);
$stmt->execute();

while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
$docIndex = array();
$docIndex{"title"} = $row{"title"};
$docIndex{"url"} = $row{"url"};
$docList[] = $docIndex;
}

}catch(PDOException $e){
var_dump($e->getMessage());
die();
}
}
// 切断
$pdo = null;

print_r($docList);

結果表示

これはもう単純に。

if(empty($docList)){
die();
}

foreach($docList as $docIndex){
print<<<EOF
<hr>
{$docIndex{"title"}}
<br>
{$docIndex{"url"}}
EOF;
}
print "<hr>";

実行結果

ソースコード

-[[PHPとWEBサービスを使って初代googleのアーキテクチャを勉強する/ソースコード/検索処理の作成(単純検索)]]