はじめに
AjaSQLは、JavaScriptからSQL文をAjax発行し、サーバー側のゲートウエイを経由して、データベース(MySQL,SQLite...)へ接続、結果セットもJavaScriptでAjax受信するツールです。
基本構成は、
Ajaxライブラリ(jslb_ajaxXXX.js)、
AjaSQLライブラリ(jslb_ajasqlXXX.js)とPHPによる
AjaSQLゲートウエイ(ajasql_gwXXX.php)および、
データベース(JavaScript側からSQLiteやMySQLを選択制御)です。
AjaSQLを使うことで、今まで、サーバー側がひとりで一手に引き受けていた、
SQLデータベース処理から結果セット受信後にかけての処理を、Ajax通信により、サーバーとクライアント側JavaScriptへ分散することが可能になります。
ちょっと大げさに言えば、これだけで、サーバー負荷が減り、待ち時間も激減し、しかも、HTML化する前のデータで渡せますから転送量も減らせます。
まぁ、なにはともあれ、サンプルを見てみましょう。
サンプル
郵便番号・住所 あいまい検索
このサンプルは、郵便番号などを検索条件とするSQL文をJavaScriptからキー入力する毎に送出し、全国12万件の郵便番号データから該当する住所の結果セットを、連続して絞り込みつつ、JavaScriptで受け取って加工し、ページ遷移なく表示しています。
【
→sample.htm】
(Webアクセス不可エリア)
│
├(.dbpasswd) //MySQLなどのパスワード等(SQLiteは不要)
│
(Webアクセス可エリア)
│
├test/
││
│└sample.htm //サンプル(0604)
│
└ajasql/
│
├ajasql_gw233.php //AjaSQLゲートウエイ(0604)
│
├zipdb //郵便番号SQLiteデータベースファイル(0604)
│
├jslb_ajax036.js //暫定Ajaxライブラリ(0604)
├jslb_ajasql027.js //暫定AjaSQLライブラリ(0604)
└ajasql_zip2addr001.js //郵便番号/住所検索 ライブラリ(0604)
*(0604)等はパーミッションですが、必要に応じて設定してください。
*太字は基本ファイル
AjaSQLのメリット
JavaScriptでSQL
なにしろ、JavaScriptでSQL文を発行してSQLデータベースを扱うことができます。
サーバー側にはゲートウエイPHPを置いておくだけで、ほとんどサーバーには触らずに、いろいろな操作が可能になります。
サーバー負荷を多少?軽減
AjaSQLで、クライアント側のJavaScriptからWebサーバーの後ろにある
データベースを簡易なゲートウエイなどで直結させれば、サーバー側の仕事は、
ほとんどデータ送出だけでもよくなります。
つまり、これまで、サーバーが一人で背負ってきた、たとえば、数万件分のHTML生成などの結果セット受信以降の処理は、
あっさりと、数万台のクライアント側へ渡してしまえます。
AjaSQLは、SQLデータベースが吐き出した、最もシンプルなデータのままで、直接クライアントへ渡しますので、
あとは、能力と暇をもてあましていた、無数のJavaScriptエンジンが処理してくれるでしょう。
転送データ量の軽減
AjaSQLでは、サーバーから、肥大化したHTMLやXMLではなく、生のデータのまま、または、それを圧縮したデータを送出します(*圧縮オプションは作成中)。
つまり、ネットワーク上を流れるAjaSQLのデータには、無駄に肥大化したHTMLタグなどが含まれません。
セキュリティ
本来サーバー側でするべきセキュリティ機能(OS/SQLインジェクション対策、各SQLエンコードなど)は、
ゲートウエイで自動的に行われます(ちょっと整理中)ので、アプリを作成するたびに何度も悩む必要がなくなります。各SQLの権限システム等はそのまま利用できます。( JavaScriptからは、ユーザー名やパスワードを送りません。)
データベースの標準国際規格SQL文を利用できる
リレーショナルデータベースといえばSQLです。AjaSQLのSQL文は、利用するMySQLやSQLiteの実装に準拠しますので、
標準的な作法で、データを扱うことができます。
データベースが初めての人も、ここで覚えたものを将来応用できます(^^)。
UIの軽快化
Ajaxによる非同期通信を利用しますので、ページ遷移が無い軽快なユーザーインターフェイスを構築可能です。また、サーバー側の負荷軽減とデータ量のシェイプアップもありますので、サーバー待ちの時間は、これまでの一般的なWeb上のDB処理より激減します。たぶん、、、。
柔軟性と機動性の拡大
JavaScriptでSQL文を発行し、結果セットを受け取れるということは、Webページ作成の柔軟性と機動性を拡大します。いままで、PHPやPerlやJavaなどに頼らざるを得なかった多くの処理を簡単に実装できるようになります。ちょっと、検索条件を変えたいとか、ユーザー入力にリアルタイムに対応するデータベース処理を行いたいという要求に簡単に応えることができます。
クライアント側はHTML+JavaScriptのみでOK
ブラウザネイティブの機能を利用しますので軽快です。プラグインやFlashなどのような起動時間を節約できますし、Macでもさくさく動きます。
クロスブラウザ化の難解な部分はライブラリに任せて楽ができる
JavaScriptを使う際の複雑なクロスブラウザ処理は、すべてライブラリに任せてしまいますので、実際に使う部分はシンプルです。
AjaSQLのデメリット
Ajax対応ブラウザしか動きません
Ajaxを利用しますので、対応するブラウザでしか動きません。現状、動作するブラウザは下記の通りです。
動作ブラウザ
| win |
mac |
linux |
| n7 | m1 | e6 | o7 | o8 |
n7 | m1 | e5 | s1 |
n7 | m1 | k3 |
| ○ | ○ | ○ | × | ○ |
○ | ○ | × | ○ |
○ | ○ | ○ |
* fireFoxは「m1」に含む
セキュリティが心配でドキドキする
セキュリティと責任について理解できる方専用です。危険そうだから使わない、という方には、お勧めはしません。セキュリティに関する部分も、恥ずかしながら、ソースは丸ごと公開しています。駄目な部分があれば直したいと思いますので、何か気づかれた方は、ぜひご指摘ください。
謝辞
Masanao Izumo氏
( jslb_ajasql027.js内で、MD5の変換ライブラリを
高度な JavaScript 技集から使わせていただいております )
古籏一浩氏
( いつもお世話になりっぱなしです
http://www.openspc2.org/ )
はぎさん氏
( MozのAjax実装日を確認するのに、
MDS - DOM version search! のお世話になりました。)
旧テストサイト AjaSQL test3
*2005.8現在、DBは、SQLiteとMySQLを使えますが、将来は使えるDBを増やしたいと思っています。