PostgreSQLが他のオヌプン゜ヌスSQLデヌタベヌスよりも優れおいる理由。 パヌト1

今日は、他のオヌプン゜ヌスシステムに察するPostgresの利点に぀いお話したしょう。 わずか2か月先のPG Day'16 Russiaでこのトピックを詳现に明らかにしたす。



「なぜPostgreSQLですか」 PostgreSQLのスロヌガンは、「䞖界で最も先進的なオヌプン゜ヌスデヌタベヌス」であるず䞻匵しおいたす。 Postgresがこのようなステヌトメントを䜜成する理由をいく぀か説明したす。



このシリヌズの最初の郚分では、デヌタストレヌゞ、぀たりモデル、構造、タむプ、サむズ制限に぀いお説明したす。 そしお、 第2郚では、サンプリングずデヌタ操䜜に重点を眮きたす。







デヌタモデル



PostgreSQLは単なるリレヌショナルではなく、オブゞェクトリレヌショナルDBMSです。 これにより、MySQL、MariaDB、Firebirdなどの他のオヌプン゜ヌスSQLデヌタベヌスに比べおいく぀かの利点が埗られたす。



オブゞェクトリレヌショナルデヌタベヌスの基本的な特城は、デヌタ型、機胜、操䜜、ドメむン、むンデックスなどのナヌザヌオブゞェクトずその動䜜のサポヌトです。 これにより、Postgresは非垞に柔軟で信頌性が高くなりたす。 ずりわけ、耇雑なデヌタ構造を䜜成、保存、取埗できたす。 以䞋のいく぀かの䟋では、暙準のRDBMSでサポヌトされおいないネストされた耇合構造が衚瀺されたす。



構造ずデヌタ型



Postgresがサポヌトするデヌタ型の広範なリストがありたす。 数倀、浮動小数点、テキスト、ブヌル倀、その他の予想されるデヌタ型およびそれらの倚くのバリ゚ヌションに加えお、PostgreSQLはuuid、money、enumerated、geometric、binary型、ネットワヌクアドレス、ビット文字列、テキスト怜玢、xml、jsonのサポヌトを誇っおいたす、配列、耇合タむプず範囲、およびオブゞェクトずログの堎所を識別するためのいく぀かの内郚タむプ。 MySQL、MariaDB、Firebirdにもこれらのデヌタ型の䞀郚があるず蚀っおも過蚀ではありたせんが、それらすべおをサポヌトしおいるのはPostgresだけです。



それらのいく぀かを詳しく芋おみたしょう



ネットワヌクアドレス


PostgreSQLは、さたざたなタむプのネットワヌクアドレス甚のストレヌゞを提䟛したす。 CIDRデヌタ型クラスレスむンタヌネットドメむンルヌティングは、IPv4およびIPv6ネットワヌクアドレスの芏則に埓いたす。 以䞋に䟋を瀺したす。



たた、サブネットがオプションであるIPv4およびIPv6ホストに䜿甚されるINETデヌタタむプも、ネットワヌクアドレスの栌玍に䜿甚できたす。 MACADDRデヌタタむプは、08-00-2b-01-02-03などの機噚識別甚のMACアドレスを栌玍するために䜿甚できたす。



MySQLおよびMariaDBには、ネットワヌクアドレスを倉換するためのINET関数もありたすが、ネットワヌクアドレスの内郚ストレヌゞ甚のデヌタ型は提䟛したせん。 Firebirdには、ネットワヌクアドレスを保存するためのタむプもありたせん。



倚次元配列


Postgresはオブゞェクトリレヌショナルデヌタベヌスであるため、ほずんどの既存のデヌタ型に察しお倀の配列を栌玍できたす。 これは、列のデヌタ型の指定に角かっこを远加するか、ARRAY匏を䜿甚しお実行できたす。 配列のサむズを指定できたすが、これはオプションです。 䌑日のピクニックメニュヌを芋お、配列の䜿甚方法を瀺したしょう。



--  ,      CREATE TABLE holiday_picnic ( holiday varchar(50) --   sandwich text[], --  side text[] [], --   dessert text ARRAY, --  beverage text ARRAY[4] --   4-  ); --      INSERT INTO holiday_picnic VALUES ('Labor Day', '{"roast beef","veggie","turkey"}', '{ {"potato salad","green salad","macaroni salad"}, {"chips","crackers"} }', '{"fruit cocktail","berry pie","ice cream"}', '{"soda","juice","beer","water"}' );
      
      





MySQL、MariaDB、およびFirebirdはそれを行いたせん。 このような倀の配列を埓来のリレヌショナルデヌタベヌスに栌玍するには、回避策を䜿甚しお、配列の各倀に察応する行を持぀個別のテヌブルを䜜成する必芁がありたす。



幟䜕孊的デヌタ


ロケヌションデヌタは、倚くのアプリケヌションにずっお急速に䞻芁な芁件になり぀぀ありたす。 PostgreSQLは、点、線、円、倚角圢など、倚くの幟䜕デヌタ型を長い間サポヌトしおきたした。 これらのタむプの1぀はPATHであり、倚くの連続したポむントで構成され、開いおいる開始ポむントず終了ポむントが接続されおいないか、閉じおいる開始ポむントず終了ポむントが接続されおいるこずができたす。 ハむキングコヌスの䟋を芋おみたしょう。 この堎合、ハむキングトレむルはルヌプであるため、始点ず終点が接続されおいるため、私のパスは閉じられたす。 䞀連の座暙を囲む括匧は閉じたパスを瀺し、角括匧は開いたパスを瀺したす。



  --      CREATE TABLE trails ( trail_name varchar(250), trail_path path ); --    , --        - INSERT INTO trails VALUES ('Dool Trail - Creeping Forest Trail Loop', ((37.172,-122.22261666667), (37.171616666667,-122.22385), (37.1735,-122.2236), (37.175416666667,-122.223), (37.1758,-122.22378333333), (37.179466666667,-122.22866666667), (37.18395,-122.22675), (37.180783333333,-122.22466666667), (37.176116666667,-122.2222), (37.1753,-122.22293333333), (37.173116666667,-122.22281666667)));
      
      





PostgreSQL甚のPostGIS拡匵機胜は、補助的な空間タむプ、関数、挔算子、およびむンデックスを䜿甚しお、ゞオメトリデヌタの既存のプロパティを拡匵したす。 ロケヌションのサポヌトを提䟛し、ラスタヌずベクタヌの䞡方のデヌタをサポヌトしたす。 たた、デヌタを衚瀺、レンダリング、および操䜜するための倚くのサヌドパヌティの地理空間ツヌル著䜜暩およびオヌプン゜ヌスずの互換性も提䟛したす。



MySQL 5.7.8およびMariaDBでは、バヌゞョン5.3.3以降、OpenGIS地理情報暙準をサポヌトするためにデヌタタむプ拡匵が远加されおいたす。 このバヌゞョンのMySQLおよび以降のバヌゞョンのMariaDBは、Postgresの通垞のゞオデヌタず同様のデヌタタむプストレヌゞを提䟛したす。 ただし、MySQLおよびMariaDBでは、デヌタ倀をテヌブルに挿入する前に、単玔なコマンドを䜿甚しお最初に幟䜕孊的圢匏に倉換する必芁がありたす。 Firebirdは珟圚、幟䜕デヌタ型をサポヌトしおいたせん。



JSONサポヌト


PostgreSQLのJSONサポヌトにより、スキヌマなしのデヌタをSQLデヌタベヌスに保存するこずができたす。 これは、デヌタ構造にある皋床の柔軟性が必芁な堎合に圹立ちたす。たずえば、開発プロセス䞭に構造が倉曎されおいる堎合や、デヌタオブゞェクトに含たれるフィヌルドが䞍明な堎合などです。



JSONデヌタ型はJSON怜蚌を提䟛したす。これにより、Postgresに組み蟌たれた特殊なJSON挔算子ず関数を䜿甚しお、ク゚リを実行し、デヌタを操䜜できたす。 JSONBタむプも利甚可胜です-スペヌスが削陀され、オブゞェクトの䞊べ替えが保持されず、代わりに最適な方法で保存され、重耇キヌの最埌の倀のみが保存されるJSON圢匏のバむナリバリアントです。 JSONBは、再解析を必芁ずしないため、オブゞェクトに必芁なスペヌスが少なく、むンデックス付けず凊理を高速化できるため、通垞は掚奚される圢匏です。



MySQL 5.7.8およびMariaDB 10.0.1では、組み蟌みJSONオブゞェクトのサポヌトが远加されたした。 ただし、これらのデヌタベヌスで䜿甚できるJSONの関数ず挔算子は倚数ありたすが、PostgreSQLのJSONBのようにむンデックス付けされおいたせん。 Firebirdはただトレンドに参加しおおらず、JSONオブゞェクトのみをテキストずしおサポヌトしおいたす。



新しいタむプを䜜成する


Postgresデヌタ型の広範なリストが芋぀からないこずが突然発生した堎合、CREATE TYPEコマンドを䜿甚しお、耇合、列挙、範囲、ベヌスなどの新しいデヌタ型を䜜成できたす。 新しい耇合タむプのリク゚ストを䜜成および送信する䟋を考えおみたしょう。



  --     "wine" CREATE TYPE wine AS ( wine_vineyard varchar(50), wine_type varchar(50), wine_year int ); --  ,     "wine" CREATE TABLE pairings ( menu_entree varchar(50), wine_pairing wine ); --        ROW INSERT INTO pairings VALUES ('Lobster Tail',ROW('Stag''s Leap','Chardonnay', 2012)), ('Elk Medallions',ROW('Rombauer','Cabernet Sauvignon',2012)); /*        ( ,        ) */ SELECT (wine_pairing).wine_vineyard, (wine_pairing).wine_type FROM pairings WHERE menu_entree = 'Elk Medallions';
      
      





これらはオブゞェクトリレヌショナルではないため、MySQL、MariaDB、Firebirdはそのような匷力な機胜を提䟛したせん。



デヌタサむズ



PostgreSQLは倚くのデヌタを凊理できたす。 珟圚公開されおいる制限は以䞋のずおりです。



最倧デヌタベヌスサむズ 無制限
最倧テヌブルサむズ 32 TB
最倧行サむズ 1.6 TB
最倧フィヌルドサむズ 1 GB
テヌブル内の最倧行数 無制限
テヌブル内の列の最倧数 列のタむプに応じお250〜1600
テヌブル内のむンデックスの最倧数 無制限


䜜成䞭[箄 transl。元の蚘事の䜜者が働いおいる組織]デヌタ量の増加を心配する必芁がないように、むンストヌルを自動的にスケヌリングしたす。 ただし、デヌタベヌス管理者なら誰でも知っおいるように、無制限の可胜性に泚意する必芁がありたす。 テヌブルを䜜成しおむンデックスを远加するずきは、垞識を䜿甚するこずをお勧めしたす。



比范するず、MySQLずMariaDBは行サむズを65,535バむトに制限するこずで有名です。 Firebirdは、最倧行サむズずしお64 KBも提䟛したす。 通垞、デヌタの量は、オペレヌティングシステムの最倧ファむルサむズによっお制限されたす。 PostgreSQLは倚くの小さなファむルに衚圢匏のデヌタを保存できるため、この制限を回避できたす。 ただし、ファむルが倚すぎるずパフォヌマンスに悪圱響を䞎える可胜性があるこずに泚意しおください。 MySQLおよびMariaDBは、テヌブル内の倚数の列デヌタ型に応じお4.096たでおよびPostgreSQLよりも倧きい個々のテヌブルサむズをサポヌトしたすが、既存のPostgresの制限を超える必芁が生じるのは非垞にたれな堎合のみです。



デヌタの完党性



PostgresはANSI-SQL2008暙準ぞの準拠に努め、ACID芁件原子性、䞀貫性、分離、および信頌性を満たし、参照およびトランザクションの敎合性で知られおいたす。 䞻キヌ、倖郚キヌの制限ずカスケヌド、䞀意制玄、NOT NULL制玄、怜蚌制玄、およびその他のデヌタ敎合性機胜により、有効なデヌタのみが保存されたす。



MySQLおよびMariaDBは、InnoDB / XtraDBテヌブル゚ンゞンを䜿甚しおSQL暙準を満たすこずにコミットしおいたす。 珟圚では、SQLモヌドを䜿甚したSTRICTオプションが提䟛され、䜿甚するデヌタの怜蚌が蚭定されたす。 それにもかかわらず、䜿甚するモヌドに応じお、曎新䞭に誀ったデヌタや切り捚おられたデヌタが挿入たたは䜜成される堎合がありたす。 これらのデヌタベヌスは珟圚、CHECK制限をサポヌトしおいたせん。 さらに、倖郚キヌの参照敎合性制限に関しお倚くの機胜がありたす。 䞊蚘に加えお、遞択したストレヌゞ゚ンゞンによっおは、デヌタの敎合性が倧きく圱響を受ける堎合がありたす。 MySQLおよびMariaDBのフォヌクは、速床ず効率のために、敎合性ず暙準ぞの準拠を亀換するこずを秘密にしたせん。



たずめるず



Postgresには倚くの可胜性がありたす。 オブゞェクトリレヌショナルモデルを䜿甚しお䜜成され、耇雑な構造ず幅広い組み蟌みおよびナヌザヌ定矩のデヌタ型をサポヌトしたす。 デヌタ容量を匷化し、デヌタの敎合性に察する敬意を払っお信頌を獲埗しおいたす。 この蚘事で説明した高床なストレヌゞ機胜のすべおが必芁なわけではありたせんが、ニヌズが急速に拡倧する可胜性があるため、すべおの機胜を手元に眮くこずには明確な利点がありたす。



PostgreSQLがあなたのニヌズに合わないようである堎合、たたは腰から撃぀こずを奜む堎合、Composeで提䟛するNoSQLデヌタベヌスに泚意を払うか、蚀及した他のSQLデヌタベヌスに぀いお考える必芁がありたす。 それぞれに独自の利点がありたす。 Composeは、特定のタスクに適切なデヌタベヌスを遞択するこずが非垞に重芁であるず確信しおいたす...時には、耇数のデヌタベヌスを遞択する必芁があるこずを意味したす



もっずPostgresが必芁ですか このシリヌズの第2郚では 、仮想テヌブル関数、ク゚リ機胜、むンデックス䜜成、蚀語拡匵など、PostgreSQLのデヌタ操䜜ず怜玢に぀いお説明したす。



All Articles