0

私はウェブアプリを構築しています。このアプリは MySQL を使用して、各ユーザーに関連付けられたすべての情報を保存します。ただし、MySQL を使用して、エラー ログ、イベント ログ、さまざまな一時トークンなどのシステム管理タイプのものを保存します。この 2 番目の情報セットは、おそらく最初のセットよりも大きくなりますが、それほど重要ではありません。すべてのエラー ログを失ったとしても、サイトは問題なく続行されます。

これらの異なる種類の情報に対して複数のデータベースを用意するか、それともすべてを単一のデータベースの複数のテーブルに詰め込むかで悩んでいます。

すべてを 1 つにまとめておく理由は、接続を 1 つだけ開く必要があるからです。特にリモートの mysql サーバーを使用すると、接続を開くのにかなりの時間がかかることに気付きました。

あなたたちは何をしますか?

4

7 に答える 7

2

まず、すべてのイベント ログ、エラー ログを db に保存することは非常に悪い考えだと思います。代わりに、ファイル システムに保存することをお勧めします。

Web アプリで何かが予期せず発生した場合にのみ、エラー ログまたはイベント ログが必要になります。次に、ファイルをダウンロードして調べます。それだけです。データベースに保存する必要はありません。データベースと Web アプリの速度が低下します。

あなたの質問への答えとして、本当にそれをしたいのであれば、それらを分離する必要があり、イベントログとエラーログデータベースがロードされて応答が遅くてもページを実行し続ける方法を見つける必要があります.

于 2009-12-27T15:04:26.930 に答える
1

2 つの異なるデータベース(アプリケーションの「コア」データ用と「技術」データ用)を使用することは、少なくともアプリケーションに多くのユーザーがいると予想される場合は、悪い考えではないかもしれません。

  • 1つのDBを1つのサーバーに配置し、もう1つのDBを2番目のサーバーに配置できます
    • 後でもう少しスケーリングすることを考えることができます。「コア」データ用のサーバーを増やし、「テクニカル」データ用のサーバーを 1 つだけにするか、またはその逆です。
  • 「技術的な」データがそれほど重要でない場合は、(より簡単に) 2 つの異なるバックアップ プロセス/ポリシーを使用できます。
  • 2 つの別個のデータベースと 2 つの別個のサーバーがあるということは、「コア」データをホストする DB サーバーに影響を与えることなく、技術データに対して大量の計算を行うことができることも意味します。これらの計算は、ログなどで役立ちます。 .
    • 補足として:そのような「レポート」計算が必要ない場合、それらのデータをDBに保存することはおそらく役に立たず、ファイルは完全に機能しますか?

2 つの接続を開くと、時間が少し長くなる可能性がありますが、その差はおそらくごくわずかですよね。


私は2つのデータベースを使用するアプリケーションで数回作業しました:

  • 書き込みのみに使用される 1 つの「マスター」/「書き込み」データベース
  • および 1 つの「スレーブ」データベース(複数のスレーブ サーバーへの最初のデータベースのレプリケーション)は、読み取りに使用されます。

このようにして、はい、時々 2 つの接続を開きます -- 1 つのサーバーだけでは負荷を処理できなかったでしょう...

于 2009-12-27T15:05:12.810 に答える
1

とにかく接続プールを使用してください。したがって、接続を取得する時間は問題ではありません。ただし、2 つの接続がある場合、トランザクション処理はより複雑になります。一方、2 つの接続があると便利な場合もあります。ビジネス トランザクションで問題が発生した場合、トランザクションをロールバックして、管理トランザクションで失敗をログに記録できます。しかし、私はまだ 1 つのデータベースに固執します。

于 2009-12-27T15:06:31.763 に答える
0

個別の「データベース」を使用するかどうかは、mysqlにまったく違いはありません。これらは、単なるカタログです。

権限の設定が簡単になる場合があります。これが正当な理由です。それ以外は、テーブルを同じデータベースに保持するのとまったく同じです(ただし、同じ名前のテーブルを複数持つことができます...ただし、しないでください)。

ただし、コアとなる重要なデータ(ユーザー情報など)を大量の重要でないデータと混合したくない場合は、それらを別々のサーバーに配置することをお勧めします。これは、古い監査データ、デバッグログなどに特に当てはまります。

また、検索結果やセッションなどの短期間のデータを別のサーバーに配置することもできます。おそらく、高可用性[1]の要件はありません。

そうは言っても、これを行う必要がない場合は、管理が容易な1つのサーバーにすべてをダンプします(バックアップ、高い可用性の提供、セキュリティの管理など)。

通常、1台を超えるサーバーでデータの一貫したスナップショットを作成することはできません。これは、1つだけ(またはバックアップの目的で気になるもの)だけにするのに十分な理由です。

[1]データベースではなく、データ。

于 2009-12-27T16:47:03.417 に答える
0

MySQLでは、InnoDBには、特定のデータベースのすべてのテーブルを1つのファイルに格納するオプション、またはテーブルごとに1つのファイルを格納するオプションがあります。

いずれにせよ、テーブルごとに1つのファイルを用意することをお勧めします。そうすると、データベースが1つまたは複数ある場合に、データベースのストレージレベルに違いが生じます。

接続プールを使用すると、1つまたは複数のデータベースもおそらく問題になりません。

したがって、私の意見では、データベースの「残りの半分」を別のサーバーに分離することを検討したことがあるかどうかということです。別のサーバーは、RAIDがないなど、ハードウェア構成が大きく異なる可能性があります。その場合は、個別のデータベースの使用を検討してください。そうでない場合は、単一のデータベースを使用してください。

于 2009-12-27T16:52:31.330 に答える
0

私は1つのデータベースのみを使用します-主にあなたが提供する理由のためです.ロギングとユーザー保存データの両方に到達するために必要な接続は1つだけです.

プログラミング言語によっては、一部のフレームワーク (例として J2EE) が接続プールを提供します。2 つのデータベースでは、2 つのプールが必要になります。一方、PHP では、1 つ (または 2 つ) の接続をセットアップするときにパフォーマンスが考慮されます。

于 2009-12-27T15:02:14.783 に答える
0

2 つのデータベースを使用する理由がわかりません。「技術」データと「ビジネス」データ専用のテーブルを持つことはまったく問題ありませんが、論理的な分離で十分なはずです。

アプリケーションとデータ ウェアハウスのスター スキーマを意味しない限り、物理的な分離は必要ないように思えます。その場合は、リアルタイムの更新か、より一般的には夜間のバッチ ETL のいずれかです。

于 2009-12-27T15:23:12.773 に答える