PHP / JSONデータベース

Webアプリケーションを開発するとき、特定の設定または一時データを保存する必要があることがよくあります。 通常、これにはファイルまたはデータベースが使用されます。 これがデータベースである場合、ほとんどの場合にそうであるように、データベースに単一行のテーブルを格納することはあまり良い選択肢ではありません。 このため、特定の形式の構成ファイル(* .php、* .ini、* .xml、* .json)がより頻繁に使用されます。

JSONデータベース


この投稿では、jsonファイルをデータベースとして使用することについてお話したいと思います。 この形式の情報はJavascript配列とWebアプリケーションのクライアント側から簡単にアクセスできるオブジェクトであるため、json形式を使用すると便利です。
すべてのデータベースには、テーブルのデータの書き込み、読み取り、更新、削除のための一連の関数が含まれています。 この場合、データベースを管理するための一連のメソッドを持つクラスになります。
$jdb = new Jsondb($path); 



データベース管理


以下に、一連のメソッドとその使用例を示します。

作成する
テーブルを作成します。
 $jdb->create($table, $keys); 


例:
 $keys = Array( 'id'=>Array('auto_increment'), 'title'=>Array('default'=>'habrahabr'), 'posts', 'userId' ); $jdb->create('habr', $keys); 

選択してください
テーブルからデータを取得します。
 $jdb->select($select, $table, $rules); 


例:
 $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'); #  ,  $select ='id,title, userId'; $jdb->select($select, 'habr', $rules); 

挿入
テーブルにデータを挿入します。
 $fdb->Insert($table, $data); 


例:
 $data = Array('title'=>'new title', 'userId'=>6431); $jdb->insert('habr', $data); 

更新する
テーブル内のデータを更新します。
 $jdb->update($table, $data, $where); 


例:
 $data = Array('title'=>'updated title'); $where = Array('title'=>'new title', 'userId'=>6431); $jdb->update('habr', $data, $where); 

削除する
テーブルからレコードを削除します。
 $jdb->delete($table, $where); 


例:
 $where = Array('userId'=>6431); $jdb->delete('habr', $where); 

落とす
テーブルを削除します。
 $jdb->drop($table); 


例:
 $jdb->drop('habr'); 

変更
テーブルへのキーの追加と削除。
 $jdb->alter($table, $todo, $keys); 


例:
 $jdb->alter('habr', 'drop', 'title','userId'); $keys = Array( 'postTitle'=>Array( 'default'=>'habrapost' ) ); $jdb->alter('habr', 'add', $keys); $keys = Array('acc','userId'); #  ,  $keys = 'acc, userId'; $jdb->alter('habr', 'add', $keys); 

切り捨て
テーブルを完全にクリアします。
 $jdb->truncate($table); 


存在する
テーブルの存在を確認します。
 $jdb->exists($table); 


リクエストのエラーの定義

上記のすべてのメソッドは、成功した場合はリクエストの結果を返し、失敗した場合はfalseを返します。 「 status 」メソッドを使用すると、以前のリクエストのステータスを確認できます。
 $jdb->status($flag); 


例:
 $jdb->create('users',Array('id'=>Array('auto_increment'),'name')); $jdb->create('users',Array('id','name')); echo $jdb->status(); echo $jdb->status(true); /* * 101 * Table already exists; */ $jdb->select('phone', 'users'); echo $jdb->status(); echo $jdb->status(true); /* * 202 * Try ro select an unexisting keys from table "users"; */ 

ステータスコードリスト:


ヘルパーメソッド


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); 



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'); #     Jsonsql('status code'); #    

データベースに追加されたレコードのIDを確認します。
 Jsonsql('last_insert_id'); 

テーブルが存在するかどうかを確認します。
 Jsonsql('table exists `users`'); 


JsondbとMySqlの比較


もちろん、ここで比較するものはありません。データベースは、データを保存してすぐにアクセスするために作成されました。 しかし、まだ興味深い。
パフォーマンスと使用メモリ量を比較するために、挿入、更新、および選択メソッドに対して一連のテストが実行されました。

挿入
データベース内の10行のレコードが10回実行されました。 以下は、スクリプトの実行時間と実行された操作の数のグラフです。
画像
使用メモリ:

Jsondbのパフォーマンスは、テーブル内のレコード数に大きく依存していることがわかります。

更新する
データベース内の100エントリの更新が行われました。


選択してください
データベースのすべてのレコードが選択されました。


そして、条件、順序、制限を持つデータベースからのデータの選択。

このことから、このようなストレージシステムのパフォーマンスは、特に更新メソッドと挿入メソッドを使用する場合、1つのテーブル内のレコード数に大きく依存することになります。 テーブルからのデータのフェッチは十分に高速です。 情報を保存するこの方法の使用は、さまざまなアプリケーション設定および一時データの保存に適しています。 前述のように、このフォームに保存された情報はすべてアプリケーションのクライアント側からアクセスできるため、これには大きなプラスもあります。 より詳細な場合は、たとえばjQueryメソッド$ .getJSONを使用します。

ソースとサンプルをダウンロードできるリンクを次に示します。

Source: https://habr.com/ru/post/J119719/


All Articles