受信データから統計レポートを生成する大規模なデータベースをセットアップしています。
システムは、ほとんどの場合、次のように動作します。
- 約400k〜500k行(約30列、主にvarchar(5-30)と日時)が毎朝アップロードされます。フラットファイル形式では約60MBですが、適切なインデックスを追加すると、DB内で急激に増加します。
- 当日のデータから様々な統計が生成されます。
- これらの統計からのレポートが生成され、保存されます。
- 現在のデータセットは、パーティション化された履歴テーブルにコピーされます。
- エンドユーザーは、定数ではなくフィールド間の関係を含む可能性が高い情報について、1日を通して現在のデータセット(コピーされたものであり、移動されていないもの)を照会できます。
- ユーザーは履歴テーブルから特殊な検索を要求できますが、クエリはDBAによって作成されます。
- 翌日のアップロードの前に、現在のデータテーブルは切り捨てられます。
これは基本的に、既存のシステムのバージョン2になります。
現在、MySQL 5.0 MyISAMテーブルを使用しており(Innodbはスペース使用量だけで殺害していました)、#6と#4で大きな苦しみを味わっています。#4は、5.0でサポートされていないため、現在、パーティションテーブルではありません。レコードを履歴に挿入するのにかかる膨大な時間(時間と時間)を回避するために、インデックス付けされていないhistory_queueテーブルに毎日書き込み、次に最も遅い時間の週末にキューを書き込みます。履歴テーブル。問題は、その週に生成された履歴クエリがその週に数日遅れている可能性があることです。履歴テーブルのインデックスを減らすことができないか、そのクエリが使用できなくなります。
次のリリースでは、少なくともMySQL 5.1(MySQLを使用している場合)に確実に移行しますが、PostgreSQLを強く検討しています。議論が終焉を迎えたことは知っていますが、この状況に関連するアドバイスはないかと思いました。研究のほとんどは、Webサイトの使用を中心に展開しています。インデックス作成は実際にはMySQLの主な機能であり、PostgreSQLは部分インデックスと関数に基づくインデックスを介して私たちを助けてくれるようです。
私は2つの違いについて何十もの記事を読みましたが、ほとんどは古いものです。PostgreSQLは長い間「より高度ですが遅い」とラベル付けされてきました-それでも一般的にMySQL5.1とPostgreSQL8.3を比較する場合ですか、それとも現在はよりバランスが取れていますか?
商用データベース(OracleおよびMS SQL)は、単にオプションではありません。Oracleがそうだったらいいのにと思います。
MyISAMとInnodbについての注意:Innodbを実行していたのですが、3〜4倍遅いなど、はるかに遅いことがわかりました。しかし、私たちはMySQLにもかなり慣れていて、率直に言って、dbがInnodb用に適切に調整されているかどうかはわかりません。
バッテリーバックアップ、フェイルオーバーネットワーク接続、バックアップジェネレーター、完全冗長システムなど、非常に高い稼働時間の環境で実行しています。そのため、MyISAMの整合性に関する懸念が考慮され、許容できると見なされました。
5.1に関して:5.1に関連する安定性の問題を聞いたことがあります。一般的に、最近(過去12か月以内)のソフトウェアは安定していないと思います。5.1で更新された機能セットは、プロジェクトを再設計する機会を考えると、手放すには多すぎます。
PostgreSQLの落とし穴に関して:where句のないCOUNT(*)は、私たちにとって非常にまれなケースです。これが問題になるとは思いません。COPY FROMは、LOAD DATA INFILEほど柔軟ではありませんが、中間のロードテーブルで修正されます。私の最大の懸念は、INSERTIGNOREの欠如です。複数のレコードを2回入れて、最後に巨大なGROUP BYを実行して重複を削除する必要がないように、処理テーブルを作成するときによく使用します。私はそれがそれの欠如が許容できるほどまれにしか使用されていないと思います。