2012-02-15 20 views
18

私のアプリの一部には、曲のボリュームオートメーションが含まれています。MySQLデータベースに配列を保存する最も良い方法は?

ボリューム・オートメーションは、以下の形式で記述されている:

[[0,50],[20,62],[48,92]] 

私はこの配列曲位置と音量を含む第2の値を含む第一の値を有する「データポイント」の各項目を検討します0〜100のスケールで表示されます。

は、私は、これらの値を取ると、オーディオファイルが再生されているように滑らかボリュームの移行を可能ベジエ曲線を作成するために「仮想」のデータポイントを使用してこのデータを補間する機能をクライアント側を実行します。

しかし、必要性は、ユーザーが後日リコールのためのデータベースにこの自動化を保存できるように生じています。 (実際には本当に周りの40~50ほとんどが10未満であることとを超えてはなりませんが)

データポイントはまた、私は、データをどのように扱うか

無制限することができますか?テキストフィールドにそのまま保存する必要がありますか?または、最適な結果を得るために何らかの方法で事前に処理する必要がありますか?

どのようなデータ型の配列を格納するためのMySQLで使用するのがベストでしょうか?

+0

何?それは文字列、配列、オブジェクトですか?私は "テキストフィールドのままで"そのまま集めていますが、内部で文字列として表現していることを意味していますが、間違っていると読んでいるかもしれません。 –

+0

INTのタイプで複数のフィールドを作成するだけではどうですか?たとえば、volume_min、volume_max、song_position –

+1

配列内の値を検索するクエリを実行する必要がない場合は、単純に 'text'フィールドを使用して配列のシリアル化バージョンを保存することができます(ここに投稿した方法は、 '[[0,50]、[20,62]、[48,92]])。 –

答えて

32

明らかにtextフィールドではなく、おそらくvarcharフィールドです。結果を解析し、個々の列に格納することをお勧めしません。データベースのセンスなどでそのデータを活用したい場合を除きます。

「ユーザーが使用する平均ボリュームは何ですか? ? "それを解析しても構いません。

このデータを保存する方法を理解するには、「後でどのように使用しますか?配列を取得し、それをPHPで利用する必要がある場合は、serialize関数を使用できます。あなたはJavaScriptで値を使用する場合は、次にJSONエンコーディングは、おそらくあなたのための最高のだろう(プラス多くの言語は、それをデコードする方法を知っている)

幸運!

+1

パーフェクトな答えミハイルはありがとうございます。それは問題のすべての点を網羅しています。 – gordyr

+1

@Mikhail +1大丈夫ですが、なぜ、_Definitely 'text'フィールド_ではありませんか? –

+1

'text'は物語や詩のような実際のテキストを保存するように設計されています。文字列を格納するようには設計されていません。 MySQLのテキストストアでは、「ツリーの葉」ではなくファイルに格納されます。検索、索引付け、キャッシュのすべてが遅くなります。 – Mikhail

2

その後、新しいテーブルを作成し、あなたの配列のインデックスを保持することは、専用にする行を取得するときの速度が最も重要である場合。整数のデータ型を使用し、各行が配列のインデックスを表すようにします。これらを一緒にバインドする別の数値列を作成して、SQLクエリで配列を再アセンブルする必要があります。

このようにすると、MySQLを使用してアクセスを高速化するのに役立ちます。配列の特定の部分だけが必要な場合は、SQLクエリの範囲を変更するだけで、必要に応じて配列を再構成できます。

2

JSONデータ型をお勧めします。こうすることで、配列をテキストやvarcharよりも効率的に格納できます。また、データ全体に構文解析を行うことなく、直接MySQLにデータをアクセスすることができます。

は、このリンクを見てみましょう:あなたはアプリ内でで作業しているデータ型であるhttps://dev.mysql.com/doc/refman/5.7/en/json.html

関連する問題