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

1日あたり数百万の新しい行のデータベースアーキテクチャ

    大量のデータについて話している場合は、MySQLパーティショニングを参照してください。 。これらのテーブルの場合、データ/時間によるパーティション分割は確かにパフォーマンスに役立ちます。 ここ のパーティション分割に関する適切な記事があります。 。

    2つの別々のデータベースを作成することを検討してください。1つは最小限のインデックスを使用した書き込み用のすべての生データ用です。集計値を使用してレポートするための1秒。バッチプロセスを使用して生データデータベースからレポートデータベースを更新するか、レプリケーションを使用して更新します。

    編集

    集計レポートを非常に巧妙にしたい場合は、一連の集計テーブル( "today"、 "week to date"、 "month to date"、 "by year")を作成します。生データから「今日」まで、毎日または「リアルタイム」で集計します。 「日ごと」から「週ごと」まで、夜間に集計します。週単位で「週から日」から「月から日」など。クエリを実行するときは、関心のある日付範囲に適したテーブルを結合(UNION)します。

    編集#2

    クライアントごとに1つのテーブルではなく、クライアントごとに1つのデータベーススキーマを使用します。クライアントのサイズに応じて、単一のデータベースインスタンスに複数のスキーマがある場合や、クライアントごとに専用のデータベースインスタンスがある場合があります。生データの収集と、クライアントごとの集計/レポートに別々のスキーマを使用します。複数のデータベースサーバーを実行し、各サーバーを単一のデータベースインスタンスに制限します。復元力を高めるために、データベースは複数のサーバーに複製され、パフォーマンスを向上させるために負荷分散されます。



    1. トランザクション内(SQL Server内)で複数のDDLステートメントを実行することは可能ですか?

    2. PostgreSQL用のpt-pg-summaryPerconaToolkitの使用

    3. count(*)によるテーブルのOracle行数とDBA_TABLESのNUM_ROWS

    4. PHPを使用したIN句を使用したMySQLのクエリ