Webアプリケーション開発の
基本的なポイント
株式会社びぎねっと
代表取締役社長
宮原 徹([email protected])
http://Begi.net/
今日のアジェンダ
• どうやってWebアプリケーションのための
データベースを選ぶか
– 機能
– 性能
• 文字コードを理解する
– WebアプリケーションとDBにおける文字コード
http://Begi.net/
「道具」としてのDBの選び方
どうやって使うのかを前提に
• 使うための情報が豊富であるか?
• 必要な機能が実装されているか?
• 自分で測定してみたベンチマークで性能が
出ているか?
• 適正価格であるか?
• サポートが提供されているか?
• オープンソースであるか?
http://Begi.net/
どうやってデータベースを使う?
目的指向・DOA(*)で考えよう(データの5
W1H)
• 誰が使うデータですか?
• 何のためのデータですか?
• どんなデータですか?
• どれぐらいのデータですか?
• どうやって使うデータですか? etc…etc…
これらの要素が絡み合ってデータの性質が決定する。
そしてその性質に合わせてデータベースを選ぶ。
*DOA:Datahttp://Begi.net/
Oriented Approach
例)Webによる会員システム
• ユーザーインターフェースは全てWeb
• 会員情報を中心に関連データが存在
– ER図はそれほど複雑ではない
• データの検索/入力/更新の頻度見積もり
–
–
–
–
検索が最も多いと仮定
ある程度の頻度で入力が発生
更新はあまり無い
削除はとりあえず問題にしない
http://Begi.net/
例)Web会員システムを分析
• Webアプリケーションにおける処理頻度は概ね以
下の通り
検索≧入力>更新>削除
• トランザクションが必要となる一貫性を維持した
更新処理が必要かどうかはアプリ次第
– そもそもWebアプリは仕組みとしてトランザクション処
理が難しく、不向き
– トランザクションの同時並行処理はリソースを消費し、
パフォーマンスを低下させるおそれがある
http://Begi.net/
Webシステムに適したDBとは?
• リソース(特にメモリ)を浪費しない
• データ量・回線速度相応のパフォーマンス
– どんなに高速なDBでも遅い回線ではオー
バースペックになることも
• 適切な開発環境・ミドルウェアが選択肢に
ある
– 商用ソフトウェアからのサポート
– スクリプト言語系(Perl,Ruby,PHP,Python…)
– ODBC,JDBCなど
http://Begi.net/
パフォーマンスについて
• きちんとしたスキーマ設計
– 正規化をきちんと行い、場合によっては非正規化
• 正しいインデックス
– インデックスは張ればいいというものではない
• 適切なSQL
– 条件文の書き方が速度を大きく左右することもある
• 最適な物理設計
– ディスク、速いですか?メモリ、積んでますか?
• ボトルネックの割り出し
– 遅いのはDBのせいとは限らない
http://Begi.net/
パフォーマンス比較
• Oracleは別格なので比較対象外
• 比較試験条件
– 新郵便番号データ×3(24MB・37万件)
– メモリ64MB(フリーメモリ3MB程度まで圧迫)
– 曖昧検索処理(インデックス無し)
• MySQL:PostgreSQL=1:6(所要時間)
• Vaccum実行直後で1:1.5程度まで短縮可能
– 全件更新処理
• PostgreSQLは更新を行う毎に速度低下(要
Vaccum)
http://Begi.net/
文字コードについて
http://Begi.net/
文字コードって何?
• 画面等に表示される漢字は、プログラム内
部ではバイト(ビット)で表現される
• 文字コードとは、この「内部コード」と「表示
される漢字」の「対応関係」のことである
– 文字コードの例:SJIS,EUC,Unicode,ASCII等
• 表示する漢字の文字コード(表)が内部
コードと異なっている場合、「文字化け」が
発生してしまう
http://Begi.net/
様々な所に存在する文字コード
Apache
PHP
クライアント
ブラウザ
PHPファイル
文字コードが存在する場所
•クライアントブラウザ
•Apache(HTTP出力)
•PHP(内部)
•PHPファイル
•データベース
データベース
http://Begi.net/
文字コードのセオリー
• 文字コードを統一する
– SJISならSJIS、EUCならEUCでファイルからDB
まで全てを同じ文字コードで作成する
– 文字コード変換機能は出来るだけ使わない
• 見えないところに気を使う
– HTMLのMETAタグ内のContent-Type charset
などでブラウザの動作が変わる
http://Begi.net/
文字化けした時は?
• 各所の文字コードを再確認
– UNIX系のソフトはデフォルトがEUCになって
いるため、文字コードの不整合を起こすことが
多々ある
– ブラウザの設定で言語、文字コードエンコード
の確認
– 最低、SJISとEUCの両方に対応し文字コード
変換を行うことの出来るエディタを使おう
http://Begi.net/
HTMLフォームの注意点
• ブラウザによって動作が異なるが、受け
取ったHTMLフォームの文字コードで入力
データを送信
• ブラウザの種類、バージョンによってはバ
グ(仕様?)で送出文字コードが固定され
てしまったりするので、古いバージョンのブ
ラウザなどを使っている場合には注意
• 携帯の場合には、絵文字に注意
http://Begi.net/
ダウンロード

文字コードの取り扱い方 等