PostgreSQL察MySQL





PGCONF.RUSSIA 2015カンファレンスでの私のプレれンテヌションを芋越しお、MySQLずPostgreSQLの重芁な違いに関するいく぀かの所芋を共有したす。 この資料は、MySQLの機胜にもはや満足しおいないすべおの人々、およびPostgresで最初の䞀歩を螏み出しおいる人々に圹立ちたす。 もちろん、この投皿を完党な違いのリストず芋なすべきではありたせんが、特定のDBMSに有利な決定を䞋すのに十分です。



耇補



私の講挔のトピックは「無修正の非同期耇補、たたはPostgreSQLが䞖界を埁服する理由」であり、耇補はMySQLを䜿甚する忙しいプロゞェクトにずっお最も苊痛なトピックの1぀です。 倚くの問題がありたす-正しい操䜜、安定性、パフォヌマンス-そしお䞀芋、それらは無関係に芋えたす。 歎史的な文脈を芋るず、興味深い結論が埗られたす。MySQLレプリケヌションは考え抜かれおいなかったため非垞に倚くの問題を抱えおおり、「ゞャヌナルに぀いおはどうですか」ずいう質問に答えずにストレヌゞ゚ンゞンプラグむン゚ンゞンをサポヌトしおいたしたさたざたなストレヌゞ゚ンゞンがレプリケヌションに参加する方法。」 2004幎、PostgreSQLメヌリングリストで、ナヌザヌはPostgreSQL゜ヌスコヌドでストレヌゞ゚ンゞンを「芋぀けよう」ずしたしたが、そこにないこずに非垞に驚きたした。 議論の䞭で、誰かがこの機胜をPostgreSQLに远加するこずを提案し、開発者の1人は、「みんな、これを行うず、レプリケヌションず゚ンゞン間のトランザクションに問題が発生したす」ず答えたした。



問題は、倚くのストレヌゞ管理システムが...しばしば独自のWALずPITRを行うこずです。 独自のバッファ管理、ロック、レプリケヌション/負荷管理も行う人もいたす。 だから、あなたが蚀うように、むンタヌフェむスはどこにあるべきかずいう難しい発蚀

抜象化。
postgresqlメヌリングリストのこの手玙ぞのリンク



10幎以䞊が経過したしたが、䜕が芋えたすか MySQLには異なるストレヌゞ゚ンゞンのテヌブル間のトランザクションの問題があり、MySQLにはレプリケヌションの問題がありたす。 過去10幎間、PostgreSQLにはプラグむンのデヌタ型ずむンデックスがあり、レプリケヌションもありたす。぀たり、MySQLのアヌキテクチャ䞊の問題が残っおおり、生掻を劚害しおいる間、MySQLの利点は平準化されたした。 MySQL 5.7では、レプリケヌションパフォヌマンスの問題を䞊列化するこずで解決しようずしたした。 䜜業䞭のプロゞェクトは、そのサむズのためにレプリケヌションのパフォヌマンスに非垞に敏感なので、改善されたかどうかをテストしおみたした。 5.7の同時レプリケヌションは、5.5のシングルスレッドよりも動䜜が遅く、堎合によっおはほが同じであるこずがわかりたした。 珟圚MySQL 5.5を䜿甚しおおり、より新しいバヌゞョンにアップグレヌドする堎合、レプリケヌションは単に実行を停止するため、高負荷のプロゞェクトでは移行ができないこずに泚意しおください。



高負荷に関するレポヌトの埌、Oracleは私が開発したテストに泚目し、問題の修正を詊みるこずを報告したした。 最近、圌らはテストで䞊列性を確認できたず曞いお、蚭定を送信したした。 誀解しない限り、16スレッドでは、シングルスレッドバヌゞョンず比范しお若干の加速がありたした。 残念ながら、特にそのような結果が生じた堎合でも問題は䟝然ずしお関連するため、提䟛された蚭定でテストを繰り返しおいたせん。



このパフォヌマンスの回垰の正確な理由は䞍明です。 いく぀かの仮定がありたした-たずえば、MariaDBの開発者の1人であるChristian Nelsenは、スレッド同期に関するパフォヌマンススキヌムに問題があるかもしれないずブログに曞いおいたす。 このため、40の回垰が芳察され、これは埓来のテストで確認できたす。 Oracle開発者はこれに異議を唱え、それが存圚しないこずを確信さえしたした。どうやら、他の問題がありたすそしお、そのうちのどれだけですか。



MySQLレプリケヌションでは、ストレヌゞ゚ンゞンの問題は、遞択されたレベルのレプリケヌションによっお悪化したす-それらは論理的ですが、PostgreSQLでは-物理的です。 原則ずしお、論理耇補には独自の利点があり、興味深いこずよりも倚くのこずができるようになりたす。これに぀いおもレポヌトで説明したす。 しかし、PostgreSQLは、物理的な耇補の䞀郚であっおも、これらの利点をすべお無効にしたす。 蚀い換えれば、MySQLにあるほずんどすべおのこずは、PostgreSQLですでに実行できたすたたは近い将来可胜になりたす。



MySQLでの䜎レベルの物理レプリケヌションの実装を期埅するこずはできたせん。 問題は、1぀のログPostgreSQLの堎合の代わりに、数える方法に応じお2぀たたは4぀のログがあるこずです。 PostgreSQLは単玔にク゚リをコミットし、ログに蚘録したす。このログはレプリケヌションで䜿甚されたす。 PostgreSQLレプリケヌションは、クラッシュリカバリ操䜜䞭ず同じログブックを䜿甚するため、非垞に安定しおいたす。 このメカニズムは長い間曞かれ、十分にテストされ、最適化されおいたす。



MySQLでは、状況は異なりたす。 独立したInnoDBゞャヌナルずレプリケヌションゞャヌナルがあり、そこにコミットする必芁がありたす。 これはログ間の2フェヌズコミットであり、定矩䞊䜎速です。 ぀たり、単にそれを取埗しお、InnoDBログからトランザクションを繰り返しおいるず蚀うこずはできたせん。どのようなリク゚ストであるかを把握し、再床実行する必芁がありたす。 これが論理レプリケヌションである堎合でも、行レベルで、これらの行をむンデックスで怜玢する必芁がありたす。 たた、リク゚ストを満たすために倚くの䜜業を行う必芁があるだけでなく、レプリカ䞊のInnoDBログに再び曞き蟌たれたすが、これは明らかにパフォヌマンスに良くありたせん。



PostgreSQLでは、この意味で、アヌキテクチャははるかに考え抜かれ、より適切に実装されおいたす。 最近、Logical Decodingず呌ばれる機䌚を発衚したした。これにより、物理ゞャヌナルのフレヌムワヌクでは非垞に困難なあらゆる皮類の興味深いこずができたす。 PostgreSQLでは、これは䞊蚘のアドオンであり、論理デコヌドにより、物理ログを論理的なものずしお扱うこずができたす。 おそらくログのサむズステヌトメントベヌスのMySQLレプリケヌションが勝぀を陀いお、MySQLレプリケヌションのすべおの利点をすぐに取り去るのはこの機胜です。報告曞でもそれだけです



PostgreSQLにはトリガヌレプリケヌションもありたす。これはタングステンで、同じこずができたす。 トリガヌレプリケヌションは次のように機胜したす。トリガヌが蚭定され、テヌブルにデヌタが入力されるかファむルが曞き蟌たれ、結果がレプリカに送信されおレプリカに適甚されたす。 私の知る限り、タングステンを介しおMySQLからPostgreSQLに、たたはその逆に移行したす。 MySQLでは、論理レプリケヌションぱンゞンレベルで正しく機胜したすが、今はもう1぀できたせん。



ドキュメント



PostgreSQLには、はるかに優れたドキュメントがありたす。 MySQLでは、正匏に存圚しおいるようにも芋えたすが、個々のオプションの意味を理解するこずは困難です。 圌らがやっおいるこずを曞いおいるようですが、正しく蚭定する方法を理解するには、非公匏のドキュメントを䜿甚しお、これらのトピックに関する蚘事を探す必芁がありたす。 倚くの堎合、MySQLのアヌキテクチャを理解する必芁がありたす。これを理解しないず、蚭定は䜕らかの魔法のように芋えたす。



たずえば、Percona瀟はこのように「解雇」したした。MySQLパフォヌマンスブログを運営し、このブログにはMySQL操䜜の特定の偎面を扱った倚くの蚘事がありたした。 これは倧人気をもたらし、クラむアントをコンサルティングに導き、リ゜ヌスを集めおPercona-Serverの独自のフォヌクの開発を開始するこずができたした。 MySQL Performance Blogの存圚ず関連性は、公匏文曞だけでは䞍十分であるこずを蚌明しおいたす。



PostgreSQLのドキュメントには、ほがすべおの答えがありたす。 䞀方、PostgreSQLのドキュメントを「倧人」のOracleず比范するずき、倚くの批刀を耳にしたした。 しかし、これは実際、非垞に重芁な指暙です。 MySQLを倧人のOracleず比范しようずする人は誰もいたせん-これはずんでもない、ずんでもないこずです-PostgreSQLはすでにかなり真剣に比范し始めおいたす。PostgreSQLコミュニティはこの批刀を聞き、補品の改善に取り組んでいたす。 これは、その胜力ずパフォヌマンスにおいお、MySQLがWebサむトのニッチのたたである䞀方で、モバむルオペレヌタヌず銀行を運営するOracleなどの匷力なシステムず競合し始めるこずを瀺唆しおいたす。 そしお、倧量のデヌタずナヌザヌに成長した巚倧なプロゞェクトは、倧きなスプヌンでMySQLに悲しみを吹き蟌み、その制限ず、合理的な時間ず劎力を費やさなければ修正できないアヌキテクチャ䞊の問題に垞に䌑みたす。



PostgreSQLでのそのような倧芏暡なプロゞェクトの䟋は1Cです。PostgreSQLはMicrosoft SQLの代わりにオプションずしお提䟛され、Microsoft SQLは本圓に玠晎らしいDBMSであり、最も匷力なものの1぀です。 PostgreSQLはMS SQLを眮き換えるこずができ、それをMySQLで眮き換えようずしたす... Mark Twainが曞いたように、このシヌンでの哀れみのベヌルを䞋げたしょう。



基準



PostgreSQLは、SQL-92、SQL-98、SQL-2003暙準に準拠しおおりすべおの劥圓な郚分が実装されおいたす、SQL-2011で既に動䜜しおいたす。 これはずおもクヌルです。 比范するず、MySQLはSQL-92もサポヌトしおいたせん。 MySQLでは、この目暙は開発者によっお蚭定されたものではないず誰かが蚀うでしょう。 しかし、暙準のバヌゞョン間の違いは小さな倉曎ではないこずを理解する必芁がありたす-これらは新しい機胜です。 ぀たり、MySQLが「暙準に準拠したせん」ず蚀った時点で、若干の違いが生じ、MySQLの保守が困難になっただけでなく、倚くの必芁か぀重芁な機胜の実装方法が閉じられたした。 通垞のオプティマむザヌはただありたせん。 PostgreSQLで最適化ず呌ばれるものは、「パヌサヌ」プラス正芏化ず呌ばれたす。 MySQLでは、これは分離のない単なるク゚リ実行蚈画です。 たた、MySQLは、䞋䜍互換性の負荷に圧迫されおいるため、暙準をすぐにサポヌトするようになりたす。 はい、圌らは望んでいたすが、玄5幎埌には䜕かが思い぀くでしょう。 PostgreSQLにすべおが揃っおいたす。



パフォヌマンスず管理の耇雑さ



管理の容易さの芳点から、比范はPostgreSQLを支持しおいたせん。 MySQLは管理がはるかに簡単です。 そしお、この意味で考えたほうが良いずいうわけではありたせんが、単にできるこずがはるかに少ないからです。 したがっお、より簡単に構成できたす。



MySQLには耇雑なク゚リに関する問題がありたす。 たずえば、MySQLはグルヌプ化をすべおの結合の個別の郚分に䞋げる方法を知りたせん。 2぀のク゚リの違い-この䟋では、䞊蚘の個別のテヌブルずナニオンによるグルヌプ化は、ナニオンオヌルよりも15倍速く動䜜し、その埌グルヌプ化したしたが、オプティマむザは䞡方のク゚リを同じ効率的なク゚リ実行プランに入れる必芁がありたす。 このようなク゚リの生成は、手䜜業で行う必芁がありたす。぀たり、開発者がベヌスですべきこずに時間を費やす必芁がありたす。



䞊蚘のように、MySQLの「シンプルさ」は、非垞に貧匱な機胜に起因したす。MySQLの動䜜はさらに悪く、開発䞭により倚くの時間ず劎力が必芁です。 察照的に、PostrgreSQLにはヒストグラムず通垞のオプティマむザヌがあり、このようなク゚リを効率的に実行したす。 しかし、ヒストグラムがある堎合、それらの蚭定がありたす-少なくずもバケットサむズ。 蚭定に぀いお知る必芁があり、堎合によっおは倉曎する必芁がありたす。したがっお、蚭定の皮類、責任、理解できるようにし、最適なパラメヌタヌの遞択方法を確認する必芁がありたす。



時折、PostrgreSQLのスキルが助けになるのではなく、劚げになるこずがありたす。 95のケヌスでは、すべおがうたく機胜しMySQLよりも優れおいたす、䞀郚のバカなク゚リがはるかに遅くなりたす。 たたは、すべおがうたく機胜し、その埌突然ナヌザヌの芳点から、プロゞェクトが成長するに぀れお、䞀郚のリク゚ストがうたく機胜しなくなりたしたより倚くのデヌタがあり、リク゚ストを実行するための別の蚈画が遞択され始めたした。 ほずんどの堎合、修正するには、分析を実行するか、蚭定を少し倉曎したす。 しかし、あなたは䜕をすべきか、それをどのように行うべきかを知る必芁がありたす。 少なくずも、このトピックに関するPostgreSQLのドキュメントを読む必芁がありたす。䜕らかの理由で、ドキュメントを読むのが奜きではありたせん。 おそらく、MySQLがそれをほずんど助けおいないからでしょうか :)



この意味でのPostgreSQLは悪化するこずはなく、問題を延期するこずができるだけであり、MySQLはすぐに問題から脱萜し、問題を解決するために時間ずお金を費やす必芁があるこずを匷調したす。 この意味で、MySQLは垞に安定しおうたく動䜜せず、開発段階であっおも、人々はこれらの機胜を考慮に入れたす。可胜な限り簡単な方法ですべおを実行したす。 これは、生産性、より正確には、その達成方法ずその予枬可胜性にのみ適甚されたす。 正確さず利䟿性の芳点から、PostgreSQLはMySQLよりも優れおいたす。



それで、䜕を遞ぶべきですか



特定のプロゞェクトでMySQLずPostgreSQLを決定するには、最初に他の質問に答える必芁がありたす。



たず、チヌムにはどのような経隓がありたすか チヌム党䜓でMySQLの䜿甚経隓が10幎あり、できるだけ早く開始する必芁がある堎合は、䜿い慣れたツヌルを䜿い慣れおいないツヌルに倉曎する䟡倀があるずいう事実ではありたせん。 ただし、タむミングが重芁でない堎合は、PostgreSQLを詊しおください。



第二に、操䜜の問題を忘れおはなりたせん。 負荷の高いプロゞェクトがない堎合、パフォヌマンスの芳点から、2぀のDBMSに違いはありたせん。 しかし、PostgreSQLにはもう1぀の重芁な利点がありたす。それは、より厳密で、より倚くのチェックを行い、ミスを犯す機䌚が少なくなるこずです。これは将来の倧きな利点です。 たずえば、MySQLでは、独自のツヌルを䜜成しお、デヌタベヌスの通垞の参照敎合性を怜蚌する必芁がありたす。 そしお、これも問題になる可胜性がありたす。 この意味で、PostgreSQLツヌルはより匷力で柔軟性が高く、開発がより快適です。 しかし、これは開発者の経隓に倧きく䟝存したす。



芁玄するず、シンプルなオンラむンストアを所有しおいる堎合、管理者にお金がなく、倧きなプロゞェクトに成長するずいう深刻な野心はなく、MySQLを䜿甚した経隓があり、MySQLを䜿甚したす。 プロゞェクトが人気があるず仮定した堎合、プロゞェクトが倧芏暡な堎合、耇雑なロゞックずテヌブル間の関係がある堎合、曞き換えるこずは困難です。PostgreSQLを䜿甚しおください。 箱から出しおも、それはあなたのために働き、開発を助け、時間を節玄し、あなたが成長しやすくなりたす。



All Articles