sql >> データベース >  >> RDS >> Sqlserver

複数のデータベースと論理的に分割されたデータを含む単一のデータベース

    別々のデータベースを使用していたらよかったのに:

    • データベース自体へのアクセス許可をクライアントまたはスーパーユーザーに付与したい場合。
    • 他のクライアントのデータに影響を与えずに、1 つのクライアントのデータベースだけを復元したい場合。
    • データとデータ侵害を管理する規制上の懸念があり、遅ればせながら、別個のデータベースを用意することによってのみこれらの規制を満たすことができることに気付いた場合。 (更新:この回答を書いてから 4 年強で、GDPR が発効しました)
    • 顧客データを複数のデータベース サーバーに簡単に移動したり、スケール アウトしたり、大規模な顧客や重要な顧客を別のハードウェアに移動したりしたい場合。世界の別の場所で。
    • 古い顧客データを簡単にアーカイブして廃棄したい場合。
    • データがサイロ化されていることに顧客が関心を持っていて、あなたが別のやり方をしていたことに気がついた場合。
    • データが召喚され、1 人の顧客のデータだけを抽出するのが難しい場合、または召喚状が広すぎて、1 つのクライアントのデータだけではなく、データベース全体を作成する必要がある場合。
    • 警戒を怠り、AND CustomerID = @CustomerID を含まないクエリが 1 つだけすり抜けた場合 .ヒント:スクリプト化された権限ツールまたはスキーマを使用するか、すべてのテーブルを WHERE CustomerID = SomeUserReturningFunction() を含むビューでラップします 、またはこれらの組み合わせ
    • アプリケーション レベルで間違った権限を取得し、顧客データが間違った顧客に公開された場合。
    • さまざまなクライアントにさまざまなレベルのバックアップおよび復元保護を適用したい場合。
    • 新しいデータベースを作成、プロビジョニング、構成、デプロイ、およびその他の方法でスピンアップ/ダウンするためのインフラストラクチャを構築することは、投資に値するものであることに気付いたら、それを習得する必要があるためです。
    • あるクラスの人々が複数の顧客のデータにアクセスする必要がある可能性を考慮せず、Customer の上に抽象化のレイヤーが必要な場合 なぜなら WHERE CustomerID = @CustomerID 今はやめません。
    • ハッカーがあなたのサイトやシステムを標的にし、1 で管理者の資格情報を取得した後、すべての顧客のすべてのデータを一気に簡単に取得できるようにした場合。 データベース。
    • データベースのバックアップの実行に 5 時間かかり、その後失敗した場合
    • DBMS の Enterprise エディションを取得して圧縮バックアップを作成し、ネットワーク経由でのバックアップ ファイルのコピーに 5 時間もかからない場合詳細 .
    • データベース全体をテスト サーバーに毎日 5 時間かけて復元し、完了するまでに 2 時間かかる検証スクリプトを実行する必要がある場合。
    • 少数の顧客のみがレプリケーションを必要としており、それらの少数の顧客だけでなく、すべての顧客に適用する必要がある場合
    • 政府機関の顧客に対応したいときに、別のサーバーとデータベースを使用する必要があることを知りましたが、エコシステムは単一のサーバーとデータベースを中心に構築されており、変更が難しすぎるか、変更に時間がかかりすぎます。 .

    別々のデータベースを使用してよかった:

    • 1 人の顧客へのパイロット ロールアウトが完全に爆発し、他の 999 人の顧客がまったく影響を受けない場合。また、バックアップから復元して問題を解決できます。
    • データベースのバックアップの 1 つが失敗した場合、10 時間のプロセス全体を最初からやり直すのではなく、25 分でそのバックアップだけを修正できます。

    単一のデータベースを使用していたらよかったのに:

    • 1,000 のクライアントすべてに影響するバグを発見し、1,000 のデータベースに修正を展開するのが難しい場合。
    • データベース レベルで間違った権限を取得し、顧客データが間違った顧客に公開された場合。
    • 一部のクラスの人々がすべてのデータベースのサブセットへのアクセスを必要とする可能性を考慮しなかった場合 (おそらく 2 つの顧客が合併した場合)。
    • 2 つの異なるデータベースのデータをマージするのがどれほど難しいか考えていなかったとき。
    • データの 2 つの異なるデータベースをマージした後、一方が間違っていたことに気付き、このシナリオからの復旧を計画していなかった場合
    • 1 台のサーバーで 32,767 の顧客/データベースを超えて拡大しようとしたときに、これが SQL Server 2012 の最大値であることが判明した場合。
    • 1,000 以上のデータベースを管理することは想像以上に大きな悪夢であることに気付いたとき。
    • テーブルにデータを追加するだけでは新規顧客を獲得できないことがわかり、新しいデータベースの作成、入力、および権限の設定を行うために、恐ろしく複雑なスクリプトを大量に実行する必要がある場合。
    • 毎日 1,000 件のデータベース バックアップを実行する必要がある場合、それらがすべて成功することを確認し、それらをネットワーク経由でコピーし、すべてをテスト データベースに復元し、それぞれのデータベースで検証スクリプトを実行し、失敗を次のように報告します。表示されることが保証され、簡単かつ迅速に実行できます。そして、これらのうち 150 個がさまざまな場所で失敗し、一度に 1 つずつ修正する必要があります。
    • 1,000 データベースのレプリケーションをセットアップする必要があることがわかったとき。

    より多くの理由をリストしたからといって、それが優れているとは限りません.

    一部の読者は MSDN:Multi から価値を得るかもしれません-テナント データ アーキテクチャ .または、おそらく SaaS テナンシー アプリの設計パターン .または マルチテナントの開発クラウド向けアプリケーション、第 3 版



    1. PostgreSQLまたはOracleで月の名前で注文する方法

    2. Sqlldr - 終了して囲まれたフィールドの後にターミネータが見つかりません

    3. プロシージャで作成されたテーブルが削除され、プロシージャのコンパイルエラーが発生します

    4. 検索のようにmysqlにスペースを含める