web-dev-qa-db-ja.com

JSON形式でデータを保存するのは悪いですか、それともmySQLを使用する必要がありますか?

私はアプリケーションを構築してきましたが、すべてはシンプルなデータストレージシステムを中心に構築されています。

  • 配列を作成します。
  • JSONに変換します。
  • アクセスを防ぐために、最初に<?php die()を追加します。
  • PHPファイルに保存し、ディスクに保存します。

その後。

  • ファイルを開きます。
  • <?php die();を削除します。
  • JSONからデコードします。
  • 配列の編集/読み取り。
  • 編集した場合は、ファイルに保存してください。

これはデータを保存する安全な方法ですか?私がこれを作ったとき、私はMySQLを知りませんでした、そしてそれでもそれをよく知りませんでした。ただし、小規模なプラットフォームを編集してMySQLに変更するか、現在のシステムを引き続き使用するかを選択したいと思います。

同時に編集されているファイルで問題が発生したことはありません。また、現時点ではウェブサイトの速度が低下しているようには見えません。

中規模のアプリケーションを今すぐ変更する価値はありますか。また、数週間かけてアプリケーションを変更する必要がないので、成長しています。または、現在のシステムは使用し続けるのに十分安全です。

これは、システムが現在機能しているものです。

設定データ:

function setDat($dat_file, $sec, $subsec, $val) {
    global $INS_DIR;
    $dat_file_dat = json_decode(str_replace("<?php die(); ", "", file_get_contents($_SERVER['DOCUMENT_ROOT'] . $INS_DIR . 'data/dat-'.$dat_file.'.php')), true);
    $dat_file_dat[$sec][$subsec] = [$val];
    file_put_contents($_SERVER['DOCUMENT_ROOT'] . $INS_DIR . 'data/dat-'.$dat_file.'.php', "<?php die(); ".json_encode($dat_file_dat));
}

データの取得:

function getDat($dat_file, $sec, $subsec) {
    global $INS_DIR;
    $dat_file_dat = json_decode(str_replace("<?php die(); ", "", file_get_contents($_SERVER['DOCUMENT_ROOT'] . $INS_DIR . 'data/dat-'.$dat_file.'.php')), true);
    return $dat_file_dat[$sec][$subsec][0];
}

等々。

これを説明すると:

  • $dat_fileは、データが格納されるファイル、/data/内のファイルです
  • $secは、編集する配列の最上位です$array[$sec];
  • $subsecは第2レベルの配列$array[$sec][$subsec];です。

これは、各アプリケーションが$secをデータのカテゴリとして使用でき、$subsecとそのカテゴリ内の検索を使用できるためです。独自のファイルを持つこともできます。したがって、ファイルmain-settingsには、theme-settingsと呼ばれるカテゴリがあり、次にデフォルトに設定されているactive-themeのようないくつかの情報があります。

つまり、これは現在のシステムを維持する価値があり、将来的には対応できるのでしょうか。その弱点は何ですか、それに関する問題があります。

[〜#〜]または[〜#〜]

プログラムのデータ側全体を再プログラムする必要がある場合でも、すべてをMySQLに変更する必要がありますか?これの欠点と欠点は何ですか?

2
Austin Collins

ファイルアプローチを使用し、ほとんど静的データと構成データを使用する場合は、 SQLitePHPエントリ )を使用します。これは、MySQLと同様にRDBMSですが、ローカルです。選択したディレクトリの1つのファイル(アプリケーションのフォルダーに含めることもできます)、インストール不要、軽量で、一貫性とその背後にある多くのテスト済みのハードワークでデータ要件を達成できます。新しい種類のデータ管理について心配する。 SQLiteによるデータ移行には、基本的に.sqliteファイルの移動/コピーが含まれます。

少し大きい場合は、MySQLまたはPostgreSQLを使用してください。

4
AlfredBaudisch

MongoDB のようなJSONベースのnoSQLデータベースの使用を検討しましたか?それはおそらくあなたのニーズに合うかもしれません。

そして明らかに PostgreSQLMariaDB (またはMySQL)または Sqlite のようなSQLリレーショナルデータベースにJSONテキストを置くことができます。

永続的 状態を一部として保存PHPファイルは壊れやすく、エラーが発生しやすい( コードインジェクション に注意))、おそらくあまり効率的ではありません。 PHP(eg [〜#〜] hop [〜#〜]OpaOcsigen 、...)は、PHPよりも永続性(およびブラウザとサーバーの計算の混合)をはるかにうまく処理しています。