4

私は比較的小さなデータベースに取り組んでいます。合計 67 個のテーブルがあり、100 万を少し超えるレコードがあります。約254MBです。連携するアプリケーションは約 5 年間稼働しており、使用量は毎年 2 倍になっています。今年は 3 倍になると予測されていますが、これは 1 シーズンでデータベースのサイズがほぼ 2 倍になることを意味します。私の質問は、データベースを複数のデータベースに分割するのは悪い考えですか? 300 のクライアントがあるとすると、67 のテーブルを含む 300 の個別のデータベースが作成されますが、そのクライアントに関連するデータのみが含まれます。別のサーバーで実行できる内部統計以外に、データをまとめる理由はあまりありません。生涯でクライアント数が 10,000 を超えることはありません。

「マスターデータベース」スキーマに変更を加える必要がある場合、すべての「スレーブデータベース」全体で変更を複製する必要がある場合、このセットアップがどのような問題であるかがわかります

また、新しいクライアントが追加された場合、レプリケーションも困難になります。

コード レベルのアプリケーションは、このタイプのセットアップ用にほとんどセットアップされています。

不足しているものはありますか?これはひどい考えですか?

このデータベースは、将来のことを考えずに (私ではなく) 急いで作成したものであり、今は私の責任です。

正規化、フィールド タイプの監査、SQL の最適化、インデックス作成、サーバーのチューニングなど、やるべきことはたくさんあります。どんなフィードバックでも大歓迎です。

4

5 に答える 5

4

「正規化、フィールド タイプの監査、SQL の最適化、インデックス作成、およびサーバーのチューニング」で手一杯です。

それを 300 のデータベースに分割する正当な理由はありません。そして、あなたが明確にした多くの正当な理由があります。CustomerId がデータベースを通じて顧客データを明確に分離している限り、問題はありません。

ですから、あなたがしなければならないことに取り組み、完全に不必要な仕事を自分に与えないでください。

データベースのサイズと速度が遅いために必要な場合は、実際の SQL プラットフォームに移行してください。

于 2011-02-03T08:05:19.163 に答える
1

現在、4 分の 1 ギガのデータがあります。今年は 2 倍 (ギグの半分) になると予想しています。1997年ですか?いいえ、今は 2010 年のことで、人々は自分の携帯電話に何ギガバイトものデータを持っています。

問題は、どのような問題を解決しようとしているのかということです。それは些細な量のデータであるため、ストレージにすることはできません。それがパフォーマンスである場合、データベースごとにサーバーを想定していない限り、複数のデータベースに分割すると事態が悪化する可能性が高いと思います。セキュリティの観点からデータベースを分離するという議論がありますが、これらの問題に対処する方法はいくつかあります。

現在の環境に問題はありませんか?または、少なくとも 12 か月以内に問題が発生する可能性があることを示唆する傾向はありますか? いいえの場合は、じっと座ってください。はいの場合は、それらを明確に定式化してから、300 のデータベースがこれらの問題をどのように解決するか、そしてそれらが避けられない悲しみに値するかどうかを判断してください。次に、その悲しみを再調整して 10000 人のユーザーを説明し、もう一度質問します。

最良の答えが「1 万のデータベース」である質問がいくつかあるかもしれませんが、それほど多くはありません。


「私たちの最大のクライアントは、年間約 12000 件のレコードを追加しています。」

つまり、約 10 作業分ごとに 1 つのレコード (1 日 8 時間と仮定)。これは大きな書き込み負荷ではないようです。

「アイデアは、クライアントがすべてのデータを調べるのではなく、データにアクセスするだけです.」

しかし、それは大量のデータではなく、適切なインデックス作成戦略で修正できないものではないことは確かです。

あなたが今実際に問題を抱えているのか、それとも将来問題になるかもしれないことを考えているだけなのか、私にはまだわかりません。

于 2010-08-18T14:49:42.157 に答える
0

現在のスキーマを変更して複数のクライアントを許可します。途中で n 番目のクライアントに到達したときにパフォーマンスが低下する場合 (および SELECT の最適化が役に立たない場合)、新しいサーバーを追加できます。私たちの場合、データを「サイト」ごとに分割して、1 人のユーザーが自分のサイトにないデータにアクセスできないようにします。

于 2011-02-02T01:34:47.670 に答える
0

私が持っている質問は、データベースにどのようにアクセスするのですか? クライアントごとに 1 つのアプリケーションがインストールされますか? もしそうなら、データベースを別々にしておくと、アプリケーションをアップグレードするときにいくらかの時間を稼ぐことができます (アプリケーションを更新するときにデータベースを更新するだけでよいため)。それらが 1 つのアプリケーション インストールによってアクセスされる場合は、まとめて保管してください。

しかし、他にも考慮すべき点があります。現在のサイズは 100 万行 @ 256 MB だとおっしゃいました。これは、コモディティ サーバーの手の届くところにあるはずです。したがって、最悪の場合でも毎年 5 倍の増加が予想される場合、今年は 500 万行、来年は 25 行、3 年目は 125 行、4 年目は 625 行、5 年目は 31 億 2,500 万行になります。30 億行 (正確な使用法とクエリの種類によって異なります) でさえ、MySQL で処理するのはそれほど難しくありません (それでも汎用サーバーの上限範囲内です)...

さらに、問題が発生し始めた場合は、いつでもキーで各テーブル (または主要なテーブルのみ) をパーティション分割clientできます... MySQL によって自動的に管理されるため、自分で管理するというメンテナンスの悪夢はありません.. .

于 2010-08-18T14:47:38.620 に答える
0

SAP ERP を見てみましょう。数千のクライアントと数十億のレコードを保持できる可能性があります。リリーパワーシステムです。その中のすべてのテーブル (システム テーブルを除く) には、クライアントを指定する「MANDT」フィールドがあります。オフコースの SAP は一般的に ORACLE と連携しますが、データの一部が少ないため、この場合は十分ではありません。
したがって、SAP の成功の歴史と MySQL が優れた DBMS であるという親切な意見によると、クライアント間で DB をすり抜けるべきではないと結論付けることができます。これではあまり稼げない

于 2011-02-03T08:22:10.233 に答える