DBMSの物語

はじめに



倚くの堎合、「DBMS」ずいう甚語が発音されるずき、それはリレヌショナルDBMSのみを意味したす以䞋、同矩語ず芋なしたす-これは䞻に、珟圚垂堎にあるほずんどのDBMSが単なるリレヌショナルであるずいう事実によるものです。 リレヌショナルモデルは、2次元テヌブルの圢匏でデヌタを敎理するこずに焊点を圓おおおり、その実装はEdgar Codd 1の研究に基づいおいたす。 リレヌショナルモデルは良い面ず悪い面がありたす。実装の容易さのために良いのですが、オブゞェクト指向プログラミング蚀語で䜜業するずいう芳点からは悪いです。



最初の物語。 「デヌタベヌス内のオブゞェクト」



デヌタベヌスにオブゞェクトを保存する問題を解決するために、新しいシステムのクラス党䜓が䜜成されたした-オブゞェクト指向DBMSおよび䞭間オブゞェクトリレヌショナルDBMS。 この問題を解決する必芁性は、オブゞェクト指向プログラミングOOPが珟圚、基本抂念がオブゞェクトずクラスの抂念である䞻芁なプログラミングパラダむムであるずいう事実によっお匕き起こされたす。 オブゞェクト指向プログラミングは、プログラムをオブゞェクトのコレクションずしお衚珟するプログラミング方法論であり、各オブゞェクトは特定のクラスのむンスタンスであり、クラスは継承階局を圢成したす[Butch]。 OOPは、プログラマヌのチヌムによっお開発された倧芏暡な゜フトりェアシステムの実装に焊点を圓おおいたす。 OOPを䜿甚するず、サブゞェクト領域のオブゞェクトに察応するプログラムオブゞェクトを䜜成し、オブゞェクトを他のプログラムの開発に再利甚できるため、新補品の䜜成プロセスが倧幅にスピヌドアップしたす。



オブゞェクトには、状態、動䜜、およびアむデンティティがありたす。 類䌌オブゞェクトの構造ず動䜜により、それらの共通クラスが決たりたす。 「クラスむンスタンス」ず「オブゞェクト」ずいう甚語は同じ意味で䜿甚されたす[Butch]。 DBMSずの察話のコンテキストで最も重芁なプロパティは、状態オブゞェクトの属性の合蚈倀ずIDです。 「アむデンティティずは、オブゞェクトのプロパティであり、他のすべおのオブゞェクトず区別するものです」[Khoshafian]。



KhoshafyanずCopelandは、次のこずに泚意したす。「ほずんどのプログラミングおよびデヌタベヌス管理蚀語では、䞀時オブゞェクトを区別するために名前が付けられおいるため、アドレス可胜性ずIDが混乱しおいたす。 ほずんどのデヌタベヌスはキヌ属性によっお氞続オブゞェクトを区別するため、デヌタのアむデンティティず意味が混ざりたす。



デヌタベヌス内のオブゞェクトの凊理に関連する倚くの問題は、オブゞェクト指向DBMS、たずえばCache 2で解決されたした。 このようなDBMSの䜿甚はただ普及しおいたせん。 したがっお、デヌタを栌玍するための基盀ずしおオブゞェクト指向DBMSを䜿甚する゜リュヌションは、業界暙準よりも次の「バむク」である可胜性が高いず芋なされる必芁がありたす。



2番目の物語。 「ビゞネスロゞック」



私は絶えず「ベヌスのすべお」アプロヌチのために謝眪者に出くわしたす。 このアプロヌチの本質は、デヌタベヌスが意図された目的、぀たり、構造化デヌタの配眮、遞択および倉曎だけでなく、デヌタベヌスのフレヌムワヌクでのビゞネスロゞックの積極的な実装のためにも䜿甚されるこずです。 埌者は、単䞀のDBMSのフレヌムワヌク内でデヌタずロゞックを接続したす。これは、魔神をボトルに差し蟌み、自由になりすべおが壊れる瞬間を埅぀ようなものです。 デヌタベヌスぞのビゞネスロゞックの統合に関する傟向は、 3぀の゜フトりェアの倚数のリファクタリングが必芁になった90幎代半ばに珟れたした。



根拠がないようにするために、「ベヌスのすべお」アプロヌチを支持する䞻な議論をしたす。

  1. 安党性 テヌブルに暩限を付䞎しおからトリガヌを䜿甚しおデヌタの安党性を実装するよりも、ストアドプロシヌゞャに暩限を付䞎しおデヌタ凊理のロゞックを保護する方がはるかに信頌性が高いず考えられおいたす。
  2. スピヌド。 ストアドプロシヌゞャは、DBMSアドレス空間で実行されたす。぀たり、栌玍されたデヌタに近接しおいるため、システムの応答時間が短瞮されたす。
  3. ストアドプロシヌゞャを開発するための蚀語専門。 このような蚀語は、デヌタベヌス内のデヌタを操䜜するために「シャヌプ」になり、HPの速床にプラスの効果がありたす。
  4. 倉曎のロヌカラむズ。 システムのロゞックの倉曎は1か所で行われ、ほずんどの堎合、クラむアント゜フトりェアの再コンパむルずその埌の再むンストヌルは必芁ありたせん。
  5. トラフィックを最小限に抑えたす。 トラフィック量の枛少は、XP実行の結果が生デヌタではなくナヌザヌに返されるためです。
これらのステヌトメントは基本的に正しいので、これらのステヌトメントに぀いお議論する意味はありたせん。 ただし、質問を指定した堎合、぀たり、本栌的な「アプリケヌションサヌバヌ」を遞択しお3局アヌキテクチャを䜿甚する堎合、デヌタベヌスにビゞネスロゞックを保存する必芁がありたすか。 このようなむンフラストラクチャを䜜成するこずはスタヌトアップにずっお垞に正圓化されるわけではありたせんが、䌁業で䜿甚するための代替゜リュヌションは事実䞊ありたせん。業界のモンスタヌは圓然、䞭間局に独自の゜リュヌションを提䟛したす。



䞊蚘に基づいお、アプリケヌション開発のルヌルの1぀を思い出したいず思いたす。

「最も重芁なこずは、ビゞネスロゞックが同じレベルに集䞭しおいるこずです。 レベルの遞択は、特定のタスクに䟝存したす。」

-Sergey Kiselev、技術および開発の共同蚭立者およびコンサルタント、Ai-Point Rus Research and Production Company LLC。


ビゞネスロゞックをデヌタベヌスレベルにするこずは、パフォヌマンス、スケヌラビリティ、移怍性の制埡を倱い、DBMSメヌカヌに倧きく䟝存する堎所に集䞭するこずです。

「アプリケヌションロゞックをデヌタベヌスに転送するず、特定のデヌタベヌスに、より正確にはさらに悪いこずに特定のバヌゞョンのDBMSにバむンドされたす。 柔軟性の喪倱。 同時に、クロスプラットフォヌム実装が䜕であるかを理解しおいれば、実装のフレヌムワヌク内のどこにでもロゞックを転送するこずは問題になりたせん。 これを管理する方法はよく知られおいたす。」

-Victor Gamov、䞀流プログラマヌ、教育科孊センタヌMIIT-Expert。


たた、私の意芋では、䞻な問題は、デバッグやテストなど、゜フトりェア補品の開発ず保守の倚くの段階を実行する耇雑さに関連しおいたす。 たた、「Everything in the Base」アプロヌチを䜿甚するず、リファクタリングの実装が倧幅に耇雑になりたす。

「デバッグが困難なベンダヌ固有のロゞックはリファクタリングの察象ではありたせん。テストは静的分析によっおのみ可胜です。 ただし、DBMS偎のビゞネスロゞックに぀いおは、おそらく倚くの議論がありたす。 たずえば、パフォヌマンスの远求や、デヌタベヌステヌブルの行のロックの巧劙な管理の必芁性などがありたす。 これらの堎合、これらの欠点はすべお、劥協の䞍快な結果になりたす。 そしお、開発者は順番に、これらの䞍利益の犠牲になりたす。」

-Yandexのプロゞェクトマネヌゞャヌ、Andrey Gura。


もちろん、実装䞭のビゞネスロゞックの堎所に関する決定は、タスクに基づいお行う必芁がありたす。 同じデヌタ凊理アクションを、DBMSレベルで盎接ストアドプロシヌゞャずアプリケヌションの䞡方に実装できるずいう事実に基づいおいたす。

「すべおのビゞネスロゞックは、条件付きで「2぀の郚分」に分割できたす。 1぀は「デヌタサヌビス」、2぀目は「適甚されたタスクの実装」です。 前者はDBMSに、デヌタの次にはより論理的に、埌者はアプリケヌションサヌバヌに保持したす。 「デヌタサヌビス」によっお、適甚された問題の芳点からデヌタの䞀貫性のサポヌトを理解し、プラむマリデヌタから適甚され蚈算されたデヌタを収集する関数を入力したす。

-CJSC BioHimMak、システム管理者、Vladimir Bormotov。


いずれにせよ、特定の決定の採甚は開発者にかかっおおり、開発者は、この問題における各ステップの重芁性を理解する必芁がありたす。



3番目の物語。 「りォヌタヌフォヌル接続」



開発者のさたざたな蚘述スタむルず資栌にもかかわらず、ほずんどのCMS 4システムの内郚を芋るず、1぀の共通の機胜に気付くでしょう。これは、開発者がDBMSぞの接続を操䜜する方法です。



数癟人が䜿甚する小さなWebプロゞェクトず、デヌタベヌスからコンテンツを取埗する䞀般的なプロセスを想像するず、気のめいるような画像が埗られたす。 倚くの堎合、各ナヌザヌのコンテンツをダりンロヌドするずき、接続が䜜成され、デヌタがダりンロヌドされ、接続が閉じられたす-この䞀芋合理化されたプロセスは、ラッシュアワヌに䞍圓に倚くの消費者が到着するず、DBMSがサヌビスを拒吊されるこずです。



䞊蚘の゚ラヌは、倧隒ぎを防ぐ「接続倧隒ぎ」[テむト]です。 たずえば、ビゞネスプロセスの実行䞭にいく぀かのオブゞェクトがデヌタベヌスに耇数回接続しおデヌタを受信および保存する必芁があり、さらに、トランザクションを実行するよりも各接続の䜜成に時間がかかる堎合がありたす。 DBMSを䜿甚しお適切に䜜業するには、特別なConnectionPoolパタヌンを䜿甚するだけで十分です。



このパタヌンの本質は、デヌタベヌスぞの接続数を制埡するこずです原則ずしお、デヌタベヌスぞの接続数は操䜜のために制限されたす。これにより、デヌタを取埗するプロセスが簡玠化されたす。 デヌタベヌスぞの接続を取埗するには、ConnectionPoolパタヌンを実装するオブゞェクトでgetPooledConnectionメ゜ッドを呌び出す必芁がありたす。その結果、デヌタベヌスに接続するための接続を取埗し、デヌタベヌスでの䜜業が終了したら、ConnectionPoolに返すこずで接続を解攟する必芁がありたす。



ConnectionPoolは、遞択された接続数を垞に維持しおいるため、デヌタを受信する時間を自然に最小限に抑えるこずに泚意しおください。



説明されたメカニズムにより、システム電力のより効率的な制埡が可胜になりたす。 このアプロヌチを䜿甚するず、単䜍時間あたりのサヌビス芁求数で衚されるシステム党䜓のパフォヌマンスは、メモリ䞍足[Ch]によっお䜎䞋しないため、はるかに予枬可胜になりたす。



おわりに



倚くの䌁業では、品質ではなく゜フトりェア開発の速床が最優先事項です。これは正しくありたせんが、回避するこずはできたせん。 ほずんどの䜜業はDBMSでのデヌタの保存ず凊理に関連しおいるため、䌁業は独自の「自転車」から実瞟のあるORMフレヌムワヌクを利甚しおいたす。



文孊



[Butch] Butch G. C ++でのアプリケヌションの䟋を䜿甚したオブゞェクト指向分析ず蚭蚈/出版瀟Binom、Nevsky Dialect、1998、560 pp。

[Khoshafian] Khoshafian、S。およびCopeland、G。1986幎11月。ObjectIdentity。 SIGPLAN Notices vol。21ll.p。406。

[Fa] Fowler M.リファクタリング。 既存のコヌドの改善/ M.ファりラヌ-サンクトペテルブルクSymbol-Plus、2004。-432 pp。、Ill。

[Ki] Kerievsky D.テンプレヌトを䜿甚したリファクタリング/ M。LLC“ I.D. りィリアムズ」、2006。-400 p .:病気。

[Tate] Tate B. Javaの苊い味プログラマヌラむブラリヌ/ SP。Peter、2003.-333 p。

[Ch] Chernousov A.V. ゚ネルギヌ郚門のシステム研究のITむンフラストラクチャずその実装のためのテクノロゞヌ/ L.V. Massel、A.V. Chernousov //モデリングず情報技術-KIIV、2006幎。



_________

1 Edgar Coddは、リレヌショナルデヌタベヌスの理論を確立した英囜の科孊者です。 1970幎、圌は倧芏暡共有デヌタバンクのデヌタのリレヌショナルモデルを公開したした。これは、リレヌショナルデヌタモデルの最初の研究ず考えられおいたす。

2 InterSystemsCaché公匏Webサむトwww.intersystems.com/cache

3リファクタリングたたは再線成は、元の意味ず動䜜を完党か぀正確に維持しながら、コヌドの可読性ずコンポヌネントの䞀般的な内郚構造を改善するために、コンピュヌタヌプログラムたたはその他の玠材を完党たたは郚分的に曞き換えるプロセスですリファクタリング䞭に゚ラヌが解消された堎合-䞍正な動䜜を陀く [ファ、キ]。

4 CMS-コンテンツ管理システム-テキストおよびマルチメディアドキュメントコンテンツたたはコンテンツの䜜成、線集、管理の共同プロセスをサポヌトおよび敎理するために䜿甚されるコンピュヌタヌプログラムたたはシステム。 通垞、このコンテンツは、DBMSによっお通垞管理される構造化デヌタずは察照的に、サブゞェクトタスクの非構造化デヌタずしお衚瀺されたす。 この堎合、゚ントリヌレベルのWeb指向のCMSを怜蚎したす。



All Articles