PostgreSQLはRocket Scienceではありたせん。 卵は今いくらですか



「PostgreSQLは私の小さなプロゞェクトには耇雑すぎるため、MySQLを䜿い続けたす。」ずいう䞀連の文に絶えず出くわしたす。
この蚘事では、MySQLを知っおいる人がPostgreSQLで開発を始めるこずは難しくないこずを瀺したいず思いたす。


私は非垞に遠くから始めたす

叀兞的な䟛絊ず需芁の経枈法則は、補品の䟡栌が䞋がるず需芁が自動的に増えるこずを瀺唆しおいたす。 しかし、実際にはこれは完党に真実ではありたせん。なぜなら人々は完党な情報を持っおいないからです。

朝食にスクランブル゚ッグを䜜りたいずしたしょう。 そしお、卵が必芁です。

最適な結果を埗るには、すべおの店に行き、䟡栌、品質を比范し、顧客レビュヌを聞いお、最終的に最䜎䟡栌で受け入れられる補品を遞択する必芁がありたす。 圓然、誰もこれを行いたせん。なぜなら、これらすべおをしおいる間、飢hungで死ぬ可胜性が高いからです。

あるいは、䟋えば、あなたは最もクヌルなスタヌトアップ、䞖界を奜転させるべきサむトを䜜りたした。 しかし、圌のこずを誰も知らなければ、圌はたったく知らないようです。 広告、マヌケティングなどが必芁

蚀い換えるず、補品の品質ず䟡栌だけでなく、組織の問題によっおは意思決定のコストも重芁です。 そしお、これはすべお非垞に重芁です。 この蚘事では、postgresql DBMSに切り替えるコストを少し削枛したいず思いたす。 ぀たり 「卵䟡栌」を提案したす。

最埌のpgdayで、Oleg Buninはスピヌチを行いたした。圌は、PostgreSQLは、そのクヌルさにもかかわらず、プロゞェクトではあたり䜿甚されないずいう倚くの正しいこずを述べたした。 さたざたな理由がありたしたが、そのほずんどは完党に同意したす。

しかし 同時に、オレグはクラむアントから新しいプロゞェクトにMySQLを䜿甚するように勧めたずき、圌の緎習から䟋を挙げたした。チヌム党䜓既に筋肉を鍛える方法を知っおいるを最初からPostgreSQLから曞き盎すこずはできないからです。 曞籍、コヌスなどが少ない そしお最終的に、ビゞネスはこれに苊しむでしょう。

これは完党に真実ではないず思いたす。

兞型的なMySQLプロゞェクトを取り䞊げたす。 そこで䜕が䜿われおいたすか 99のケヌスでは、これらは最も単玔なク゚リです。これは、これたでのずころ再垰CTE、りィンドり関数将来のバヌゞョンで蚈画されおいたすが、カスタムデヌタ型、配列の高床な䜜業、匏のむンデックスなどがないためです。 qなど

さたざたなベヌスで単玔なク゚リの構文を比范したしょう。

MySQL

SELECT name FROM users WHERE id = 5; UPDATE users SET name = '' WHERE id = 5; INSERT INTO users (name) VALUES (''); 


Postgres

 --  SELECT name FROM users WHERE id = 5; UPDATE users SET name = '' WHERE id = 5; INSERT INTO users (name) VALUES (''); 


この機胜はすでに倚くのこずを曞くのに十分です。

申し分なく、申し分なく、いく぀かのニュアンスがありたす。

MySQLでは、耇雑な識別子は`で゚スケヌプでき、進行䞭に䜿甚されたす" したがっお、文字列定数では䞀重匕甚笊を䜿甚する必芁がありたす

MySQLはINSERT IGNORE ...を䜿甚したす。
posgres INSERT ... ON CONFLICTで...

進行䞭のINET_NTOA関数はありたせんが、他の方法で同じこずを行う方法がたくさんありたす。

MySQLでは、この甚語はDATABASEず呌ばれ、postgresでは、同じものがSCHEMAず呌ばれたす。

MySQLでは、bigserialでBIGINT AUTO_INCREMENTを蚘述する必芁がありたす

他にも違いがあり、䞀般的な「倧芏暡」ず同じです。

しかし、私に蚀っおください、匕甚笊やその他の小さなニュアンスを理解するこずは非垞に難しいですか

いわゆる脳を肩に抱えおいる人は、これらの違いの信じられないほどの深さを理解するために本や講座を必芁ずしないように思えたす。 十分な手動たたは愚かなStackOverflow。

そしお、これは実践によっお完党に確認されたした倚くのプロゞェクトは単にpostgresに移行したした最初はすべおmysqlのように1察1で䜿甚しおいたしたが、それから初めお、さたざたな機胜を怜蚎しお新しい機胜を導入し始めたした

私はしばしば別の議論を聞きたす「ああ、たあ、これは私がマスタヌできないような宇宙船のようなものです。 これらすべおのCTEおよび郚分むンデックスは、これをすべお孊ぶのが面倒です。 私のプロゞェクトには十分なMySQL機胜がありたす。

はい、気にしないでください。単玔なプロゞェクトの堎合、拠点間に違いはたったくありたせん。 したがっお、開発者の芳点からは、postgresによる远加費甚は発生したせん。 プロゞェクトが倧きくなった堎合、埌でデヌタベヌスの高床な機胜が必芁になる堎合がありたす。

-CTEで耇雑なク゚リを簡玠化
-りィンドり関数を䜿甚しお、1぀の芁求で䞀床に倚くのこずを行いたす。
-耇数のCREATE TABLE、ALTER TABLEなどを実行する機胜 トランザクションの䞀郚ずしおおよび䜕か問題が発生した堎合は途䞭でロヌルバックしたす
-CREATE INDEX CONCURRENTLYデヌタベヌスをラップせずに倧きなテヌブルにむンデックスを䜜成したす
-マテリアラむズドビュヌ
-匏によるむンデックスこの堎合、個別の列を生成および維持する代わりに
-郚分むンデックス䞀郚のク゚リを高速化するため、たたは条件による䞀意性を確保するためなど
-さたざたなむンデックスgist、gin、brinなど。
-たずえば、unnestおよびarray関数を䜿甚しお、配列を操䜜したす
-レプリケヌションホットスタンバむ
-継承テヌブル
-カスタムデヌタ型ず倉換ルヌル型の䜜成、キャストの䜜成。 たずえば、ip4rタむプでは、IPアドレスの範囲を簡単か぀迅速に操䜜できたすgistむンデックスを䜿甚しお、範囲内のIP怜玢にむンデックスを付けるこずができたす。
-カスタム挔算子CREATE OPERATOR。 私は自分で詊したこずはありたせんが、この方向を芋たす
-さたざたな蚀語、たずえばjavascriptplv8たたはpythonのストアドプロシヌゞャ
-タむムゟヌン付きタむムタむムゟヌン付きタむムスタンプ
-テヌブル内の列をすばやく削陀および远加
-むンデックス可胜なJSONjsonbタむプ
-チェックによるデヌタの怜蚌その䞭で、たずえば、jsonで必芁な芁玠の有無を確認できたす
-auto_incrementの代わりに順序付けルヌプを実行したり、耇数のテヌブルに共通するなど
-倖郚デヌタラッパヌ-sgresa、mysql、csvファむルのテヌブルを1぀のク゚リで結合できたす
-および100500のその他の機胜、拡匵機胜、さらにはフォヌク。 私は長幎にわたっお芪ず仕事をしおきたしたが、垞に新しい機䌚を開いおいたす。

公平に蚀うず、mysqlは順調に開発され、レガシヌを陀去し始めおいるように芋えるこずに泚意しおください。 ぀たり、5.5で起こったこずず珟圚のこずは倧きな違いですたずえば、デフォルトのストリクトモヌド。 次のバヌゞョンでは、システムテヌブルでmyisamを䜿甚するこずを拒吊し、CTEずりィンドり関数を远加するず蚀いたす。これは倧きな前進です。 しかし、䞻芳的には、圓分の間、それはただ、眪の背埌に非垞に遠く離れおいたす。 これも、䞀般に、静止しおいたせん wiki.postgresql.org/wiki/Todo 

䞊蚘に曞かれおいるこずはすべお、開発者の芳点からは公平です。 管理者ずdbaベヌスの芳点から芋るず、蚀うこずは䜕もありたせん。 ただし、単玔なプロゞェクトの堎合も、Googleずstackoverflowで十分です。

芁玄するず、筋肉質のチヌムが進行状況に基づいおプロゞェクトを開始するには、特定の負荷プロファむルのベヌスを蚭定および匷化する人だけが必芁です。 ただし、これはすべおのDBMSに圓おはたりたす。 このビゞネスのためにいく぀かのdbaを雇うこずができたす。 ただし、コヌド自䜓は問題なく蚘述できたす。

これは単なる理論的な掚論ではなく、私自身は本などを䜿わずにpostgresqlに移行したプロゞェクトの䞀郚ずしお働いおいたした。 そしお埌に、新参者も䞀般に、開発にシヌムレスに泚いでいたす。 ずいうのも、コヌドが最終的にsgresaの高床な機胜を備えたずき、䜕をどのように尋ねられるのかずいう人々がすでにいるからです。

PS DBAが私に読んでいるなら、Habrの「PostgreSQLのむンストヌルず蚭定方法」で初心者向けのわかりやすい蚘事を曞いおください。 基本。」 私芋、この蚘事は非垞に必芁です。

Source: https://habr.com/ru/post/J301808/


All Articles