1

私は、本質的に大量のデータを含むレポートである多数のレコード(10,000、毎日増加)を持っています。単なる数値測定値であるこのデータはすべて、保存する必要があります。

問題は、これらの測定値が200を超えているため、クエリを実行する必要があることです。たとえば、「2012年1月から3月の間に作成されたレポートの場合、体重で並べ替えた各性別の平均身長はどれくらいですか?」任意の測定値を柔軟に照会できるようにするには、それぞれに独自の列が必要です。

現在、各フィールドをJSON配列に格納し、単純に1つの列に格納しています。これは、クエリツールが完了していない開発のこの部分では問題ありませんが、すぐにビルドする必要があります...理論的には、データベースからすべてのレコードを取得し、PHPを使用して並べ替えることができます(オブジェクトの場合)または配列)ですが、非常に多くの行を処理する場合、それは不必要に複雑で危険なようです。

パフォーマンスであろうとデータの整合性であろうと、数万行のMySQLの大きな(200以上の)列テーブルに問題はありますか?または、すべてをプルしてサーバー側の言語を使用して並べ替える代わりの方法はありますか?

私のデータに関するいくつかのランダムな情報:

  • 各レポートには200を超える測定値があります
  • 各測定値を照会できる必要があります
  • 測定値は主に整数または浮動小数点数ですが、いくつかの文字列があります
4

2 に答える 2

1

それらをすべて別々に保管してください。Mysqlには、テーブルごとに4096列、行ごとに65536バイトの制限があります。ほとんどの場合、数値データといくつかの文字列でそれを達成することはありません。

phpでデータ操作を行うべきではありません。それがsqlの優れた点です。200列と10,000行は、物事の壮大なスキームではかなり小さいです。テーブルに適切にインデックスを付けるだけで、そうでなくてもパフォーマンスは良好になるはずです。

于 2012-07-02T22:44:53.020 に答える
1

わかりました。あなたのダイアレンマがわかりました。データベースの専門家が(おそらく短命で)不在の場合、私はあなたに意見を述べます。

正気のためにあなたのデータを分割します。人に関する情報を保存しているとしましょう。1つのテーブルに200列は必要ありません。それらを分割し、多くのテーブルに複数の列を含める必要があります。例えば

tblGeneralCharacteristics:
 - colEyeColor
 - colHairColor
 - colHeight
 - colWeight

tblInterests:
 - colFaveColor
 - colFaveSport

tblRelationships
 - colMother
 - colFather
 - colBrother
 - colSister

この方法ははるかに優れています。計算上、それが重要だとは思えません。明らかに、クエリごとに返されるデータが少なくなるため、一部のレポート(すべてのデータを取得したり、すべてのデータをトロールしたりする必要がない場合)では、より高速になる可能性があります(ただし、データベースに適切にインデックスを付けると、問題にはなりません)。

次号へ。データベース内のレコード数のそれ。10,000が少し大きくなり始めたら、キャッシュを開始します。

さて、私に関する限り、データをキャッシュする正しい方法も間違った方法もありません。必要なのは必要なものです。たとえば、あなたの質問では、2012年1月から3月の間に入力されたレコードの平均体重の高さを取得することに言及しました。そうですね...その月に入力されたすべてのレコードの体重の平均高さを計算してこれを格納するcronスクリプトを作成できます。どこかの別のテーブルに。次に、レポートを作成するときに、1月、2月、3月の値を取得し、それらを平均化するだけで済みます...これははるかに簡単です。潜在的に数千行に対して計算クエリを実行する代わりに、数百行に対してcronクエリ(時間は関係ありません)を実行し、実際のレポートは3行のみをクエリします。

もう1つのトリックは、SQLで実行できる計算が多ければ多いほどよいということです。フィールド/レコードを平均化する場合、または何かを合計する場合は、SQLクエリで送信します。SQLサーバーは、ふるいにかけるために大量のデータを返すのではなく、計算を実行して結果を返します。これは必ずしも簡単で便利なわけではありませんが、SQLをより良く機能させることができれば増えるほどです。

お役に立てれば。私が言ったように、データベースの専門家はあなたにもっと洞察に満ちたアドバイスを与えることを望んでいると確信しています。:)

于 2012-07-02T22:51:31.450 に答える