0

Windows サーバーで JavaScript、MySQL、および PHP を使用して RIA を実行しています。

データベースに入れたい同じ構造のデータセットが 5,000 個あります。データには 5 つのテーブルで十分です。典型的なデータ セットの 300,000 以上のレコードを持つ 1 つのテーブルを除いて、すべてのテーブルは適度に小さくなります。

さらに、500 人のユーザーは、これらのデータ セットからコンパイルされた統計への読み取り専用アクセスを取得します。これらの統計は PHP によって提供されます (直接アクセスは許可されません)。さらに、データへのアクセスはさまざまです。1 つのデータ セットしか使用できないユーザーもいれば、一部、少数、またはすべてを使用できるユーザーもいます。

ユーザーに表示される結果は比較的小さいものです。ほとんどのリクエストは 100 行をはるかに下回り、最大のリクエストは約 700 行になります。すべてのリクエストは、Ajax を使用して PHP に接続する JavaScript RIA を介して行われます。PHP はデータに接続し、その処理を実行して応答として JSON を出力し、JavaScript はそれに応じて表示します。

これをどのように構成するかを考えると、次の 3 つのオプションが提示されます。

  1. データ セットを同じテーブルに配置します。これにより、最大のテーブルで 1,500,000,000 レコードを簡単に取得できます。

  2. データ セットごとに個別のテーブルを使用します。これにより、最大テーブル サイズが制限されますが、25,000 テーブルになる可能性があります。

  3. データベースを忘れて、独自のフォーマットに固執します。

私はいくつかの理由で#2に傾いています。

  1. 非常に大きなテーブルを使用する際の問題が心配です (例: クエリの速度、実装の制限など)。

  2. 別のテーブルの方が安全に見えます。エラーや構造変更の影響を制限します。

  3. 別のテーブルを使用すると、独自の行レベル セキュリティを実装するのではなく、MySQL のテーブル レベル セキュリティを使用できます。これは、作業が減り、保護が強化されることを意味します。たとえば、クエリが行レベルのセキュリティなしで誤って送信された場合、ユーザーは不正なデータを取得できます。テーブル レベルのセキュリティではそうではありません。データベースが勝手にクエリを拒否するからです。

それは私の考えですが、あなたの考えが欲しいです。これは正しい選択だと思いますか?そうでない場合、なぜですか?私が見逃した考慮事項は何ですか?スケーラビリティが問題になる場合、他のプラットフォームを検討する必要がありますか?

4

1 に答える 1

1

1) 非常に大きなテーブルを使用する際の問題が気になります (例: クエリの速度、実装の制限など)。

DBMS が必要かどうか...

  • 1 つのテーブルの大きなインデックスを検索し、
  • または、正しいテーブルを検索してから、そのテーブルの小さい方のインデックスを検索します

...おそらく、パフォーマンスに関して大きな違いはありません。どちらかといえば、2 番目のケースには文書化されていないコンポーネント (適切なテーブルを見つけるパフォーマンス) があるため、完全に信頼するのは気が進まないでしょう。

データを物理的に分割したい場合、MySQLはバージョン 5.1 からそれを直接サポートしているため、別のテーブルを介してエミュレートする必要はありません。

2) 別のテーブルの方が安全に見えます。エラーや構造変更の影響を制限します。

そのためのバックアップです。

3) 個別のテーブルにより、独自の行レベル セキュリティを実装するのではなく、MySQL のテーブル レベル セキュリティを使用できます。

その通りですが、ビューやストアド プロシージャを使用して同様の効果を得ることができます。

全体として、これらのデータセットが構造的に十分に異なり、個別のテーブルを保証することが事前にわかっていない限り、私の本能は単一のテーブルを使用することです。ところで、十分に最適化されたデータベースと比較して、独自のフォーマットでより良い結果が得られるとは思えません。

于 2012-11-15T19:46:31.370 に答える