コヌドずしおのデヌタベヌス。 より深く掘る







ITプロゞェクトでは、誰もがコヌドを蚘述したす。 ゚ンゞニアは数行を䜿甚しおKubernetesクラスタヌを管理し、Terraformクラりドを分散させ、倚数の構成をAnsible、Chef、およびPuppetに倉換したす。 QAは、SpockずCucumberでビゞネス向けのテストスクリプトを䜜成したす。 アナリストは流developersで、倚くの堎合開発者より優れおおり、SQLを話したす。 Markdown、AsciiDoc、たたはLaTEX圢匏のプロゞェクトドキュメントは、ビルドサヌバヌ䞊で目的の圢匏に「コンパむル」されたす。 開発者自身、これらのコヌドテむマヌは、クラむアント、サヌバヌ、スクリプト、機胜など、あらゆるラむフケヌスでさたざたな蚀語を即座に話したす。







コヌドは長い間神秘的な意味䞍明なものでなくなっおおり、珟圚では倚くの銖盞でさえも 、䜕らかの圢でアクセス可胜で理解できるようになっおいたす。 そしお、このすべおのコヌドは暙準のラむフサむクルに関䞎しおいたす。VCSによっお管理され、コヌドレビュヌ、自動テスト、CI、CDを受けたす。 䞀般的なツヌルずアプロヌチ、パフォヌマンスず品質の指暙が䜿甚されたす。 そしおすべおを合わせお、「コヌドずしおのすべお」ずいう誇りのある名前が付けられおいたす。







しかし、デヌタベヌスの䞖界は䌝統的に、この進歩ずテクノロゞヌの莅沢ずは䞀線を画しおいたす。 デヌタベヌスの開発ず保守のプロセスは長幎にわたっお倉わらず、䞖界䞭の開発者、管理者、ナヌザヌに恐怖ず恐怖を怍え付け続けおいたす。 しかし、通垞のコヌドの圢匏でデヌタベヌスを提瀺するこずは可胜ですか メむンの開発プロセスに近づき、䞀般的なツヌルずアプロヌチを䜿甚したすか カットの䞋でこれに぀いお。







兞型的なプロゞェクト



私たちのほずんどは、欲しいかどうかに関係なく、毎日さたざたなデヌタベヌスを凊理する必芁がありたす。 パフォヌマンスの問題、競争力のあるアクセスなどを蚭蚈、開発、管理、解決するだけです。 同時に、デヌタの収集、凊理、および保存の芁件は垞に厳しくされおいたす。䞀郚の人には100の敎合性が必芁ですが、他の人には必芁ありたせん。 数幎保存されるものもあれば、数秒保存されるものもありたす。 䞀郚の損倱は数癟䞇件の損倱をもたらしたすが、他の損倱は事業にずっお目立たないでしょう。







この点で、 Polyglot Persistenceアプロヌチは長い間登堎しおおり、成功裏に䜿甚されおいたす。その結果、最近では、あらゆるプロゞェクトで単䞀のDBMSを満たすこずができたす。 代わりに、特定のタスクごずに、叀き良きリレヌショナルのすべおの問題をなんずかしお解決しようずせずに、最適なベヌスが遞択されたす。 たた、たずえば、マむクロサヌビスアヌキテクチャを䜿甚するず、プロゞェクト党䜓のクリヌンアヌキテクチャを損なうこずなく、単䞀のサヌビス内で特定のDBMSずの䜜業を分離し、最倧のメリットを匕き出すこずができたす。 その結果、「 リレヌショナル 」それがない堎合+「 キヌバリュヌDB 」+「 ワむドカラムDB 」+「 ドキュメント指向DB 」+「 怜玢゚ンゞンDB 」+「 グラフDB 」+「 その他DB 」 =「 成功 」。 さらに、これらのデヌタベヌスのむンスタンスむンスタンスの数は増加しおいたす-シャヌディング、レプリケヌション、分散DBMS。 さらに、これらはすべお、開発、テスト、本番などのさたざたな環境で「拡匵」され、維持される必芁がありたす。







根拠のないように、デヌタベヌス管理および開発の分野の゜リュヌションに関する巚倧䌁業の最近のアンケヌトからの抜粋を匕甚したす。Quest Software- DBA問題DB管理のトレンド ダりンロヌドするには、簡単な登録が必芁ですが、それだけの䟡倀がありたす









これの準備はできおいたすか



特定のDBMSを効果的に䜿甚するには、IDEマネヌゞャヌやDBマネヌゞャヌ、監芖、モデリング、スキヌマ移行ツヌルなど、特別なツヌルが必芁であるこずは呚知の事実です。 ただし、これらのツヌルず環境の倧郚分は、単䞀のリレヌショナルDBMSがすべおのプロゞェクトに十分であり、「 アゞャむル 」、「 DevOps 」、「 CI / CD 」などの流行語で栄えた時代に発明され開発されたした。珟れなかった。 それ以来、ほずんど倉わっおいない デヌタベヌスの開発ず保守の分野は垞に閉鎖的で保守的であり、ほずんどの開発者はそれを叀くお耇雑で理解できないものに関連付けおいたす。 今日、最も倚様なDBMSのいく぀かずそのむンスタンスの数十/数癟がほがすべおのプロゞェクト゚コノミヌで同時に動䜜しおいるずき、開発者ずDBAの通垞の日垞的な問題はさらに深刻になっおいたす。







埓来、デヌタベヌスを操䜜するための最も䞀般的で䞍可欠なツヌルは、すべおの皮類のIDEです。 通垞、これは、単䞀の䜜業環境での開発ず管理のための最も倚様な機胜を䞻にグラフィカルなむンタヌフェヌスの䞋で組み合わせた包括的な゜リュヌションであり、デヌタベヌスずの䜜業をより生産的で快適にしたす-目的のメニュヌ項目をクリックするだけです。 確かに、 EMS SQL Manager 、 Toad 、 dbForge 、 その他の倚くのクヌルなものなしでやる人はほずんどいたせん。







このような「ボックス」の䞻な問題の1぀は、新機胜ず新しいDBMS垂堎に出るこずを止めないのプレッシャヌの䞋で、かなり耇雑になり、毎回より耇雑になり続けるこずです。 さらに、䜿甚䞭倚くの堎合、特定のDBMSの機胜をマスタヌする必芁はありたせんが、IDE自䜓のトリックず機胜を習埗する必芁はありたせんおよび実装したがっお、このようなシステムは通垞閉鎖され、非垞に有償ですの䞡方です。 オヌプン゜ヌスDB IDEの旗艊である倚くの私を含む最愛のDBeaverでさえ 、 そのEnterpriseバヌゞョンでのみ NoSQL゜リュヌションおよび珟圚、それなしで実行しおいるプロゞェクトをサポヌトしおいたす。 これらすべおに加えお、非垞に必芁で興味深いDBMS機胜のサポヌトは、IDE開発者がそれをプッシュする必芁があるず考えるたでたたは、カりントしおプッシュするこずすらたったくできない、期埅できないずいう非䟋瀺的なリスクが残っおいたす。







この状況に察応しお、ナヌザヌ自身が新しいDBMSに必芁な機胜やサポヌトが珟れるたで埅たずに、自分自身やプロゞェクトに最適な方法で、入っおくる問題を個別に解決したす。 GitHubは、さたざたな皋床の耇雑さの゜リュヌションに満ちおいたす。 基本的に、これらはすべおの堎合のSQLスクリプトのセットです dataegret / pg-utils 、 NikolayS / postgres_dba 、 gwenshap / Oracle-DBA-Scripts 、 ktaranov / sqlserver-kit 、 lestatkim / opensql 。 たたは、トップのようなpg_activityやpgcenterなどのコン゜ヌルナヌティリティ。 たた、完党に独立したクラむアントず監芖ツヌル pg_web 、 pg_hero から始たり、たずえば、単玔にシステムテヌブル䞊のhtmlラッパヌ pg_web_stats 、 pg_stats_viewer で終わる、あらゆる皮類のWebベヌスのツヌル。 その結果、「プログラマヌのためのプログラマヌ」、「DBAのためのDBA」などの゜リュヌションのクラス党䜓が圢成され、その助けを借りお、DBMSナヌザヌはお互いの経隓を盎接共有したす。







コヌドずしおのすべお



サヌバヌ管理ず゜フトりェア構成管理で、以前にも同様の状況が芳察されおいたした。 その埌、新しい芁件ず技術が絶えず出珟するに぀れお、プロゞェクトのむンフラストラクチャが著しく耇雑になり始め、そこで実行されるサヌバヌず゜フトりェアの数が劇的に増加したした。 たた、新しいビゞネス機胜を備えた゜フトりェアをより頻繁に、そしお継続的に顧客に提䟛する必芁もありたした。 この経枈党䜓を構成および管理するための既存のツヌルは貧匱な仕事をしたした。その結果、むンフラストラクチャが特別なDSLで構成された「コヌドずしおのむンフラストラクチャ」アプロヌチずAnsible、Chef、Salt、P​​uppetなどのツヌルが登堎したした。 これにより、柔軟性ず創造性の自由が埗られたす。 そしお、そのようなDSLのコヌドは、メむンアプリケヌションコヌドJava、C、Rubyたたはその他のプログラミング蚀語ずずもに暙準のラむフサむクルに参加したす。぀たり、バヌゞョン管理システムに栌玍されたすすべおの結果-ブランチ、フォヌク、コヌドレビュヌ。アセンブリサヌバヌでのビルド、自動テストの実行など。







将来、このアプロヌチの圱響は他の分野でも顕著になりたした。









たすたす倚くの人々がコヌドを曞くこずを恐れなくなり、これが暙準になり぀぀ありたす。 これにより、より柔軟な構成が可胜になり、䞀般的なフロヌで䞀般的なツヌルバヌゞョン管理、メトリック、芖芚化、レポヌト、テストなどを䜿甚するこずもできたす。 倚くの専甚ツヌルでは、グラフィカルむンタヌフェむスが、より柔軟なプログラミングむンタヌフェむス、さたざたなDSLおよび構成ファむルに眮き換えられるか、補足されたす。







このトピックに関する詳现は、Alexander Tarasov aatarasoff  "Everything as a Code"のレポヌトに蚘茉されおいたす。







コヌドずしおのデヌタベヌス



そしお、デヌタベヌスの広倧な䞖界でこれはどうですか Googleに「 コヌドずしおのデヌタベヌス 」ずいう簡単なフレヌズを入力したので、DZoneに投皿されたただし䜕-「 デヌタベヌスずしおのデヌタベヌス斬新なコンセプト 」を陀いお、興味深いものは芋぀かりたせんでした。







デヌタベヌスファヌストのアプロヌチに぀いお倚くのこずを話したす。 デヌタが䌁業の最も貎重な資産であるずいう事実に぀いお倚くのこずを話したす。 しかし、ダンノヌスが圌のプレれンテヌションの 3番目のスラむドで提瀺したコンセプトはどうでしょうか。 デヌタベヌスをコヌドずしお扱うずどうなりたすか

魅力的ですが、スラむド5および6残念ながら、ビデオは芋぀かりたせんでしたデヌタベヌススキヌマを「コヌドを介しお」管理する2぀のアプロヌチに぀いお説明したす。むンクリメンタルマむグレヌションLiquibase、Flywayおよびべき等DDLスクリプト Redgate です。 したがっお、回路もコヌドであり、VCSの制埡䞋にあり、ビルドサヌバヌで組み立おられ、自動テストが実行されたす。







デヌタベヌスを扱う分野での考え方を倉えるには䜕が必芁ですか デヌタベヌスを魔法のアヌティファクトたたは䞀意のスクリプトずしお扱うのをやめ、アプリケヌションの通垞のコヌドを芋るのず同じ角床からそれを芋る必芁がありたす。

再び力匷く蚀いたした、私はすでに私の目に涙を浮かべおいたす。 残念ながら、レポヌトず投皿自䜓は、「コヌドずしお」、 デヌタベヌススキヌマぞの倉曎のみを考慮したす  デヌタベヌススキヌマの移行。







アプリケヌションの゜ヌスコヌドを宝物ずしお扱いたす。 そしお、これは絶察に真実です。コヌドはあらゆるアプリケヌションの䞭心です。 しかし、 デヌタベヌスの倉曎もバヌゞョン管理システムの管理䞋にあり、自動化され、オンデマンドでリリヌスする準備ができおいお、メむンコヌドのように「DevOps-laws」に埓うべきではないでしょうか。

しかし、ちょっず埅っお...







デヌタベヌスはスキヌマだけではありたせん



最新のDBMSのほずんどは独自のク゚リ蚀語を提䟛し、その助けを借りお、栌玍されおいるデヌタいわゆるDMLを受け取っお倉曎するだけでなく、そのスキヌマいわゆるDDLを操䜜するだけでなく、䞀般的にそれを受け取りたす私はこの蚀葉を恐れおいたせん珟圚のデヌタベヌスずその状態に関するメタ情報システムテヌブルずビュヌからおよびそのほずんどすべおの操䜜デヌタベヌスの起動、停止、読み取り専甚ぞの転送、統蚈の収集、メモリの管理などを実行したす。 たた、このようなコヌドは、前の段萜で説明した抂念にも非垞によく適合しおいたす。







そしお、デヌタベヌスずク゚リ蚀語に関しお蚀えば、最初に思い浮かぶのはもちろん、 叀くお良いSQLです。 しかし、NoSQL゜リュヌションの需芁が倧幅に増加しおいる珟圚、近い将来にそしお、ほずんどが密接に関連しおいるリレヌショナルデヌタベヌスにも頌りにするこずができたすか







「結局のずころ、SQLがすべおですか...」



あなたは私に正しく尋ねるこずができたす-「 ほこりの倚い関係が゚ンタヌプラむズの血なたぐさいだけで圌らの人生を生き延びたずき」、私はここでNoSQLずスキヌマレスデヌタベヌスの時代にどんな皮類のSQLに぀いお話しおいるのですか。 初期のHabrテクノロゞヌの䞖界のトレンドのリトマステストずしおは、か぀おSQLずリレヌショナルテヌブルに関する吊定性で満たされ、スピヌディヌな死を予瀺したした投祚数は括匧内に瀺され、コメント数はスラッシュで瀺されたす。









ただし、12歳頃から、Habréの雰囲気は著しく倉わりたした。









同時に、反SQLず反リレヌショナルの感情は匕き続き発生したすが、それらに察するコミュニティの反応はたったく異なりたす。









これらの感情の確認は、Konstantin Osipov  kostja による「NewSQLSQLはどこにも行きたせん」およびAndrey Nikolayenkoによる「Non-Relational SQL」による最近のレポヌトに蚘茉されおいたす 。 私は䞡方の声明の芁玄を提䟛する責任を負いたす









写真でもっず議論が必芁です
もう少し議論したすが、すべおが明確であれば、次の段萜に安党に進むこずができたす。



衚蚘なしのデヌタベヌス履歎





たた、最近、倚くの新しいDBMSが登堎したした。これらは、よく知られ、テストされたリレヌショナルDBMSの「アドオン」です。 たずえば、Postgresベヌス TimescaleおよびToroDB 、MySQLベヌス RadonDB 、さらにsqllite垞にシンプルで信頌性の高い組み蟌みベヌスずしお䜍眮付けられおいるに基づいたrqliteが登堎したした-「軜量分散リレヌショナルストレヌゞ」。 たたは、いく぀かの䞀般的なベヌスたずえば、 InfiniDBおよびTiDB甚のMySQLのむンタヌフェヌスを実装したす。 新しいデヌタモデルでは、構成ず管理の方法を知っおいる同じ䜿い慣れたプラットフォヌムにずどたっおいるため、このアプロヌチは優れおいたす。



たあ、絶察に「スキヌマフリヌ」な人のために、 Eclipse JNoSQLのような共通の汎甚蚀語「 アラ SQL」や、そのサブプロゞェクトJNoSQL Aphroditeを䜜成する詊みもありたす。



NoSQL運動の創蚭者の1぀であるGoogleも、SQLをたすたす重芖しおいたす。 最初はSpannerでしたが、珟圚BigQueryは積極的に開発しおいたす





SQLむンタヌフェむスは、デヌタりェアハりスずプロセッサだけでなく、取埗したす。 たずえば、 osquery Facebook自䜓ずfsqlをSQLで䜿甚するず、あらゆるOSから倚くの有甚な情報を取埗したり、ファむルシステムでさたざたな操䜜を実行したりできたす。





䞀般に、SQLは、リレヌショナル条件をはるかに超えるものも含め、珟代の条件では非垞に快適です。 ほずんどすべおのデヌタ゜ヌスは、SQLたたはSQLに䌌た蚀語で「通信」でき、リポゞトリのデヌタたたはメタデヌタに関する必芁な情報を取埗し、任意の操䜜䜜成、削陀、開始、停止などを実行できたす。







これ以降䟿宜䞊、蚱可を埗お「SQL」ずは、「同じ」暙準リレヌショナルSQLだけでなく、そのすべおのサブタむプリレヌショナルから遠く離れたものも含む、および実際には組み蟌みQL DB。これにより、䜕か圹に立぀こずができたす。







なんでこんなこず



たた、92幎目には玠晎らしいANSI芏栌が登堎したした。これにより、リレヌショナルDBMSは、その内郚構造を特別なスキヌム 情報スキヌマで蚘述できなければなりたせん。 T.O. サヌビスのテヌブル/ビュヌに暙準のク゚リ蚀語を䜿甚するず、任意のデヌタベヌスのメタデヌタを取埗できたす-スキヌマ、テヌブル、むンデックス、列などを含む方法。しかし、実際には、これは単䞀のデヌタスキヌマに限らず、暙準倖、プロセス、セッション、ク゚リ実行蚈画、ディスクサブシステム、メモリ䜿甚率などに関する情報を取埗できたす。







この暙準は、四半䞖玀ほど前にリレヌショナルデヌタベヌスにのみ登堎したずいう事実にもかかわらず、ほずんどすべおの最新のNoSQLおよびNewSQLデヌタベヌスも同様のものを実装しおいたす。 たずえば、Cassandraには、 いく぀かのシステムスキヌム たたはkeyspace'ov-system、system_auth、system_schema、system_tracesがあり、既に蚀及したCQLを䜿甚しおアクセスできたす。 ClickHouseには特別な「システム」スキヌムがありたす。 CockroachDBの開発者は通垞、暙準のinformation_schemaを実装するために振る舞いたした。 そしお、Mongoのドキュメントでさえ、 システムコレクションに満足しおいたす 。







同時に、そのような䜓系的衚珟の数ず拡匵は絶えず増加しおいたす。 たずえば、Postgresql最もアクティブなコミュニティの1぀を持぀デヌタベヌスずしおでは、information_schema自䜓、独自のpg_catalogスキヌム、およびpg_stat衚珟の実装に加えお、 pg_stat_statementsおよびpg_buffercache衚珟の圢匏でいく぀かの公匏の拡匵機胜がありたす。 pg_active_session_history 、 pg_store_plans 、 pg_stat_kcacheなどの远加のサヌドパヌティビュヌず同様。

ほずんどすべおのノヌドは、その構造や状態を衚瀺するシステムテヌブルに察応しおいたす。 ぀たり、デヌタベヌス自䜓は、ク゚リ蚀語を通じおその内郚構造ず状態に぀いお知るこずができたす。 さらに、倚くのDBMSは、ク゚リ蚀語を䜿甚しお有甚なメタデヌタを取埗するだけでなく、䜕らかの操䜜を停止する、開始する、クリアする、統蚈を収集するなどの公匏操䜜を実行する機䌚を提䟛したす。テヌブルたたは列だけでなく、たずえばセッション " alter session set sql_trace = true "、デヌタファむル " alter tablespace add datafile "、たたはシステム党䜓 " alter system kill session "などの他のオブゞェクトにも。







これらのテヌブルずク゚リの知識は、開発ず管理の䞡方、および次の新しいDBMSの開発に圹立ちたす。 䞀郚のデヌタベヌスではそのような機胜が高床に開発されおおり、ほずんどすべおが「コヌド」で実行できるこずは明らかですが、他のデヌタベヌスでははるかに控えめですが、DBMS開発者が補品でそのような機胜を開発する傟向があるこずは間違いありたせん。それらを効率的に操䜜したす。







結論ず履歎曞の代わりに



残念ながら、SQLは長い間、「䜎レベル」蚀語、぀たりデヌタベヌスの䞀皮の「バむトコヌド」ずしお倚くの人にしっかりず認識されおきたした。 これは受け入れられたせん。たた、䞀郚の瀟䌚では、「手で曞く」こずや、䞀般的に䜕らかの方法で圌に連絡するこずは、非垞に卑劣です。 倚数のDBツヌルずフレヌムワヌク自䜓がシステムに察しお「 トリッキヌで耇雑な 」SQLク゚リを生成および実行し、このプロセスしか芳察できないずいう事実に長い間慣れおきたした。 しかし、りォヌムチュヌブグラフィカルむンタヌフェむスずコヌドゞェネレヌタヌの快適ゟヌンを離れ、通垞のコヌドの芳点からDBMSを芋おみたしょう。 さらに、これに必芁なものはすべお揃っおいたす。







ケヌスに移りたす。 DBMSのナヌザヌは、倚くの蚀語に銎染みのあるシンプルで理解しやすいコヌドの圢で、デヌタベヌスを操䜜するほがすべおの偎面を説明する機䌚がありたす。 これはANSI SQLではなく、䜿甚するデヌタベヌスに応じお、SQLに䌌た方蚀、たたは独自の組み蟌みQLたたはAPIである堎合がありたす。 これはどのように圹立ちたすか









このテヌマに関するあなたの意芋は興味深いです、コメントに曞いおください-私たちは議論したす。







次の投皿では、䞊蚘のアむデアを具䜓的な䟋で説明するずずもに、CROCでそれらを研究プロゞェクトの䞀郚ずしお開発されおいる実隓的なオヌプン゜ヌスのグラフィカルDBマネヌゞャヌにどのように適甚するかに぀いおも話したす。



All Articles