PostgreSQLに好意的な議論
Martin Langhoff がPostgreSQLを支持していると主張している (出典: Moodle over webctおよびLNLS at Athabasca University?フォーラムへの投稿)
Postgresを用いる理由
Postgresにはいくつかの理由がありますが、簡単な概要を述べようと思います。私達はCatalystで様々なRDBMSを運営しており、それらに関して多くの社内経験を持っています:Oracle、Postgres、MySQLそしてProgress、そしてその他いくつか。また、複製データベース、クラスタリング、その他のトリックについても経験があります。これらは、.nzルートドメインサーバーのバックエンドやその他のいくつかのミッションクリティカルなシステムに使用します。
パフォーマンス面では、PostgresはMySQLよりももう少し事前の設定が必要です。よく調整されたPostgresは、小さなデータベースでのMySQLのSELECTパフォーマンスにかなり近づいています。大きなテーブルの場合、MySQLはパフォーマンス上の問題がいくつかあり、Postgresのパフォーマンスははるかに良くなります。
書き込みパフォーマンスもMySQLの問題です。トラフィックが多いため、同時書き込みで深刻な問題が発生します。重い負荷の下では、Postgresのパフォーマンスはずっと良くなります。
しかし、実を言うと、Postgresを選択する本当の理由は信頼性です。私たちは多くのデータベースを管理しており、Postgresは非常に信頼性が高く、ACIDの正当性に焦点を当てています。コミットから戻ったとき、データは安全にディスク上にあり、失われることはありません。 RAID-1を使用して相殺しました。
いくら努力しても、使用頻度の高いMySQLデータベースには、インデックス破損の問題が繰り返し発生します。ほとんどのLinuxディストリビューションでMySQLの起動スクリプトを見ると、毎回の起動時にデータの破損がチェックされます。これは頻繁に発生するという事実を隠すためです。
データがミッションクリティカルではない小規模なインストールではこれは当然のことですが、そのようなアプローチをどれだけ信頼できるかを検討する必要があります。大規模なデータセットでは、isamchk / myisamchkを実行するのに数時間かかることがあります。
MySQL用のクラスタリングソリューションは大いに宣伝されています、そしてそれは赤いニシンだと思います。私の主な関心事は、それが「非同期的に」書き込むということです。つまり、データが安全にディスク上にあるという保証はありません。いつかディスクにたどり着くでしょう。それは奴隷になるでしょう…いつか。うーん。
MySQLクラスターが非同期書き込みを使用していると仮定して、マスターとスレーブ間で読み取り/書き込みを分割すると、データを書き込み、すぐに(またはすぐ後に)それを読み戻す場合には失敗します。そしてこれはかなりの数の場所で起こります。
また、非同期書き込みを使用することによるパフォーマンスの向上についても考慮する必要があります。スタンドアロンPostgresまたはMySQLに非同期書き込みを使用するように指示すると、拡張性が大幅に向上します(最大3〜4倍の同時書き込みを処理できるはずです)。そうすると、MySQLクラスタのパフォーマンス上の利点はほとんどなくなります。マスターがダウンした場合に備えて、依然としてセミホットテイクオーバーがありますが、PostgresはSlonyを使用して、スレーブ内のデータの一貫性をより確実に保証しながらそれを実行できます。
一言で言えば、たとえ理論上は確実に保存されているとしても、MySQLは私のデータが安全にディスクに保存されることを保証することになると通常はあまり堅実ではありません。そしてMySQL Clusterは、もはや保証がないことを前もって述べています。最初のウインク
マイケルはUPSを持つことについて話しています。自動車用のUPSと自動起動するコンテナサイズのオンサイトジェネレータがあります。それでも、大規模インストールでのDBの一貫性については、これには依存しません。権力以外にも多くのことがうまくいくことができます。プロセスにデータの保存に問題がある場合、正しいことはそれをユーザーに伝えることです。非同期書き込みでは、まだ保存されていないデータのキューになりますが、それはユーザーにすでに伝えられています。
それはデータベースがするべきことではありません。
私は現在livejournalやslashdotで使われているものに似たいくつかのテクニックを模索しています。 DB負荷を約50%削減することで、Moodleのスケーラビリティを向上させることができます。これはより緊急のプロジェクト間のギャップでゆっくり起こっています。あなたがそのトラックに興味があるならリチャードか私にpingを送ってください。
Open UniversityはPostgresを使用しています
Tim HuntがMoodleのハードウェアとパフォーマンスのフォーラムに投稿したある記事によると、The Open UniversityはPostgresを使用しています。これは単なる最高のデータベースだからです。
参照
- UbuntuにPostgresをインストールする(Debian)
- MaharaにおけるMySQLとPostgres (MaharaはMoodleと非常によく似た方法で構築されたWebアプリケーションです。そこにあるすべての議論はMoodleにも当てはまります)。