MySQL vs PostgreSQL Part2
■ このスレッドは過去ログ倉庫に格納されています
同じオープンソースRDBMSとしてのMySQLとPostgreSQLを語ろう。
どちらが良い・悪いの宗教論争ではなく、漏れたちユーザにとってのそれぞれの使い所を見出そう。
前スレ
MySQL vs PostgreSQL
http://pc8.2ch.net/test/read.cgi/db/1056943680/l50
客先で運用するシステムなら、どうしてもMySQLの必要があるのならライセンス
買うべきだ罠。なるべく安くあげたいのならPostgreSQLにすべき。 あとMySQLのクライアントの価格は交渉しだいで非公開
自宅鯖だが、MySQLとPostgreSQLを両方使用した経験上からの比較。
まず速度面だが、たしかにMySQLは早い。というより、PostgreSQLは使い
続けてると遅くなってきたり、CPU100%使用状態が頻繁にある気がする。
起動直後にデータをSELECTしたりINSERTしたりするときの速度はあまり変
わらないのだが。あと、DBにログインするさいはPostgreSQLのほうが
遅いようだ。認証チェックが厳しいのだろうか?
機能面では、やはりビューがあるPostgreSQLは使いやすい。ユーザーに応
じて特定のデータのみを見せる場合(たいてい、同一テーブルに複数ユー
ザーのデータがあって、自分のデータだけを見せたい場合)わざわざ条
件句を書かなくてもよくなり、ソースがすっきりして可読性がアップす
る。ただ、MySQLも5.0からビューをサポートするのでこのアドバンテージ
は差がなくなるだろう。
また、PostgreSQLはグループごとの権限をサポートしているが、MySQL
はどうなんだろうか?
ライセンスに関しては、PostgreSQLは商用も完全フリー、MySQLはGPLライ
センス。とはいえ、MySQLのライセンスって数万ぐらいだった気も。
動作環境は、昔はPostgreSQLはWindowsをサポートしていなかったため、
Linux上で使うかcygwinというエミュレーターを使用する必要があった。
8.0からWindowsをサポートしているので、ユーザーがWindowsしか使え
ないという場合でも特に問題はなし。ちなみにMySQLは両方ともサポート
していたはず。
他、MySQLは4.1ぐらいから日本語周りでつまることが多い。Unicodeに
仕様変更したかららしいが。ちなみにPostgreSQLはEUC-JPを使用。いず
れも設定で変更できたと思う。
結論として、WEBみたいなデータにアクセスするユーザーを問わなくて
かつデータを出し入れするだけみたいなのはMySQL、業務系みたいに
ユーザー権限が存在してデータを集計したり複雑にテーブルを結合した
りするところではPostgreSQLを使うかな。 MySQLだとクライアントのライセンスが面倒になる場合があるな
3.xの古い時代にはLGPLなライセンスなときがあったのでそれを使えば大丈夫
ただし、その接続は4.1からつながらないと思う
速度的にもPostgres8使ってる限り差はない
7.4まではかなりPostgresが遅いとかんじる部分はあった
が、その時期はMySQLはサブクエリーがないわけで機能的差も大きいし
業務系でずっとやってきてInnoDBしか使わんが、InnoDBはなんか
insertが遅かったような記憶がある
接続速度が問題になることはどっちもない
アプリケーション鯖ならコネクションプールするし
業務系で2層式、3層式とやってきたがライセンス的に楽なpostgres1本で
もういいんじゃね?という気はする
デフォのインストール状態だともはやPostgresのほうが使用メモリ小さかったような気がするし、
Oracleのように細かい調整が可能
テーブルスペース扱えるようになったのも分かる人には結構大きい変更点だ
まぁスタンドアロンならHSQLDB使うし、商用がいいのなら軽量のInterbaseやOracle選択
ただし、Oracleも商用可能でフリーなライセンスが追加されるようなのでそちらの動向も気になる
スレ違いになるがな >>42
古い接続認証方式だと繋がる。
もっとも古いクライアントでは古いAPIしか使えないわけだから、
サーバがMySQL4.1以上の意味がないが。 PostgreSQL 8.1の高速化により、MySQLの利点はバキュームしなくてもいいってことぐらいになった? そのバキュームもCPUがあいてるときにちょろちょろやる設定が8からついたから
あんまり問題にならなくなったよ
もう7.xに戻る気はしないね
速度もそうだけどまったく別物だもん 8.1 からは autovacuum が contrib から組み込みになるしね。
もっとも、デフォルトでは無効で設定しないといけないけど。
MySQL は sysvshm/sysvsem を使わないので
FreeBSD jail 環境でも使えるのが利点...と言えなくもない。 >>46
いったん大きくなってしまったDBサイズの縮小のために定期的にfull vacuumする
必要はまだあるんじゃないかと。
あと、jailつかうのならXenつかってOSごと分けちゃったほうが…、って板違いか。 > いったん大きくなってしまったDBサイズの縮小のために定期的にfull vacuumする
> 必要はまだあるんじゃないかと。
vacuum fullでDBサイズが小さくなっても、またすぐに大きくなってしまうようなら
普通のvacuumで十分な場合がほとんど。
そもそも、「定期的な」vacuum fullが必要になることはあまりない。
Postgresqlはバージョンが上がる毎に
速度がメキメキ上がっていくところが頑張ってるなぁと。
8.1は速度の向上がかなり良かったようだし
autovacuumも標準装備だっけ?
それと、pgpoolとの相性もよさげ。
vacuumの管理の面倒さが無くなり、速度もmysqlと拮抗するなら
postgresqlの方がアドバンテージあるとおもうな。
MySQLだと、ライセンスの問題もあるしね。
エクセルVBAでMYSQLと接続する方法を教えてください。
ODBCドライバ使えばできるらしいのですが、
私が持ってるVBAの本にはまるでかかれてません。 mysql ODBCとかてのを入れてデータソースに登録すればいいんじゃまいか >>50
MySQL5.0のスレに回答があったぞw
マルチするな >>52
770 名前:763[sage] 投稿日:2005/11/06(日) 14:27:14 ID:???
他スレで回答がありました。
ありがとうございました。
騙りは止めていただけますか? >>52 この板から消えろ 馬鹿すぎ
28 名前: NAME IS NULL Mail: 投稿日: 05/11/05(土) 23:07:24 ID: urZZ/Ba6
エクセルVBAでMYSQLと接続する方法を教えてください。
ODBCドライバ使えばできるらしいのですが、
私が持ってるVBAの本にはまるでかかれてません。
50 名前: NAME IS NULL Mail: 投稿日: 05/11/05(土) 23:07:55 ID: urZZ/Ba6
エクセルVBAでMYSQLと接続する方法を教えてください。
ODBCドライバ使えばできるらしいのですが、
私が持ってるVBAの本にはまるでかかれてません。
763 名前: NAME IS NULL Mail: 投稿日: 05/11/05(土) 22:51:01 ID: urZZ/Ba6
エクセルVBAでMYSQLと接続する方法を教えてください。
ODBCドライバ使えばできるらしいのですが、
私が持ってるVBAの本にはまるでかかれてません。
MySQLはPostgresに比べてデータが壊れやすい印象があるんだけど、
この認識は間違ってますか? 書き込みのしくみからの「印象」ではPostgreSQLのほうが壊れにくそうな気がするけど
実際には運用の仕方によるとしか言えないね。 >>57
MySQLつうかMyISAMは不整合が起きやすい気がするな。
データそのものが壊れるってことはないけど、MyISAMは
やっぱり煩雑な更新には向かないストレージタイプだと思う。 PostgreSQLのテーブルパーティションが便利だな 英語がすごく苦手なんですけど、ツール類とか含めて日本語環境が充実してるのはどっちですか?
自分で調べた感じではPostgreSQLかなと思いますが・・・ 何を持って普及してるというかは微妙だが
postgresのバックアップツールは日本語とおらないぞ
データベース丸ごとという指定なら問題ないが
個別にやる場合問題あり
DB自体はまったく問題ないので自作できるとかなら気にしなくてもいいかも
MySQLはどうだったかなぁ
4.0までならプラットフォームのエンコーディング使うんで問題は少ない
最新版の5.0は4.1があんな状況だったのを考えるとわりと危険がいっぱい
でたばかりなのは危険があるのはどちらも同じ
postgresは今8.0が枯れてきたところ
半年くらい前までは8.0もjdbcドライバがバグもちだったし
話はそれたが、どっちも使った人間としては総合的に見て
postgresのほうが今は楽
interbaseやHSQLDBも好きな変人なんで当てにはならないと思うが
俺はまったく英語読めないけどどっちも使えてる
>>63
「英語がすごく苦手」で「ツール類とか含めて日本語環境が充実してる」なら
二者から選ばず、Oracleになさい。MSのSQLサーバも結構良いよ。 >>64
>postgresのバックアップツールは日本語とおらないぞ
>データベース丸ごとという指定なら問題ないが
>個別にやる場合問題あり
そうなの?これはpg_dumpのこと? >>63
SQLServer 2005 Expressだな。無料だし。
で、SQLServer 2005 ExpressにはEnterprise Managerが付いてないので、
管理用にSQLServer 2005のDeveloper(未発売)を買う。
SQLServer 2005 Developerが5000円くらいで出てくれればコレが最強。 pg_dumpはテーブル名とかオブジェクト指定に日本語とおらないはず。 >>68
データの方は大丈夫なんですね。
じゃあ普通に英数字で命名してる分には大丈夫なんかな。 そういうこと
カラム名に日本語使うのは問題ないみたい
テーブル名に日本語使うとはまるかも
Postgres本体の制限ではないけど、こういうのはオープンソースプロダクトではよくあるよ
DB本体はマルチバイト綺麗に対応していても周辺のツールが未対応っての
昔はフィールド名、テーブル名に日本語ってあり得なかったんだけど
最近は普通にみんな使ってるし、対応してくれると楽だなぁ。 エンドユーザーコンピューティングってやつだな
元々業務系はAccessとかCOBOLとかスタンドアロン系のDBは
日本語使うのが普通だったんだけれども
一応マルチバイトのテーブル名とかカラム名とか動くはずだが
保障しない、推奨しないってのがOracleあたりで多かった希ガス
ま、SQLぱっとみてすぐに分かるのはいいよね
俺も10年位前は否定派だったけど、いまじゃ日本語とおるほうがいい
MYSQLはプラットフォームのエンコーディング無視して
ファイルシステムに格納しやがるからMySQLも日本語テーブルは鬼門
日本語カラムはMySQLでは非推奨だったかな
これも周辺ツールの影響もあると思われ プログラマ的発想だと、テーブル名に日本語はやめれって感じだけど、
普通に考えると日本語使えた方がいいね。
仕様書いたりするときも、いちいち説明用に日本語と英語の対応表を
別に用意したり、慣れない英語名を考えたりしなくてむ済むし。 >>73
確かにカラム名と日本語名とかならずかいてたな
カラム名をそのまま出すとユーザー企業側がわからないので
日本語名対照表作るなり面倒なことになる
そしてカラムが増えたのにそれを忘れたり・・・
回答ありがとうございました。勉強になりました。
列名や表名に日本語は使わない方針なので、その点からするとあまり変わらないですかね。
無料のSQLServer2005Expressにも興味ありますが、
Developerが出てないので今回は見合わせます。今すぐ作ってみたいので。 まぁ小規模なPGでDB周りをちゃんと作ってれば
DBMSが変わってもさほど直さなくて済むよというか
そうで有ればいいなぁ。。。
DBアクセス部分を抽象化ってのはむずかしいからね
大概ロジックと乱れ飛ぶから
とりあえず標準SQLを出来るだけ使うようにするというのは大事
>>75
開発環境がWindowsならPostgresが今はオススメかな
インストーラでらくらくセットアップ、pgadminやJDBC等ドライバも
標準でインストールされて、pgadminの日本語ドキュメントもすぐひける
mysqlはWEBで使うという書籍が多いけど、postgresはoracleの代替として
現実的なDBという書籍が多いと思う
最終的にはBSDライセンスが楽ということもあってpostgresでいいと思うけど いままでFreeBSD4.11でMysql5.0をつかってきたが
5.0.16からPortsでインストールできなくなったので
PostgreSQLに移行しようと思っている
もともとLINUX_THREADを使わないと壊れるなど
FreeBSDとの相性が悪いようなので
PHPのソースはPEARをつかってるので書き換えは不要だが
mysqldumpの出力内容をいじらないといけないようで
int(11) → int
auto_increment → serial
でインサートできているようだ
他にMySQLからPostgreSQLへ移行する上で
とくに注意する点はないだろうか? MySQLはそのままでOSをLinuxにすれば簡単なのに馬鹿だな mysqlではこういう書き方でOKだったが
select * from tablename where hoge = "mage";
PostgreSQLでは
where hoge = 'mage' とシングルクォーテションじゃないとダメ >>79
そういう前提でいいのか?
OSそのままでOracle使えば楽なのにとかそういうことは俺はいえん 文字列はシングルクォーテーションだな
ダブルクォーテーションは用途が違う
MySQLをANSI準拠モードで使うとこれが悲しいってのはあるかな? Linuxでいいや
そんなふうに考えていた時期がオレにもありました Linuxじゃ駄目だと考えるようになったのはニートと呼ばれ始めた頃からだろうか? 社内で閉じたシステムじゃないからな
コマーシャルライセンスが必要 んでも、「GPLで配布されているMySQL」を入手してGPLの枠内で商用利用する分には
問題ないよな。MySQLを組み込んだ製品を売るんでもなれりゃコマーシャルライセンス
なんていらないんじゃないの? >>94
それで誰もかね払わないからDB部分もGPLになるといってる
3.23だっけ?あのあたりからどらいばがGPLになった
ユーザーがDBのクライアントだから>WEBアプリ 文章の意味がつかめんが、WebアプリならDB本体もドライバも
配布するわけじゃないからGPLでも構わんよね データも公開しないといけないの?
ママ大変!お客様のパスワードが丸見えだわ! ドライバを自作してGPLを回避している強者はいないのか? >>97
普通はDBってユーザーとDBクライアントの間にプロキシみたいなのをかましても
直でつないだのとまったく同じという扱いだよな MySQL が GPL で云々言うなら PostgreSQL を使えばいいのに -- マリー・アントワネット >>102
オマエ>>96?
やっぱり何を言いたいのか意味不明なんだが。
「つなぐ」ことってのはGPLが依拠する著作権的には何の意味もないし。 だれか解説ヨロ
はてなに対して「コマーシャルライセンス買え」か「コード公開しろ」とかで
祭りでもなってるのか? >>106
んにゃ。GPLが理解できない香具師がからかわれてるだけ。
>>96で答えが出てる。
WEBアプリはソース公開するか、ライセンス購入
>>110みたいに必死に嘘を書いてる奴は通報するぞ ライセンス違反者が多そうだな。
技術者として恥ずかしいことだぞ。
社員乙
「前世の障りが…」とかいってビビらせて役に立たないもの売りつける
霊感商法とかわらんな いや、通信プロトコルがGPLというのはネタじゃないんだが
http://dev.mysql.com/doc/internals/en/licensing-notice.html
だからMySQLと通信するプログラムをフルスクラッチで作ったとしてもGPLに縛られる。 マジか。
とはいえ、特許ならともかく、プロトコルに著作権なんか発生しないのは
USも日本も同じだし(Swedenは知らんけど)。
「MySQL ABがそう言っているだけですね(ホジホジ」としか言えんな。 そういうライセンスなんだから承諾しなきゃ使えないだけ
いやならPostgresにしろ
まぁこの1年でPostgreSQLの開発者回り見た感じ倍増してるが
MySQL4.1のやっちまった件&PostgresのWindows対応が大きかった希ガス
そういうライセンスっつーか、GPLでしょ。
いろんな意味で間違ってるよ。 さすがに俺の周りでは8.1はまだ実務運用はされてないな
8.0で動いてるところはいくつか見たし、俺もかかえてる
8.1でSQL(というかJDBC)が厳密になってるっぽいから
単純に移行できるかどうか地震がないっす
自分が書いたコードだけなら対応は余裕なんだけどね
8.1やっと本番環境で動きましたよ〜
SQL変更は何箇所かあった。 うちも年末に8.1に移行した。
全体的に早くなったような気がするけど、相変わらずバージョンが変わるごとに
プランナの挙動が変わってしまうのは困るね。 うちは未だ7.3だ。
7.3もメンテ続いているから積極的に乗り換える理由が無いんだよなぁ… 8.0からまともになったSQLってのもあるしね
Winで開発しないのならいいかもしれんが、
新規案件に7.xはさすがにありえんね
Linuxでも8.1以前に8.0になっただけでもめちゃくちゃ速度かわってるし しかし、変更は7.4->8.0より8.0->8.1のが大きい気がする 8.1での変更点なんて8.0での変更点に比べたら正直カス
とはいえないけどやっぱり8.0ではクリティカルなところが改善されてるから
8.1はやはりメジャーバージョンがあがってない理由にはなるな 内部は知らんが
使えないsqlがでた
以前のpsqlやpg_dump等が実質使えない
などがあったからなあ
7から8は何もしなくてすんだが
8.0から8.1はあちこち変えなくてはならなかった >>131
MySQLで、3.23→4.0より4.0→4.1のが変更が大きいのと同じようなもん? 正直MySQLの4.1以上へのアップグレードにくらべれば7.4から8.1も楽勝
SlonyIでレプリケーションする場合
テーブル名もすべて指定しないとダメなんだよね?
その場合、テーブル作る場合、サービス止めて
テーブル指定するって感じなのかな
MySQLからの移行を考えてるんだが
レプリケーションだけがどうもひっかかる ■ このスレッドは過去ログ倉庫に格納されています