Webアプリケーションを開発するとき、特定の設定または一時データを保存する必要があることがよくあります。 通常、これにはファイルまたはデータベースが使用されます。 これがデータベースである場合、ほとんどの場合にそうであるように、データベースに単一行のテーブルを格納することはあまり良い選択肢ではありません。 このため、特定の形式の構成ファイル(* .php、* .ini、* .xml、* .json)がより頻繁に使用されます。
JSONデータベース
この投稿では、jsonファイルをデータベースとして使用することについてお話したいと思います。 この形式の情報はJavascript配列とWebアプリケーションのクライアント側から簡単にアクセスできるオブジェクトであるため、json形式を使用すると便利です。
すべてのデータベースには、テーブルのデータの書き込み、読み取り、更新、削除のための一連の関数が含まれています。 この場合、データベースを管理するための一連のメソッドを持つクラスになります。
$jdb = new Jsondb($path);
- $ path-ルートからファイルが保存されるフォルダーへのパス。 デフォルトでは、$ path = $ _SERVER ["DOCUMENT_ROOT"]。 '/ Jdb /'。
データベース管理
以下に、一連のメソッドとその使用例を示します。
作成するテーブルを作成します。
$jdb->create($table, $keys);
- $ keys-テーブルキーとその特性の配列。 Auto_incrementとデフォルトがサポートされています。
例:
$keys = Array( 'id'=>Array('auto_increment'), 'title'=>Array('default'=>'habrahabr'), 'posts', 'userId' ); $jdb->create('habr', $keys);
選択してくださいテーブルからデータを取得します。
$jdb->select($select, $table, $rules);
- $ select-選択するキーを含む配列または文字列。
- $ table-データの取得元のテーブルの名前。
- $ rules-where、order、limitのパラメーターを含む配列。
例:
$rules = Array( 'where'=>Array( 'id'=>Array(1,2,3,4,6,7,10), 'name'=>'habr' ), 'order'=>Array('id','desc'), 'limit'=>5 ); $jdb->select('*','habr',$rules); $rules = Array( 'order'=>Array('rand()'), 'limit'=>Array(10,4) ); $select = Array('id','title','userId');
挿入テーブルにデータを挿入します。
$fdb->Insert($table, $data);
- $ dataは、テーブルに挿入する連想データ配列です。
例:
$data = Array('title'=>'new title', 'userId'=>6431); $jdb->insert('habr', $data);
更新するテーブル内のデータを更新します。
$jdb->update($table, $data, $where);
- $ tableはテーブルの名前です。
- $ dataは、更新するデータを含む連想配列です。
- $は、更新するレコードを選択するためのデータを含む連想配列です。
例:
$data = Array('title'=>'updated title'); $where = Array('title'=>'new title', 'userId'=>6431); $jdb->update('habr', $data, $where);
削除するテーブルからレコードを削除します。
$jdb->delete($table, $where);
- $ tableはテーブルの名前です。
- $は、削除するレコードを選択するための連想データ配列です。
例:
$where = Array('userId'=>6431); $jdb->delete('habr', $where);
落とすテーブルを削除します。
$jdb->drop($table);
例:
$jdb->drop('habr');
変更テーブルへのキーの追加と削除。
$jdb->alter($table, $todo, $keys);
- $ tableはテーブルの名前です。
- $ todo-実行されるアクション。 追加またはドロップされる場合があります。
- $ keys-キーを削除または追加する文字列または連想データ配列。
例:
$jdb->alter('habr', 'drop', 'title','userId'); $keys = Array( 'postTitle'=>Array( 'default'=>'habrapost' ) ); $jdb->alter('habr', 'add', $keys); $keys = Array('acc','userId');
切り捨てテーブルを完全にクリアします。
$jdb->truncate($table);
存在するテーブルの存在を確認します。
$jdb->exists($table);
リクエストのエラーの定義
上記のすべてのメソッドは、成功した場合はリクエストの結果を返し、失敗した場合はfalseを返します。 「
status 」メソッドを使用すると、以前のリクエストのステータスを確認できます。
$jdb->status($flag);
- $フラグ-デフォルトではfalse。 trueに設定されている場合、ステータスコードの代わりにエラーとともにテキストメッセージが返されます。
例:
$jdb->create('users',Array('id'=>Array('auto_increment'),'name')); $jdb->create('users',Array('id','name')); echo $jdb->status(); echo $jdb->status(true); $jdb->select('phone', 'users'); echo $jdb->status(); echo $jdb->status(true);
ステータスコードリスト:
- 0-すべて大丈夫。
- 101-テーブルは既に存在します。
- 102-テーブルが存在しません。
- 103-不明なプロパティ。
- 201-キーはすでに存在します。
- 202-キーが存在しません。
ヘルパーメソッド
Last_insert_idデータベースに追加されたレコードのIDを知る必要があることがよくあります。 これを行うには、last_insert_idメソッドを使用します。
$jdb->last_insert_id();
例:
$jdb->insert('users', Array('name'=>'username')); echo $jdb->last_insert_id();
存在するテーブルの存在を確認します。 trueまたはfalseを返します。
例:
$jdb->exist('user');
また、便宜上、SQL構文を使用してクエリを実行することもできます。 これには別のクラスが使用されます。
Jsonsql::request('select * from `users`', $path);
- $ path-ルートからファイルが保存されているフォルダーへのパス。 デフォルトでは、$ path = $ _SERVER ["DOCUMENT_ROOT"]。 '/ Jdb /'。
phpには同じ名前の関数とクラスを作成する機能があるため、次の構成を適用できます。
function Jsonsql($string, $path = false){ return Jsonsql::request($string, $path); }
例:
Jsonsql('create table `new` (id auto_increment, title default "untitled", text)'); Jsonsql('select `name`,`title` from `habr` where `id` in(1,34,5,9,4,100) order by rand()', '/jdb/test/');
追加のリクエスト
リクエストのステータスを確認します。
Jsonsql('status');
データベースに追加されたレコードのIDを確認します。
Jsonsql('last_insert_id');
テーブルが存在するかどうかを確認します。
Jsonsql('table exists `users`');
JsondbとMySqlの比較
もちろん、ここで比較するものはありません。データベースは、データを保存してすぐにアクセスするために作成されました。 しかし、まだ興味深い。
パフォーマンスと使用メモリ量を比較するために、挿入、更新、および選択メソッドに対して一連のテストが実行されました。
挿入データベース内の10行のレコードが10回実行されました。 以下は、スクリプトの実行時間と実行された操作の数のグラフです。
使用メモリ:
- Jsondb-525.67 Kb。
- MySQL-421.16 Kb。
Jsondbのパフォーマンスは、テーブル内のレコード数に大きく依存していることがわかります。
更新するデータベース内の100エントリの更新が行われました。
- Jsondb-0.03223秒、626.66 Kb
- MySQL-0.01991秒、470.84 Kb。
選択してくださいデータベースのすべてのレコードが選択されました。
- Jsondb-0.00313秒、626.66 Kb
- MySQL-0.00391秒、387.69 Kb。
そして、条件、順序、制限を持つデータベースからのデータの選択。
- Jsondb-0.02123秒、626.66 Kb
- MySQL-0.03991秒、387.69 Kb。
このことから、このようなストレージシステムのパフォーマンスは、特に更新メソッドと挿入メソッドを使用する場合、1つのテーブル内のレコード数に大きく依存することになります。 テーブルからのデータのフェッチは十分に高速です。 情報を保存するこの方法の使用は、さまざまなアプリケーション設定および一時データの保存に適しています。 前述のように、このフォームに保存された情報はすべてアプリケーションのクライアント側からアクセスできるため、これには大きなプラスもあります。 より詳細な場合は、たとえばjQueryメソッド
$ .getJSONを使用します。
ソースとサンプルをダウンロードできる
リンクを次に示します。