反撃ののろしを上げるPostgreSQL 72
ストーリー by mhatta
私自身はMySQLしか使ったことないなあ 部門より
私自身はMySQLしか使ったことないなあ 部門より
Anonymous Coward曰く、
やや旧聞に属するが@ITの記事によると、オープンソースのデータベースサーバとしてずっとMySQLの後塵を拝しつづけてきたPostgreSQLが、最近になって急速に勢力を伸ばしていると言う。2006年のIOUG調査ではPostgreSQLを使っている割合はわずかに9%だったが、2007年10月に発表された最新の調査結果では(依然74%はMySQLユーザであるものの)PostgreSQLの利用は20%にまで拡大したそうだ。
これは、高速化などPostgreSQLそのものの改良が急ピッチで進められていることに加え、SonyやAppleがPostgreSQLベースのソリューションを使用していることが知られるようになり(日本だとR25.jpも)、知名度が上がったのが一因だと言う。サードパーティアプリケーションや教育用書籍を充実させていくのが今後の課題と考えられるとのこと。
ハイパフォーマンス (スコア:5, 参考になる)
・PostgreSQLはハイパフォーマンス時にCPUの性能にスケール。pgpool等高負荷対応ツールも充実。MySQLは途中で頭打ち。
・MySQLはエンコーディングが・・・らしい。こんなの [mosql.jp]作る人がいるくらいだし。
自分はPostgreSQL派なので、MySQLはランタイムで要求されたとき利用。作業する時、PostgreSQLはroot権限いやがるに対し、MySQLは普通にできてしまう。以上「自己流の」理解でした。
-- gonta --
"May Macintosh be with you"
Re:ハイパフォーマンス (スコア:3, 参考になる)
FreeBSD 7.0 (今リリース準備中ですね)での結果がありますのでどうぞ。(注: pdfです)
Introducing FreeBSD 7.0 [freebsd.org]
Re:ハイパフォーマンス (スコア:1)
PostgreSQLはトランザクション処理できたけど、MySQLはだめとかあって。
でも機能なかった分 MySQLの方が早かったので 千万件くらいの処理のために MySQLにしました。
PostgreSQLなら一発処理できるのにといいながらも、その後戻らなくてそのまんま居ついたです。
ライセンス (スコア:4, 参考になる)
ライセンスを理由に、MySQL(GPL or 商用ライセンス)ではなく
専らPostgreSQL(BSDライセンス)を使用しています。
単純にデータベースを利用しているだけであり、ソース改変などを
している訳ではないので問題無いとも思ってはいるのですが、
後々で突っ込まれるのも面倒なので。。
Re:ライセンス (スコア:2, 参考になる)
あと、他にも理由があるとすると(2年半前のMySQL5.0との比較ですが)
・大量データのインサート性能を測ったとき、同一環境の条件でMySQLがとてつもなく遅くなった(数千万件単位の比較)
・日本語を使おうとしたとき、チョット苦労したので、他の人に作業を振るのが不安になった
・ストレージエンジン [mysql.com]の違いを理解するのが面倒になった
あたりです。
Re:ライセンス (スコア:1)
富士通製図書館用パッケージで使われている DB がオラクルから PostgreSQL に変更されています.
富士通の方によるとオラクルのライセンス料が高価な事が一因だそうです.
京都大学の図書館システム [kyoto-u.ac.jp]では既にこの新バージョンが稼働しています.
MySQLを使う意味は (スコア:3, 興味深い)
そもそもPostgreSQLの知名度が低いというのもありますが(日本はSRAが頑張ったので例外)、
かりにPostgreSQLを知っていても、彼ら/我々はMySQLを選ぶでしょう。
なぜならMySQLには強力なレプリケーションがあるからです。
レプリケーションによって参照の負荷を分散しスケールアウトすることで、爆発的なアクセスの
増加に対処することができ、また可用性もあがります(参照slaveの切り替え)。
もちろんそれだけでは無理で、そのうちテーブルのパーティショニングが必要になってくるわけ
ですが、レプリケーションがないと話になりません。
Re:MySQLを使う意味は (スコア:4, 参考になる)
障害復旧時の停止時間も馬鹿になりませんし。
そもそも、pgpoolでは負荷分散のためにはクエリの先頭に空白文字が入ってはいけないとか、更新時には両ノードからのコミットを待たなければならないとかの速度的な制約もあり、MySQLに比べると、確実さはあるものの、お手軽さという意味では大きな差が付いていたと思います。
mixiやはてな、livedoorなどがこぞって安価に構築できるMySQL+mod_perlでスケールアウトしていったのに比べて、pgsqlはJava以外の言語ではスケールアップするしか手がなかったのが大きいのではないでしょうか。
Re:MySQLを使う意味は (スコア:2, 参考になる)
商用製品だと、LifeKeeperはコストが高いしクラスタープロだと最新バージョンに対応していないなど、とても使いにくい。
そういった点から見ると、MySQLはレプリケーションが可能な点が非常にありがたい。
Re:MySQLを使う意味は (スコア:4, 興味深い)
ITproの記事 [nikkeibp.co.jp]によると、「8.3以降では、Skypeが開発し使用しているSkytools [postgresql.org]と呼ぶクラスタリング・ツールの提供が予定される」「またpgClusterIIではOracle RACのようなクラスタリング機能を開発している」とのこと。
2chのDB板等でも、PostgreSQLのレプリケーションはちょこちょこと実装は出ているものの、それらの情報は少なすぎ&実績が少なすぎで使うのにハードルが高いと話題になっていましたが、8.3で標準でSkytoolsがついてくるのなら、改善されてくるんじゃないかなぁ。pgpool-IIも2.0betaがリリースされましたし。
Re:MySQLを使う意味は (スコア:1, 興味深い)
pgpoolは機構的にserial型などのinsertに関しての耐性が弱いので,
リプリケーションのソリューションとして使うのには抵抗があります.
また
- dblinkが(MySQLに比べて)使いにくい
dblink(..)とか書きたくない
- リプリケーションが(MySQLに比べて)使いにくい
トリガベースの非同期リプリケーションの機構としてSlony-Iがありますが,
ドキュメントが少ないし,MySQLほど手軽ではない.
という理由でMySQLを使ってるという話は聞きます.
私はPostgreSQL派ですが,上記は大規模なDB分割を必要とする
案件には有利なので確かにもっともだなと思います.
Re:MySQLを使う意味は (スコア:2, 参考になる)
でも、Web上にある情報(ってどこだかはよく分からないですが)を元に、現在運用しています。
一度設定してしまうと、やめたり、再開したりが結構簡単に出来ます。
サイズ的には、500万件程度のテーブルが2つと、あとはちょっと。/data/base 以下は、12G程度ですが、そこそこ動いていおります。
Slonを何かの理由で、再起動した場合、特定のテーブルでエラーになりました。
そのエラーメッセージをぐぐって見たのですが、関係なさそうなものしか出会わなかったのですが、
どうやら、コネクションプーリングを利用している場合(Tomcat等で接続している)には、Web側
も再起動が必要そうでした。
運用面 (スコア:2, 参考になる)
トランザクションログのインクリメンタルバックアップ
が不可能、とかでPostgreSQLを避けていました。
# Postgres95の頃にインストール失敗して苦手意識を
# 持ったのもあるかもしれない(ぉぃ)。
Re:運用面 (スコア:1)
> vacuumは自動だしトランザクションログ(PostgreSQLのアーカイブログの事ですよね)は随分前からバックアップ可能です。
随分前と言われてもMySQLに流れたのがその『随分前』で、その時点で
実装されてなかった機能はないわけで。
> MySQLはトランザクションログをどこかにバックアップしておけるの?
MySQLではバイナリログという名前で、(手動/指定ファイルサイズごと
の自動)ローテーションが可能なクエリログを記録できます。
市販DBという選択肢もあります (スコア:1)
中小企業なんかこれで十分じゃなかろうか。
Re:市販DBという選択肢もあります (スコア:1, 興味深い)
期間過ぎたら動かない、という制限はありませんけど、
運用まで可能な無料の Oracle は存在しないとおもってました。
# サポートの無い Oracle は、ハンドルとブレーキがないベンツだとおもう
# それでも何とかなる、というところは、そもそも Oracle 必要ないんだよね
Re:市販DBという選択肢もあります (スコア:2, 参考になる)
これ [google.co.jp]ですよ。
Re:市販DBという選択肢もあります (スコア:1, 興味深い)
# Oracle XEはうちの案件でも使いました
Re:市販DBという選択肢もあります (スコア:1)
PostgreSQLの親戚というか先祖というか, 共通の祖先をもつ商用DBとしてIngres [ingres.com]があります. GPL2のオープンソース版もダウンロード [ingres.com]できますし, 商用サポート(日本国内ではCA [ca.com])もあるので, 選択肢に入れられるかも.
IPv6サポートを忘れてないかい? (スコア:1)
PostgreSQLを選ぶ理由はいろいろ思いつくな。
商用で使ってないからパフォーマンスは気にしてない
のも後押ししている気はする。
操作がわかりやすい気がする (スコア:0)
あと、権限もMySQLより理解しやすい気が。。。
皆さんどうでしょうか?
Re:操作がわかりやすい気がする (スコア:2, 興味深い)
PostgreSQLはオンラインバックアップがコマンド一発でできるのに、MySQLはスーパーユーザでややこしいことをしないとできなかったり(他のやり方が見つからなかった)と、面倒でした。
PostgreSQLは日本での利用者が多いと聞いたことがあるので、日本での利用者数だとだいぶ比率が違うのではないでしょうか。
Re:操作がわかりやすい気がする (スコア:0)
MySqlをメインで使ってました。
Re:操作がわかりやすい気がする (スコア:1, 参考になる)
それぞれの位置づけは? (スコア:0)
フリーの DB が大規模に使われたりするようになってくれば 必然的に PostgreSQL しかないんじゃないの?
# あ、FireBird があったか…
Re:それぞれの位置づけは? (スコア:3, 参考になる)
フリーで 24x7 な DB が当時(多分 5 年ぐらい前だと思います)なかったんです。
古い PostgreSQL では VACUUM ANALYZE している時は、
問合せ等に応答しないというのがネックでした。
VACUUM が必須だというのに。
# 更新/削除したレコードは削除フラグが付くだけで VACUUM まで削除されない
最近は VACUUM 中も応答するとの事なので、
このような不利な点はないでしょうが、
当時は、運用の難しさから敬遠した開発者は多いと思います。
個人的には
LAST_INSERT_ID() が無い所が嫌いです。
バックアップでトラぶった事がないのが好きです。
日本では「シーラカンス本」が優秀で、
MySQL 向けの本が少なかったので PostgreSQL ユーザが多いように思います。
# PostgreSQL8.0 リリースのときも、似たような事を言っていますな。
# http://srad.jp/developers/comments.pl?sid=235314&cid=681283 [srad.jp]
Re:それぞれの位置づけは? (スコア:1)
Re:それぞれの位置づけは? (スコア:3, 参考になる)
# 貧乏性なもので。
# PostgreSQL
INSERT INTO pgsql_memo VALUES(nextval('db_seq'), '!!本当は日付をいれる!!');
INSERT INTO pgsql_picture VALUES(currval('db_seq'), '/home/tyuu/20050120_01.jpg');
nextval して currval すると思いますが、
nextval を実行してから INSERT を評価する為、
SQL が失敗する可能性があります。
この場合 SEQUENCE である db_seq は ROLLBACK できないので 1 消費してしまいます。
# MySQL
INSERT INTO mysql_memo('day') VALUES('!!本当は日付をいれる!!');
INSERT INTO mysql_picture VALUES(LAST_INSERT_ID(), '/home/tyuu/20050120_01.jpg');
MySQL は SQL の評価と db_seq の更新が同時なので、
無駄に +1 される事がなく、好きです。
優劣ではなくて、好き嫌いの話ですね。
ただ、最近 PostgreSQL を触っていないので、
もしかしたら nextval() 不要になってたりしますでしょうか?
Re:それぞれの位置づけは? (スコア:1, 参考になる)
例:
table: hogehoge
id serial
name text
insert into hogehoge (name) values ('baka') returning id;
みたいにすると、idが取得できます。
Re:それぞれの位置づけは? (スコア:1, 参考になる)
ってことはこれは関係ないですね
transaction関係ないってのは、複数DBで同じsequenceを使いたいときか、
二相コミットとか難しいことしなくてもいいので楽ってのはありますね
まー、欠番が出るのがもったいない(気持ち悪い)ってのもなんとなくわかりますが。
もし、欠番が嫌だったら自分でtriggerで実装するという手もありですね。
Re:それぞれの位置づけは? (スコア:1, 参考になる)
EUCを使おうが、UTF-8を使おうが、クライアントライブラリかアプリ側で文字コード変換が必要。
文字コード変換に無駄なCPU処理時間を使いたくない。
私がポスグレあまり使いたくないのはこれだけです。
Re:それぞれの位置づけは? (スコア:1, 参考になる)
これは事実ですが、
> EUCを使おうが、UTF-8を使おうが、クライアントライブラリかアプリ側で文字コード変換が必要。
これは事実ではありません。PostgreSQL内で変換してくれます。
> 文字コード変換に無駄なCPU処理時間を使いたくない。
文字コード変換しなくても、Shift-JISを使うだけで無駄なCPU処理時間使うことになりますけどね。
Re:それぞれの位置づけは? (スコア:1, 参考になる)
大きかった気がします。
これで一気に差が開いた気がします。
Re:それぞれの位置づけは? (スコア:1)
そして更にMySQLが使えるサーバが増える、と。
tDiaryのお陰でRubyが鯖屋に広がったように、DBMSにもキラーアプリが必要なのかも。
Re:それぞれの位置づけは? (スコア:0)
それどころかPostgreSQLはサポートされていない事もままあります
アプリケーション開発者が何故MySQLを好むのかは分りません。
Re:それぞれの位置づけは? (スコア:3, おもしろおかしい)
・読み方がわからない
・名前が長い
Re:それぞれの位置づけは? (スコア:2, すばらしい洞察)
>・名前が長い
日本式略称にすると立場逆転であります。
正式名称はよく分かりませんが
ポスグレ
こう読んでいます。
マイエスキューエルは、どう略していいか分かりません><
Re:それぞれの位置づけは? (スコア:2, 参考になる)
勝手な妄想ですが、「みくる」なんでどうでしょうか。他意はないです。
うちの近所では日本語の言語サポートが楽であることとバージョン移行のしやすさから、PostgreSQL を使用し続けています。
みくるはcacti等で必要なときだけ入れましょうな扱いになっています。
Re:それぞれの位置づけは? (スコア:0)
ピージーエスキューエル
Mysql(略称無し)
マイエスキューエル
ほんとだ。日本語で2文字も長いですね。
Re:それぞれの位置づけは? (スコア:0)
PostgreSQL
ポストグレスキューエル
MySQL
マイエスキューエル
と、日本語正式名称でも2文字も長いんですよ!!
Re:それぞれの位置づけは? (スコア:1)
ウェブアプリを作る側にも、そういう意識があったんだと思う。
# 「ダブルライセンス」というのがしっくりこないので うちはもっぱら Postgres。ウェブのバックエンドとして使っているだけなので、スピードなんて気にしません。
ん? 俺、今何か言った?
Re:それぞれの位置づけは? (スコア:1)
(以下、続………かない)
Re:それぞれの位置づけは? (スコア:1)
もうMyISAMを使う場面はほとんどないですよ。Sennaで検索したいときに仕方なく使う程度。ふつう、MySQL 5.0(5.1)でInnoDBです。
Re:それぞれの位置づけは? (スコア:1, 参考になる)
日本にいると知名度の差は実感できませんけど、好む好まない以前の問題として PostgreSQL は存在すら知られていないというぐらい知名度が低い(低かった?)のが原因じゃないかと。
日本以外のエンジニアと話をしていると MySQL を知らない人はまだ会ったことないですが、少し前だと PostgreSQL は名前すら聞いたことがないって人も珍しくはなかったです。
Re:それぞれの位置づけは? (スコア:2, 興味深い)
そんな馬鹿な?
自分の周りの環境の話だけで申し訳ないが、MySQLと比べて7.xまでのPostgresは単一CPUでの処理速度でいつも後塵を拝していたのが原因じゃないのですか?
少なくともサブクエリできれいに書くのをあきらめれば(あきらめないとMySQLじゃムリだったw)MySQLのシングルCPUでの性能とPostgresは天と地とまで言わなくてもずいぶんと差が合った。(postgres8.xで全く話しは変わってしまう)
Re:それぞれの位置づけは? (スコア:2, 参考になる)
こういうプロダクトの比較話だと、片方しか詳しく無いのに
自分が選んだほうを推し、他をよく知らないのにディスる輩の意見
(信者と言われる奴の大半はこれ)が集まってすぐ宗教論争になるのだが(笑)
かつてのPostgreSQLはMySQLと比べて圧倒的に遅かった。
7から8にかけて、PostgreSQLは多くの性能に関する改善を行って
やっと性能でMySQLに追いつけるようになったという感じでしょう。
・オプティマイザ
・WALとか
・バキューム周り
・ソート、スキャンの仕組み
・バッファ管理
・マルチスレッド処理
今のポスグレの性能は、このあたりの改善があってこそ。
逆に、初期の頃のポスグレは性能的な観点では、
MySQLと比べて設計的にダメダメだったと言える。
にもかかわらず何故、当時から日本人の多くはポスグレを使ったか?
ひとえに、I井氏のメディア等への激しい露出のお陰ではないかと(笑。
後塵? (スコア:0)
# 解脱ではない
Re:後塵? (スコア:0)
Re:後塵? (スコア:0)
Re:後塵? (スコア:1, 興味深い)