1

当社のアプリケーションでは、サーバーから統計データ(負荷、ディスク使用量など)を収集します。膨大な量のデータがあり、常にすべてのデータを必要とするわけではないため、生データを取得して最小値を計算する「圧縮」ルーチンがあります。多数のデータポイントの最大値と平均値。これらの新しい値を同じテーブルに保存し、数週間後に古い値を削除します。

今、私はこの圧縮ルーチンを書き直す任務を負っています。新しいルーチンは、1年間のすべての非圧縮データを1つのテーブルに保持し、「圧縮」データを別のテーブルに保持する必要があります。私の主な関心事は、データベースに継続的に書き込まれるデータを処理する方法と、「トランザクションテーブル」を使用するかどうかです(より良いものを思い付くことができないので、私自身の用語です。コミットについては話していません。 / rollbackトランザクション機能)。

現在のところ、データコレクターはすべての情報をという名前のテーブルに挿入しovak_result、圧縮されたデータはで終わりovak_resultcompressedます。しかし、「一時ストレージ」と呼ばれるテーブルを作成して「一時ストレージ」としてovak_resultuncompressed使用することには、特定の利点または欠点がありますか?圧縮ルーチンに適した最小限に抑えられますが、すべてのデータをあるテーブルから別のテーブルに継続的にシャッフルする必要があり、で常に読み取り、書き込み、削除が行われます。ovak_resultovak_resultovak_result

この種のものを処理するためのMySQLのメカニズムはありますか?

注意:ここでは非常に大きなデータセットについて説明しています(非圧縮テーブルで約1億行、圧縮テーブルで約1〜10 M行)。また、ソフトウェアとハ​​ードウェアの両方の構成で、ほぼやりたいことができます。したがって、MySQLの構成やハードウェアのセットアップに関するヒントやアイデアがある場合は、それらを実行してください。)

4

1 に答える 1

0

ARCHIVEストレージエンジンについて読んでみてください。


あなたの説明を再確認してください。さて、私はあなたの説明からあなたが何を意味するのかわかりませんでした。もっと注意深く読むと、最小、最大、平均について言及されているようです。

したがって、必要なのは、大規模なデータセットの集計計算を更新するマテリアライズドビューです。Oracleなどの一部のRDBMSブランドにはこの機能がありますが、MySQLにはありません。

これを解決しようとする実験的な製品の1つは、FlexViews(http://code.google.com/p/flexviews/)と呼ばれます。これは、MySQLのオープンソースコンパニオンツールです。クエリを生のデータセットに対するビューとして定義すると、FlexViewsはMySQLバイナリログを継続的に監視し、関連する変更を検出すると、更新が必要なビューの行のみを更新します。

これは非常に効果的ですが、ビューとして使用できるクエリの種類にいくつかの制限があり、PHPコードでも実装されているため、ベーステーブルを更新するトラフィックが非常に多い場合は、追いつくのに十分な速度ではありません。

于 2011-09-15T00:02:00.690 に答える