お題: MySQL vs PostgreSQL

呼ばれたついでに聞きたいんだけど、MySQLとポスグレ両方使ってる人に。 MySQLじゃないとできないアーキテクチャってなんかあったりする? MySQLとポスグレたいていのシステムはどっちで構築しても今だといけるのかなってと思ってるけど いやいやポスグレじゃないと無理とか、いやいやMySQLじゃないと無理とか、 あるかね

primary keyでの索引の速さこそがMySQLの最大の利点?

速さの多少の優劣は、ぶっちゃけ置き換えられるじゃん?

shs

アーキテクチャーレベルでMySQLじゃないとだめってあるの?

機能レベルでって話よね、性能ではなく

コネクション周りの仕組みの違いから、MySQLじゃないとさばけないー!みたいな? しらんけど

Window Function が〜、みたいなのは除く?

binlogゴニョゴニョするみたいなことはあんまりPostgresだと聞かないな

schema とか MySQL にないんだっけ

正直、今MySQL使ってる人ってPostgreSQLがトランザクションサポートしなかったから選んだぐらいの事平気で言いそう(ド偏見

MySQLって1万とかのコネクションそのまま流しても行けると思うけど、ポスグレだとどうなるっけ プロセスモデルだからコネクションプール張って制限掛けるでいいの?

レプリケーション周りはPostgreSQLだと多分いくらかのダウンタイムと共に引き継ぐのが精一杯なはずでGalera Clusterだともう少し短いダウンタイムで行けるんだっけか…

レプリケーションの柔軟さはたしかにMySQLに利があるか

1クエリ1プロセスで処理してるからって言ってもC10K問題みたいなのが問題になってたころよりOSもCPUも性能上がってて、1万プロセスぐらい居ても平気で走るんじゃないかな知らんけど…

そこが少しきになってて、実際最近はどうなんだっけって プールは作っとかないとしんどそうな気はするな プロセスフォークのコスト考えると

社内有識者に聞いてみたら帰ってきた答えは binログがコンパクトなのでインターネット経由で飛ばしてもパケ死しないこと、だそうです

まあレプリに強みがあるのは分かる

AWS 向きだ!

確かにPostgreSQLはWALの中にフルページライトを打ち込むのでログの物量がゴリゴリに増えてパケ死します

binログをインターネット経由で転送するってのも結構限られたユースケースな気もしますね

仕事がら、ちょいちょい聞きますね RDSとCloud SQLの同期とか

それもかなり特殊事情ありそうですね

この文脈ではegressコストが下がるのか

MariaDBコミッタのなゆたさん曰く、C10K的な意味でのスレッドによる速度の利得は2倍ぐらいがせいぜいじゃないか?とのこと

ポスグレでレプリ戦略選ぼうとするとまずミドルウェア選定になっちゃうよな

それな

DB側にあらかじめオプションが用意されているというのは強み

おぬしもWALよのお

ここ数年触ってないんですが、たしかにレプリケーションの柔軟さは大きな強みでした、かつて4GB-8GBくらいのメモリのサーバが主流だった時代は1マスタにNスレーブぶら下げるのはよくある構成でしたし、トラフィックが増えてきたらそれぞれのスレーブが特定のテーブルだけをレプリケーションする…とかいろいろ細かいことができました。 一貫性を担保した状態で無停止でバックアップもとれましたしね。

MySQLからポスグレにうつったひとたちは、何を求めてポスグレにいったんですかね

いまはPITRはポスグレも単体である程度できる

ポスグレ運用したことないから感覚がわからん

お、オラクルが買えないから…

PITR何か制限あるっけ?

なんか昔は一貫性のある状態でスナップショット取らないとダメとかあった気がするが

なるほど Cloud SQLだと提供してるから普通に出来るもんだと思ってた

や、最近のは特に問題ない ずっと昔の話

今はマシンスペックが上がって1マスタ(+レプリカ)で十分捌けるようになった、RDSなどのマネージドが充実した、ということもあり上で挙げた MySQL の強みだったレプリケーションの柔軟性や複数台数を扱うときの取り回しやすさが超大規模システムを除くと不要になったというのがあり、JOIN の性能であったりウィンドウ関数の存在であったりでポスグレでよくね?となったかも。

MySQL も 8 くらいからウインドウ関数入りましたけどね。

JSONクエリが便利ってのはあったな

8からだいぶクエリでできることの差は無くなりつつある

あと関数インデックス張れる

ポスグレがだよね?

うん

そういうのは強いよね ここまで細かくなってくると、Oracleみたいな細かい話になっていく

タイムゾーンアウェアな日付型とかも好きだな

そうするとやはり、なぜみなポスグレ使わずにMySQLを使うのだろう 慣れ?

慣れもあると思いますね

慣れもあるかな。 partitionがすごく便利。 あと、replicaのバージョン違いができるのとか、replicaにだけインデックス貼るとかできるけど、そういうトリッキーなことはRDSとかAuroraが進化してあまりやらなくはなった。

レプリケーション以外は、細かい機能はだいたいポスグレのほうが便利に思える。

Auroraサポートされてなかったから仕方なく使ってたパターンはあった

partitionもそうだけど、ローレベルの操作がMySQLは非常にやりやすかった 内部構造をよくわかっていると扱いやすいんよね statement based loggingの場合にbinlog自前でパースしてリプレイしたりとかそういうことはまあ普通にやるんだけど ポスグレでは聞いたことがない

JOINってよくなってんだっけ?MySQL 別にJOINも今はそんな困らないと思う。 サブクエリが賢くないことはまだちょいちょいあるかな。

びんろぐはべんりだよ びんびん

JOINとかサブクエリの賢さからPostgres使ってる

PMから定期的に、 👨 < なんで日本はこうMySQL周りの機能リクエストばかりくるの?他の国はだいたいポスグなんだけど! って聞かれては、 < いやー、10年ちょいくらい前にはやってそのままみんなMySQL 使ってるよ と返してる

ソシャゲ系が軒並みMySQLだったんだよなあ

軒並み MySQL です 選択肢それしかなかったし

なんでMySQLだったかというと当時はPostgresより速かったから

レプリがやっぱり大きかった気がする。

上の方で少し話題に出てますが、スレッドベースの MySQL の方がプロセスベースの PostgreSQL より大量接続を取り回しやすかったというのがあるかもしれんですね。ソシャゲ。

ゲームみたいにユーザーの情報PK一本釣りするクエリが大量に来るのには都合が良かった

レプリはそうか。 ポスグレに入ったの結構後だったからな

複雑なクエリを伴う業務システムはオンプレが多かったように思う

海外では当時どうやってたんだろな

都度接続にして、failover早くしやすいとかもあった気がする。 プールつくらなくていいのはメリットか

PHPで作る業務システムはPostgres多かったよ PHPで作っているって時点でそもそも金がないからOracle選べないしね

業務システムだと、同時接続数限られるよね 1万とかつなぎにこない

そうだね

そう

ソシャゲはjoin禁止とかしてたからMySQLのデメリットは気にせずに、ガンガンコネクション貼れるとか高速とかでMySQL選んでたよね

なんか、そのころ、レンサバに乗ってるMySQLが4系とかだったから、ある程度ちゃんとしたRDBMSを使おうとすると、PostgreSQLになる、みたいなのもあった気がする。 (edited)

高機能KVSとしてMySQL使ってたわけだ

そーいう系はOracleが牛耳ってたからあんましPostgresの出番がなかったのもある

Oracle使う予算がないところでPostgreSQLを使っていた感じかなー。(というか僕がいたSIがそういう提案を良くしていた

CGIと地続き感あるね。MySQL選定されたサービス。

そうそう ガチ業務系は金が潤沢にあるからOracle選ぶし Postgresのスイートスポットなかったんよねあんまり

自社データセンターのレンサバにそういうパッケージをインストールしていた。

まあ確かに、業務システムでOracle使うの当たり前だったから、別にそこに高い金払うのに抵抗ない会社は多かったね。

次に気になるのが、じゃあソシャゲはMySQLでしか当時は実現しえなかったのは分かるが、今ではポスグレでも十分いけるのかな、それともまだMySQLに利があるのかな。

逆に今の MySQL をしっかりわかってないんですが、慣れや好みなんじゃないですかね?たぶん…

慣れてる方でやりたいというの分かる。

やっぱパーティションがとにかく便利ってのはあるなぁ。

(個人的にはそんなにパーティション便利と思ったことはなかった…)

マネージド使うのが主流になって MySQL, PostgreSQL それぞれで同じようなことができるのであれば、あまりどっちを選んでも変わらんような気もしていて、自分がいまどちらを選ぶか?と聞かれたら正直どちらでもいい、んですよね…

パーティションはポスグレにもありますよね?

ありますね。 > partiton なので、partitonが便利というか、MySQLの場合、内部的には実質別テーブルなので、取り回しが楽のように感じている、みたいなのがあるかなぁ。

内部構造が分かってるからこそというかんじですかね やはり慣れ

そうね

安心

うちもAurora MySQL

ただ大規模かつ生運用をやってくれといわれたら、MySQL を選ぶかな…。大規模になるとやはりレプリケーションがとても役に立つ。 ブラックホールエンジンが地味に好きで要所要所で役に立っていた。

ブラックホールとレプリ組み合わせるやつとか

複雑なJOINクエリが大量にあるやつはPostgresです。

なんかUnixコマンドの組み合わせみたいな頭の使い方できるのは 良さといえば良さかなあ、 結局ローレベル触れるってところになる気がするが。

ブラックホールいいよね。

マニュアル操作ができるRDBMS

MT車だな

MySQLはMT車 おぼえた

postgresqlはpartitionの再定義やりやすいのかな。(以前そのあたりで諦めた気がするけどわからない

Postgresはクラウドリフト&シフトの波に乗った感ある

実際いまの仕事もゲーム2件は両方MySQLだし、業務系のはポスのグレ

てかなんかどういう背景か知らないけど開発スピードが上がったんだよね それで使おうかなって気持ちが増してきた

うちはPostgresしか話題には上がらないなー いや、お客でMySQLな会社あったわ 一社だけ

追記していくようなテーブルでPartition切っておいて、古いレコードをEXCHANGE PARTITIONで別テーブルに移しつつ、そのテーブルはprimaryではblackholeにしておいて、レプリ先には書くとかやったことがある。

shirou

ロボットです