sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLは世界最高のデータベースです

    タイトルはクリックベイトや誇張ではありません。私は、設計と実装の両方のおかげで、PostgreSQLが、金銭的な考慮の有無にかかわらず、現在利用可能なものよりも客観的かつ測定可能なほど優れたデータベースであることを証明するつもりです。

    いったいどうやってそのような高尚な声明を主張し正当化できるのでしょうか?読んで、優しいオタク。私はあなたの時間が無駄にならないことを約束します。

    透過的なセキュリティ

    PostgreSQLにはセキュリティメーリングリストがあります。 PostgreSQLプロジェクトは、他のすべての人が行うのと同時に、侵入ベクトルについて学習します。隠されているものはなく、見つかったものはすべて、商用ベンダーの頭を回転させる速度で処理されます。精査中のソフトウェアを提供している同じベンダーによって公開された短い欠陥リストにだまされないでください。

    これは、すべての既知の攻撃ベクトルが公開されるとすぐに処理されることを意味します。この種のセキュリティ対応は、商業市場では考えられません。商用ベンダーにとって、問題に対処できるまでの秘密は、修復に不可欠です。 PostgreSQLにはそのような安心感はありません。それはあなたにとって素晴らしいことです。

    マルチバージョン同時実行制御はあなたに適しています

    PostgreSQLは、高いINSERTおよびSELECTワークロードに最適な同時実行制御の方法を選択します。

    PostgreSQLの設計は非常に簡単で、追跡オーバーヘッドの制限を念頭に置いてください

    更新と削除。ほとんどの場合、データを尊重する場合は、PostgreSQLが提供するデータセキュリティを愛することを学ぶ必要があります。

    DDLはPostgreSQLを使用したトランザクションに参加します。移行は完全に機能するか、まったく機能しません(機能しない最悪の種類はほとんど機能しています)。テストハーネスは非常に簡単に作成できます。テストハーネスをリセットする必要がありますか?ロールバックするだけです。

    PostgreSQLは、シリアル化、読み取りコミット、繰り返し可能な読み取りなど、標準に準拠した形式のトランザクション分離をサポートしています。これらの方法は、完全なACID準拠を提供します。

    PostgreSQLはすべてを行います

    では、NoSQL、Riak、REACT、Redis、Mongoなどが必要ですか? PostgreSQLはそれをすべて行います。確かに、すべてのオリジナル製品のすべてのベルとホイッスルではありません。たとえば、PostgreSQLはそれらのいずれに対しても新しいシャードを作成しません。それはまだ手動のプロセスです。しかし、繰り返しになりますが、常にpg_partmanがあります。 。 。

    列データストアが必要ですか? hstoreはどうですか?スタッフを再訓練したくないですか?選択した言語をプラグインして、トラックを続けます。部分レプリケーションが必要ですか?ストリーミング論理レプリケーションはあなたにぴったりです。

    PostgreSQLにない機能、または提供する既知の拡張機能がない機能を考えるのは難しいでしょう。

    他のシステムからデータを抽出したいですか? PostgreSQLには、あらゆるデータベースの中で最も活気のあるフェデレーションオブジェクトのコレクションがあります。彼らはそれらを外部データラッパーと呼んでおり、ダクトテープとジップタイでPostgreSQLをワニに引っ掛けることができます。データのように扱ってください。

    地図に引っ掛ける

    PostGISコミュニティは間違いなくPostgreSQLコミュニティ自体よりも大きいかもしれません。 PostgreSQLのマッピング機能は、非常に高価な代替手段と比較しても、それ自体をクラスに入れます。

    PostGISプロジェクトは、拡張性の容易さと広範なデータ強化機能のために、PostgreSQLをプラットフォームとして選択しました。これらの機能は、他のプロジェクトで利用できるように直接公開されています。また、他のベンダー、商用またはオープンソースからの回答もありません。

    最終的には、何にでも接続できます。

    PostgreSQLは成長しており、オープンソースで先導しています

    PostgreSQLプロジェクトは、オープンソースソフトウェアで最も目立つ組織の1つです。巨大なコミュニティがあり、天文学的な速度で成長しているため、現在の欠陥は、他のベンダーが夢見ることしかできない時間枠でほぼ間違いなく打ち負かされます。

    追加のエンタープライズ品質の機能は文字通り毎日発表され、それらの機能を維持するスタッフは、すべての企業が採用を望んでいる天才のプールから自己選択され、周りを回るのに十分ではありません。

    PostgreSQLは永久に安定したソリューションを構築します

    PostgreSQLには、コアに組み込まれた論理レプリケーションがあります。これにより、バージョン間の移行が可能になります。もう一度お読みください。特定のハードウェアまたはソフトウェアのバージョンに縛られることはありません。ソリューションは無期限にアップグレードできます。

    また、PostgreSQLは、Linuxの超安定バージョンを含む多くのプラットフォームでサポートされています。通常の3〜5年のROIよりも長持ちするソリューションが必要ですか?ハードウェアをまったくアップグレードしなくても、PostgreSQLは永遠に存続します。そして、そのための料金は簡単に計算できます。 $0。

    宣言型は命令型よりも優れています

    データベース言語は一般的に宣言型です。つまり、選択した組み込み言語でクエリを記述し、表示したい結果を記述します。データベースはあなたの意図を解読し、適切な結果を提供しようとします。これは、すべての宣言型プログラミングモデルの基礎です。 PostgreSQLでは、これはSQL言語のキーワードへの関数のマッピングに帰着し、各宣言を正確に実装する方法についていくつかのアルゴリズムを選択する場合があります。

    命令型プログラミングモデルと宣言型プログラミングモデルについての古くからの議論では、宣言型プログラミングは単なる偽装の命令型プログラミングであると私は思います。データベースクエリ言語の各宣言型トークンは、最終的に、宣言を必須の用語で適用する1つまたは複数のアルゴリズムにマップされます。したがって、ヘンリエッタによって定義されたインピーダンスの不一致は、最終的には開発者の頭の中にあります。つまり、開発者がデータベース関数プログラマーとまったく同じように考える場合、不一致はありません。

    では、一方が他方の単なる呼び出し機能であるとすると、宣言型モデルは、最終的には必須モデルよりも優れているのでしょうか。よろしくお願いします。それが私のポイントにつながるからです。

    PostgreSQL開発者はあなたより賢いです。面白くて恥ずかしがり屋であるという意味ではありません。文字通り何千人もの貢献者がPostgreSQLプロジェクトに何百万もの貢献をしてきましたが、その多くは他の人の貢献の改善としてのものです。頭のてっぺんに考えたものが、すでに実装されているものよりも優れている可能性は非常に低いです。そして、あなたの考えがより良かったとしても、すべての人の利益のためにPostgreSQLプロジェクトに貢献する必要があります。これにより、他のすべての人の水準が上がります。

    では、PostgreSQLがこれほど素晴らしい理由は何でしょうか。企業を考慮しない世界的なマインドシェア。何千人もの開発者が、より良いアルゴリズムの選択を行うために何十万時間も働いています。そのため、ソフトウェアはリリースごとに改善されます。ほとんどの場合、特に何もする必要はありません。

    それは一般的なソフトウェアの性質ではないですか?はい、そうです。しかし、全世界があなたのプロジェクトに関与しているときほどではありません。 PostgreSQLは、オープンソースコミュニティで非常に重要な位置を占めています。商用ベンダーは、オープンソースプロジェクトがこのレベルで提供できる変化の速度に追いつくことができなくなります。オープンソース(特にPostgreSQL)への移行はそれを証明するためにここにあります。

    機能は継続的に導入されます。商用ベンダーが明確な利点として指摘できることはほとんどありません。その中には、SMPサポート、双方向レプリケーション、および外部ツールがあります。コミュニティが現在取り組んでいることを推測し、今後数年以内にリリースされる可能性が非常に高いですか?

    PostgreSQLを好きなように拡張する

    PostgreSQLには、補助ソフトウェアを作成する著者の活気に満ちたコミュニティがあります。これには、好きな言語をプラグインし、それを使用してPostgreSQLを役立つと思われる方法で拡張することが含まれます。あなたはたまたまperl文字列処理が好きですか?では、それを使用します。 Pythonマップのサポートはどうですか?確かに、Pythonをプラグインして、町に行ってください。 PostgreSQLバックエンドを使用してWebサービスを作成したいですか?それは素晴らしいことであり、PostgreSQLが役に立ちます。 JSON? Ok。 XML?あなたは賭けます。 PostgreSQLは、これらすべてを直接サポートしており、さらに多くの機能をサポートしています。それをうまく行う言語を思いつくことができたら、それをPostgreSQLに接続すれば、サーバー側でそれを使用できます。

    独自の関数、データ型、演算子、集計、ウィンドウ関数、またはその他のほとんどすべてを作成できます。気に入った機能が見つかりませんか?ソースコードから盗用してカスタマイズします。ライセンスがあるので、自由にそれを行うことができます。

    PostgreSQLには、プログラミングの極限に行かなくてもデータベースを拡張できるフック関数もいくつか用意されています。

    他の言語の機能を吸収するこの機能は、PostgreSQLに固有のものです。既存の標準化されたライブラリを使用して、任意の機能を提供できます。標準に準拠し、変更に対応し、PostgreSQLが稼働している間も更新することができ、すべて無料で行うことができます。

    大きくして広くする

    PostgreSQLには、提供されているハードウェアプラットフォームを最大限に活用するためのいくつかの機能があります。パーティショニング、並列実行、部分インデックス、テーブルスペース、キャッシング、および並列非ブロッキングメンテナンスルーチン(最近、PostgreSQLのほとんどすべてがCONCURRENTLYキーワードを発芽しています)。

    それだけでは不十分な場合は、物理ストリーミングレプリケーションにより、安価で大量の読み取りスタンバイが可能になります。シャーディング、memcache、キューイング、負荷分散、接続プールはすべてPostgreSQLで機能します。まだ十分ではありませんか?論理ストリーミングレプリケーションはどうですか?あなたは世界中のデータベースをジオシャーディングしたいと思いますか?さて、双方向レプリケーションへようこそ。

    そして、値札はまだ0ドルです。

    すべてのインデックスを作成する

    PostgreSQLは非常に多くのインデックスのリストをサポートしているため、それらすべての使用方法を理解するのは頭がおかしくなります。 GiST、SP-Gist、KNN Gist、GIN、BRIN、およびBtreeがすべて利用可能です。また、ブルームフィルターなど、拡張システムを介して得られるものは他にもあります。

    PostgreSQLは、関数駆動型インデックス、部分インデックス、カバーインデックス、および全文検索でこれらを使用できます。また、これらの拡張機能は相互に排他的ではありません。それらをすべて同時に使用できます。

    ロールイン、ロールアウト

    すでに述べたテクノロジーのいくつかは、PostgreSQLを素晴らしいデータ統合および配布プラットフォームにします。複数の形式のレプリケーションを複数の形式のフェデレーションと組み合わせると、ほぼすべての種類のデータシステムにプッシュテクノロジーとプルテクノロジーの両方が提供されます。

    これらを無限の構成で組み合わせて、データベースストレージソリューションをブリッジすることができます。 ETL/ELT処理パッケージを必要とせずにすべて。 PostgreSQLはそれを実行します。地球上で最速の信頼できる唯一の情報源データベースは、データをソースシステムからまったく移動しないことによってそれを実行します。これは、データが常に最新であり、応答時間を管理できることを意味します。

    ソースシステムの信頼性に耐えられない場合、またはクエリ側のパフォーマンスを少し向上させたい場合は、マテリアライズドビューを使用してデータを定期的にキャッシュすることもできます。マテリアライズドビューは、クエリ中に更新できます。

    ライセンスは広く公開されています

    PostgreSQLには、主にBSDライセンスに基づく独自のライセンスがあります。これにより、使用と配布の自由度がさらに高まります。

    ライセンスは、メインプロジェクトのすべてのコード、主要なコントリビューション拡張機能、クライアントライブラリ、接続マネージャー、および関連するほとんどのツールに適用されます。

    寛容性が高く、平易な英語で書かれており、購入することはできません。

    素晴らしいドキュメント

    PostgreSQLプロジェクトでは、コードを送信する開発者が提案のドキュメントを提供する必要があります。この提案は、いくつかの形式で利用できるようになる機能のドキュメントを作成するために使用されます。このドキュメントは、機能自体の評価や、将来の機能を開発するためのリファレンスとしても使用されます。

    まとめると、これはPostgreSQLがドキュメントに基づいていることを意味します。 Cでコーディングする方法、データベースがどのように機能するか、PostgreSQLプロジェクトを使用してプロジェクトを管理する方法を学んだPostgreSQLの開発者はたくさんいます。このドキュメントは他に類を見ません。

    テスト駆動開発

    PostgreSQLは広範囲にわたってテストされています。いいえ、それは十分に強く言っているわけではありません。 PostgreSQLは徹底的にテストされています。すべてのバグは、その存在を確認するためのテストで満たされ、コードはテストを満たすように記述されています。新しい機能は、最初にテスト(およびドキュメント)を作成することによって作成され、次に機能が表示されるまでコード化されます。

    これらのテストはリグレッションのためにビルドファームに統合されているため、PostgreSQLの将来のバージョンでバグが(再)発生することはありません。つまり、すべてのテスト(現在も最新)は、ビルドサイクルごとにPostgreSQLのすべてのバージョンで実行されます。これは多くのテストであり、PostgreSQLが利用可能な最も安定したデータベースであり続けることを保証します。

    PostgreSQLは、すべての回帰テストに合格した場合にのみリリースされます。これにより、「0個の既知のバグ」リリースが提供されます。

    国際化とローカリゼーション

    PostgreSQLの開発者は世界中から来ています。彼らは、大卒プロジェクトとしてPostgreSQLが開始されて以来、多くの母国語で作業を行ってきました。国際化とローカリゼーションは、PostgreSQLが商業的なグローバル市場を引き付け始めたため、ボルトオンではなく、標準的な手法としてPostgreSQLに組み込まれています。

    PostgreSQLは互換性の理由から国際化の一部をオペレーティングシステムに委任していますが、翻訳の多くはシステムに組み込まれており、シームレスな言語移行エクスペリエンスを提供します。

    クラウド操作

    PostgreSQLは、ansible、kubernetes、および複数のクラウドベンダーが提供する独自のツールを使用してクラウドアーキテクチャで動作します。アーキテクチャに合わせて選択できるネイティブクラウドの実装はいくつかあります。

    サーバーをペットではなく牛のように扱いたい場合は、PostgreSQLもクラウドでカバーしています。

    標準への準拠

    PostgreSQLは、プロジェクトの存続期間中、標準に焦点を合わせてきました。 PostgreSQLは大学の大学院プログラムで生まれたため、多くのSQL標準のリファレンス実装として使用されてきました。

    PostgreSQLはSQL/MedおよびANSISQLを実装しています。

    素晴らしいドキュメントによると、「PostgreSQLはSQL:2016の主要な機能のほとんどをサポートしています。 Coreに完全に準拠するために必要な179の必須機能のうち、PostgreSQLは少なくとも160に準拠しています。」これは、他のほとんどのデータベースエンジンよりも優れています。

    言語機能

    PostgreSQLは、共通テーブル式(CTE)、言語制御構造(if、for、caseなど)、構造化エラー処理、および成熟した手続き型言語に期待されるすべての機能を実装しています。

    もう確信していますか?

    それでも、ユーザーグループ、IRCチャネル、ソリューションを備えたWebサイト、ブログ記事、メンターの素晴らしいコミュニティについて話すことができました。私は、データベースがクロスプラットフォーム、クロスアーキテクチャ、およびクロスカルチャーである方法について哲学的にワックスをかけることができました。何時間ものプレゼンテーション、ビデオ、講義があります。

    または、ダウンロードして、想像よりも大きいかどうかを確認することもできます。とても嬉しい驚きだと思います。


    1. PL/SQLでのコールの並列化

    2. テーブルをロックせずに巨大なMySQL本番テーブルにインデックスを作成する

    3. 条件付きJOINステートメントSQLServer

    4. 2つの列の組み合わせに対する一意の制約?