2

私は経営管理の目的で使用されるオンライン(有料)サービスを構築しています。データベースは次のように構成されています。

連絡先や連絡先などが記載された連絡先テーブルがあります。次に、支払い、契約、および予定に関する情報を保持する他のテーブルがいくつかあります。また、今月に送金された金額、今月の予定の時間数などの統計。

私はMySQLを使用しています(ただし、必要に応じてMSSQLまたはその他のサービスを使用することもできます)。また、プログラミング言語の正式なトレーニングはまったく受けていません(まだ)。

このデータベースにアクセスするためのWPFアプリケーションを構築しています。また、ユーザーが自分のデータにアクセスし、新しい予定を計画し、外出先で支払いを登録できるように、アプリの構築を計画しています。私はログインシステムに行き、彼らがログインして私のサービスを使用する権利を確認します。

私の質問は、これをどのように構成するかについてです。私はSQLの専門家ではなく、SQLやその他のプログラミング言語の正式なトレーニングも受けていません。私が知っていることは、私のクライアント側アプリはほとんどアルファ段階から外れているということです。

これまでのところ、これを構成する2つの方法を考え出しました。

1.ユーザーは別のデータベースを取得します。

私の当初のアイデアは、各ユーザーに個別のデータベースを提供することでした。これにより、人々に統計を提供しやすくなります。また、複数の個別のサーバーにワークロードを分散するのも簡単になります。人々は、ログイン情報が保存されているマスター/メインサーバーにログインし、サーバー情報を取得して、プログラムで自分のデータベースに「リダイレクト」されます。これらのデータベースを広めることで、ユーザーに個別のバックアップを提供することも容易になります。

これの欠点は、私が管理しなければならないデータベースの膨大な量です。最終的には数十万人のユーザーになることを計画しています。システムが無限の数のユーザーに提供できるようにしたいとだけ言っておきましょう。

2.すべてが1つのデータベースに保存されます。

すべてを1つのデータベースに保存することも可能です。これにより、データベース構造がやや複雑になります(ただし、全体が非常に単純になります)。すべてのクエリに'ANDConsumer_ID ='" + MyID+"'を追加する必要があります。(もちろん可能です)そして、ユーザーごとの統計を処理するためにいくつかのテーブルを追加します。

すべてのユーザーに同じデータベース更新を提供する方が簡単です。メンテナンスが簡単になります。

これの欠点は、ワークロードを個別のサーバーに分散することが難しくなることです。個別のサーバーが相互にミラーリングできるようにするために何かを構築する必要があります。また、単にサーバーをXデータベースで埋め、次に新しいサーバー、塗りつぶし、新しいなどを実行するのではなく、ワークロードがサーバー間で自動的に分割されることを確認する必要があります。

私はSQLのトレーニングを受けた人を雇う余裕はありません。

私にとって今最も重要なことは、システムを簡単に保守しながら、安全で信頼できることです。私はアマチュア開発者で、来年大学に通っています。私は自分の時間の50%をデータベースの保守に費やしたくありません。

私はあなたが必要とするかもしれない詳細の大部分を手に入れたと思います、あなたがもう必要とするならば、それらを求めてください。よろしくお願いします:)

4

1 に答える 1

1

ソリューション2を使用してください。ワークロードを多くのサーバーに分散することの欠点は、「パーティション化」によって埋められます。開始点については、http://dev.mysql.com/doc/refman/5.1/en/partitioning-overviewを参照してください。 .html

パーティショニングを使用すると、たとえば、コンシューマーのIDを含むテーブルのすべての情報を1つのサーバーに配置し、他のすべての情報を2番目のサーバーに配置できます。またはあなたが望むものは何でも...

しかし、私はそれほど複雑なことから始めません:あなたは今それが必要ですか?それは(どちらの方法でも)そのような大きな追加のオーバーヘッドであなたに負担をかけます!また、NoSQLデータベースの世界を調べて、少ない労力で必要な数のサーバーに分散できるソリューションを探すこともできます。ほとんどの場合、SQLとそのACID機能が失われます。それらが必要な場合、NoSQLはオプションではありません。

于 2012-08-01T09:53:43.223 に答える