Webアプリケーション開発の 基本的なポイント 株式会社びぎねっと 代表取締役社長 宮原 徹(tmiyahar@Begi.net) http://Begi.net/
今日のアジェンダ どうやってWebアプリケーションのためのデータベースを選ぶか 文字コードを理解する 機能 性能 WebアプリケーションとDBにおける文字コード http://Begi.net/
「道具」としてのDBの選び方 どうやって使うのかを前提に 使うための情報が豊富であるか? 必要な機能が実装されているか? 自分で測定してみたベンチマークで性能が出ているか? 適正価格であるか? サポートが提供されているか? オープンソースであるか? http://Begi.net/
これらの要素が絡み合ってデータの性質が決定する。そしてその性質に合わせてデータベースを選ぶ。 どうやってデータベースを使う? 目的指向・DOA(*)で考えよう(データの5W1H) 誰が使うデータですか? 何のためのデータですか? どんなデータですか? どれぐらいのデータですか? どうやって使うデータですか? etc…etc… これらの要素が絡み合ってデータの性質が決定する。そしてその性質に合わせてデータベースを選ぶ。 *DOA:Data Oriented Approach http://Begi.net/
例)Webによる会員システム ユーザーインターフェースは全てWeb 会員情報を中心に関連データが存在 データの検索/入力/更新の頻度見積もり ER図はそれほど複雑ではない データの検索/入力/更新の頻度見積もり 検索が最も多いと仮定 ある程度の頻度で入力が発生 更新はあまり無い 削除はとりあえず問題にしない http://Begi.net/
例)Web会員システムを分析 検索≧入力>更新>削除 Webアプリケーションにおける処理頻度は概ね以下の通り トランザクションが必要となる一貫性を維持した更新処理が必要かどうかはアプリ次第 そもそもWebアプリは仕組みとしてトランザクション処理が難しく、不向き トランザクションの同時並行処理はリソースを消費し、パフォーマンスを低下させるおそれがある http://Begi.net/
Webシステムに適したDBとは? リソース(特にメモリ)を浪費しない データ量・回線速度相応のパフォーマンス 適切な開発環境・ミドルウェアが選択肢にある 商用ソフトウェアからのサポート スクリプト言語系(Perl,Ruby,PHP,Python…) ODBC,JDBCなど http://Begi.net/
パフォーマンスについて きちんとしたスキーマ設計 正しいインデックス 適切なSQL 最適な物理設計 ボトルネックの割り出し 正規化をきちんと行い、場合によっては非正規化 正しいインデックス インデックスは張ればいいというものではない 適切な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ファイル クライアントブラウザ データベース データベース 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/