2016-12-30 8 views
0

私は小さなアプリをコーディングしており、質問があります。私は、JSONまたはmysqlの行にデータを格納するのが自分のシナリオに最適かどうかを判断しています。JSONとMYSQLの行にデータを保存

ページヒットが多いアプリケーションをコーディングしています。そのため、JSONエンコードされた配列を列VSのmysql行に格納することを検討しています。 1つのクエリはVS 2を実行するのがより速くなります。

私は、JSONエンコードされた配列の一部を削除する必要がありますが、そのことは削除要求時に私はデータ全体を取得する必要があるということですJSONはオブジェクトをデコードして設定を解除し、再度行を更新します。 VS mysqlの行を削除します。

多分私がこれを扱いやすくする方法がありますか?

+1

JSONデータ型の組み込みサポートを備えたMySQL 5.7を使用している場合を除いて、このアプローチは避けてください。複数のクエリを行う必要はありません。子テーブルの複数の行をマスターテーブルに関連付けるには、 'JOIN'を使用します。 – Barmar

+0

@Bamar。最初に1つのテーブル行から製品情報を取得し、次にそのテーブルのすべてのトランザクションを別のテーブルから取得する必要があるため、1つのクエリを使用することはできません。トランザクションは多くの行になります。 – user3620142

+0

これはJOINを使用するためのものです。それは1つのクエリです – e4c5

答えて

0

これはおそらくあなたが提供していない詳細によって決まります。

にはがありますか? JSONオブジェクトをフェッチしてから変更してもう一度保存する場合、MongoDBはそのユースケースの方が速いようです。

つのクエリはVSを実行するために速くなります。2.

あなたはいくつかの行を返すために、複数のクエリを必要としません。クエリはより多くの行を返すかもしれませんが、結果をループしてJSONをシリアライズ/デシリアライズすることは、サイト上で行う必要がある他の作業と比較して無視できるコストです。これをあまり考えないでください。

経験則として、リレーショナルデータベースでは、パフォーマンスの問題が発生するまでデータを正規化してください。 MySQLを使用するように設定されている場合は、おそらく多くの行が必要です。データセットが増えるにつれて、クエリのパフォーマンスを向上させる最も簡単な方法は、インデックスを追加することです.JSON BLOBでインデックスを追加することはできません。

+0

私は本当にmysqlを使用する必要はありませんが、それは私が現時点で利用可能であることが好ましいです。しかし、クエリ1は1つのテーブル行から製品情報を取得する必要があるため、クエリ2は複数のトランザクションをすべて取得する必要があるため、複数のクエリを使用する必要があります。 – user3620142

+0

2つのクエリを使用する必要がある場合は、データ構造に何か問題があります。それがJOINのためのものです。 FOREIGN KEY制約に基づいてトランザクションテーブルをINNER JOINします。もちろん、データとしてJSONブロブを使用する場合は、JOINも実行できません。 – mlg

+0

答えは分かりますが、私の仕事はできません。 2つの別々の配列にデータが必要です。 1つは製品情報、もう1つはトランザクションです。結合するとデータが得られますが、2つの別々のデータ配列をループして構築するにはあまりにも多くの作業が必要になります。 – user3620142

関連する問題