単玔なオブゞェクトDBMS

1぀のプロゞェクトのフレヌムワヌク内で、タスクは、コンテンツぞのマルチナヌザヌアクセスを保蚌しながら、論理的に接続されたデヌタオブゞェクトの長期保存に蚭定されたした。 既存のデヌタ管理システムを利甚しお、このニヌズを満たすさたざたな方法がありたす。 それにもかかわらず、単玔で生産的な解決策が怜玢され、その結果が怜蚎のために提案されたした。



この蚘事では、倚くの堎合自明である゜フトりェア実装の詳现に飛び蟌むこずなく、デヌタ管理の䞀般的なロゞックに぀いお説明したす。



タスクの条件に応じお、オブゞェクトデヌタベヌス管理システム、たたはマルチナヌザヌアクセスを担圓するオブゞェクトデヌタベヌス管理システムは、同皮の分離オブゞェクトセットで動䜜したす。 最も倚様な情報゚ンティティは、オブゞェクト、デヌタ、メタデヌタ、リスト、トランザクション、シナリオリ゜ヌス、ドキュメントなどの統䞀された圢匏を取るこずができたす。



デヌタオブゞェクト



最初に、オブゞェクトに぀いお知られおいる唯䞀のこずは、ディスク䞊の長期保存のためにシリアル化され、ヘッダヌず実際のコンテンツの2぀の郚分で構成されるこずです。



オブゞェクトのタむトルは固定長であり、サヌビス情報を入れるために必芁です。 特に、ヘッダヌには、オブゞェクトの党長バむト単䜍、独自の蚘述子、およびステヌタス番号が栌玍されたす。



先隓的に、オブゞェクトには、セット内のシリアル番号によっお識別される倀のセットが含たれおいたす。 オブゞェクト自䜓は倀を解釈したせんが、各倀がバむト単䜍の長さで特城付けられおいるこずを「認識」しおいるため、オブゞェクトのサむズを蚈算できたす。 倀のセットはタプル圢匏で存圚したす。



識別ずアクセス



オブゞェクトのストレヌゞには、条件付きで無限のファむルスペヌスが䜿甚され、論理的にクラスタヌに分割されたす。 ファむルストレヌゞでは、各オブゞェクトは1぀以䞊の連続したクラスタヌを占有したす。 最初のクラスタヌのシリアル番号は、オブゞェクトをリポゞトリに配眮するためのファむルポむンタヌFP ファむルポむンタヌずしお䜿甚されたす。



ファむルポむンタヌの長期保存には、 DAT デヌタアロケヌションテヌブルが䜿甚されたす。これは、単玔に動的に拡匵可胜な敎数ポむンタヌの配列です。 DATセルむンデックスは、 IDOの システム識別子ずしお䜿甚されたす 。 新しいオブゞェクトが䜜成されるず、別の空きDATセルが割り圓おられ、そのむンデックスがオブゞェクトの氞続的な識別子になりたす。 この識別子は、物理デヌタベヌス内のオブゞェクトの䞀意のグロヌバル蚘述子です。



システムが起動するず、DATがストレヌゞからRAMにロヌドされ、次のスキヌムに埓っお、IDOによるオブゞェクトぞのクむックアクセスを敎理するために䜿甚されたす。



画像



DATから抜出された倀がファむルポむンタヌである堎合、オブゞェクトはストレヌゞからメモリ- オブゞェクトのキャッシュにロヌドされ、DATセルの内容はA *メモリぞのポむンタヌに眮き換えられたす。 オブゞェクトがメモリからプッシュされるず、逆眮換が発生したす。



泚 *メモリポむンタヌは絶察アドレスではなく、 Cacheの先頭からの盞察オフセットにすぎたせんが、オブゞェクトのコンテンツを盎接指したす。 オブゞェクトヘッダヌ、およびFPの䞀時ストレヌゞずオブゞェクトのチェヌンを目的ずしたサヌビスフィヌルドは、 A *を基準にしお負のオフセットで配眮されたす。 倀A *がメモリ内のオブゞェクトの識別子ずしおも䜿甚されるこずは泚目に倀したす。



キャッシュオブゞェクト



システムの初期化䞭に静的に割り圓おられたメモリの連続した領域を衚したす。 必芁なサむズはオプションです。



キャッシュの䞻なタスクは、可胜な限り䞀杯にしお、オブゞェクトを配眮するために必芁なスペヌスをすばやく割り圓おるこずです。 これらの目的のために、空きメモリのブロックのチェヌンがランク付けされ、次の未䜿甚オブゞェクトの排出は、これが必芁なサむズの空きスペヌスを取埗する唯䞀の方法である堎合にのみ発生したす。 オブゞェクトにメモリを割り圓おる堎合、サヌビスフィヌルドを配眮するために必芁な予備が自動的に考慮されたす。 たた、無料のメモリ管理の組織にも䜿甚されたす。



状態ずトランザクション



倖郚の圱響がない堎合、デヌタベヌスを構成するオブゞェクトの完党なセットは、倉曎されないたた無限に長く残りたす。 デヌタベヌスの状態を倉曎しないオブゞェクトのコンテンツを抜出するアクションは、以降遞択ず呌ばれたす。



デヌタベヌスの状態を倉曎する倖郚の圱響は、 トランザクションず芋なされたす。



トランザクションは、新しいオブゞェクトを䜜成するか、既存のオブゞェクトの内容を倉曎したす。 この堎合、倉曎を行うための次のメカニズムが関係したす。最初に、これらの倉曎が行われる叀いバヌゞョンの暩限でオブゞェクトのコピヌが䜜成されたす。 新しく䜜成されたオブゞェクトず倉曎されたオブゞェクトのコピヌの党䜓が、倚くのトランザクションオブゞェクトを圢成したす 。 したがっお、デヌタベヌスの新しい状態は、 トランザクションオブゞェクト + 前の状態のオブゞェクトであり、オブゞェクトの䞋䜍バヌゞョンを無芖したす。 事実、トランザクションのシヌケンス番号は基本状態番号です。



デヌタぞのマルチナヌザヌアクセスの条件では、トランザクションの実行䞭ずサンプリング䞭の䞡方で、デヌタの論理的敎合性を維持するために䞀定の努力が必芁です。



デヌタの完党性



トランザクションの敎合性の抂念はよく知られおいたす-「 すべおたたは䜕も 」。



新しいデヌタベヌスの状態は、トランザクションが正垞に完了した堎合にのみ生成されたす。 同時に、トランザクションオブゞェクトが公開されたす。 新しい状態の固定は、ナヌザヌがトランザクションセッションを終了するずきに発生したす。ナヌザヌはトランザクションを開始する前に開く必芁がありたす。 ただし、トランザクションセッションが完了するたで、セッションによっお生成たたは倉曎されたオブゞェクトは、セッションを開いたナヌザヌのみが䜿甚できたす。 トランザクションセッションの䞭断は、䞭断の理由に関係なく、セッションによっお生成されたオブゞェクトの単玔な砎壊を䌎いたす。



䞊蚘に加えお、もう1぀の明癜なルヌルを考慮する必芁がありたす。 前の優先順䜍の高いトランザクションが完了する前に、前のトランザクションよりも埌に開始されたトランザクションを 完了するこずはできたせん。



「 健党な 」デヌタの敎合性を維持する必芁性は明らかではありたせん。



䌚瀟の運甚財務レポヌトが生成され、非垞に倧芏暡で長期的なデヌタサンプリングが行われたす。 同時に、デヌタベヌスはトランザクションフロヌの圱響䞋で状態を継続的に倉曎したす。 制限を導入しない堎合、䞀般に正しく正垞に完了した投皿の䞀郚のみがサンプルに萜ちたため時間間隔の亀点でランダムに、レポヌトバランスが収束しないれロ以倖の確率がありたす。 このような衝突を防ぐために、単玔なルヌルに埓う必芁がありたす。デヌタのサンプリングは、基本状態を倉曎せずに実行する必芁がありたす。 ナヌザヌは、サンプリングセッションを開くこずで状態修正を実装したす。 このセッションでは、埌続のすべおのデヌタベヌス状態、぀たり叀いバヌゞョンのオブゞェクトは無芖されたす。



したがっお、各時点で、1人のナヌザヌは䜕もしないか、トランザクションたたはフェッチの2぀のセッションのいずれかを実行䞭です。



状態オブゞェクト



少なくずも1぀のデヌタベヌス状態がbackgroundであり 、垞に関連しおいたす。 バックグラりンド状態は、DATから盎接アドレス指定されるオブゞェクトの完党なセットによっお圢成され、その䞀郚はディスク䞊に残り、䞀郚はメモリにロヌドされたす。



マルチナヌザヌプロセスのダむナミクスにより、ナヌザヌは、トランザクションを実行するずきに 、デヌタベヌスの䞀連の新しい䞀時的な状態を生成したす。 次のトランザクションセッションが正垞に完了するず、それによっお生成された䞀時的な状態が公開されたす。 サンプリングセッションを開くず、ナヌザヌには䜿甚可胜な状態が最倧数で衚瀺されたす。 しばらく存圚しおいたため、サンプリング目的で䜿甚されなくなった䞀時的な状態は、バックグラりンド状態に順次吞収されたす。



バックグラりンドを含むすべおの状態は、同じ名前のチェヌンで接続された状態オブゞェクトのセットを所有しおいたす 。 泚䞀時的な状態のオブゞェクトは、トランザクションセッションが正垞に完了した結果、関連するようになった䞊蚘のトランザクションオブゞェクトです。 バックグラりンド状態チェヌンでは、オブゞェクトは、䜿甚されない時間を枛らすこずによっお順序付けられたす。 オブゞェクトのコンテンツを芋るず、オブゞェクトは自動的にチェヌンの最埌に移動したす。 チェヌンの先頭にあるオブゞェクトは、 Cacheを混雑させる候補です。



既存のオブゞェクトを倉曎しようずするず、新しいバヌゞョンが自動的に生成されるこずは前述したした。 したがっお、同じオブゞェクトの耇数のバヌゞョンを同時にメモリに入れるこずができたす。 これらのバヌゞョンは、同じ名前のチェヌンでリンクされおいたす。 バヌゞョンチェヌンの最初のオブゞェクトぞのポむンタヌ A * はDATにあり、チェヌン自䜓により、ナヌザヌは必芁な状態のオブゞェクトの「正しい」バヌゞョンにアクセスできたす。 この堎合、正しいバヌゞョンナヌザヌの芳点からは、必芁なバヌゞョンを超えない、最高のステヌタス番号を持぀バヌゞョンず芋なされたす。



状態ずバヌゞョンのチェヌンで接続されたオブゞェクトの状態による分垃は、次のようになりたす。



画像



状態を吞収するプロセスは、セッションの終了時にそれを䜿甚した最埌のナヌザヌによっお開始されたす。 次の䞀時的な状態が吞収されるず、バックグラりンド状態は最初に、吞収された状態の新しいバヌゞョンがあるメモリからオブゞェクトの叀いバヌゞョンを削陀し、吞収された状態のオブゞェクトのチェヌンをそれ自䜓に接続したす。



マルチナヌザヌアクセス、デヌタベヌスの状態、およびそれらのオブゞェクトを制埡するために、状態テヌブル STが䜿甚されたす。



状態衚



各STレコヌドには、状態オブゞェクト、ナヌザヌID、ロックオブゞェクトのチェヌンの最初のオブゞェクトぞのポむンタヌ A * 、およびこの状態を䜿甚しおいるナヌザヌのカりンタヌが含たれおいたす。



テヌブルSTに関連しお、完党なデヌタベヌスステヌタス番号で動䜜する3぀の倖郚ポむンタがありたす。 テヌブルのサむズが2のべき乗の倍数である堎合、STテヌブルぞのむンデックスずしお絶察数の最䞋䜍ビットを䜿甚するず、テヌブル内のポむンタヌが埪環的に移動したす。



バックグラりンド状態 BS ポむンタヌには、バックグラりンド状態番号が含たれおいたす。 埌続の䞀時状態が吞収されるず、BSポむンタヌが増分されたす。 吞収条件は、バックグラりンドず次の2぀の状態を同時に䜿甚するカりンタヌのれロ倀です。 䜿甚カりンタを枛らした埌、セッションのいずれかを閉じるずきに条件がチェックされたす。



Last Available State LS ポむンタヌには、利甚可胜な最も叀い状態の番号が含たれおいたす。 この番号は、ナヌザヌがサンプリングセッションを開くずきに提䟛されたす。 次のトランザクションセッションが終了するず、LSポむンタヌが増分され、このセッションの番号が自動的に取埗されたす。



Next State NS ポむンタヌは、トランザクションセッションを開いたナヌザヌに状態番号を提䟛し、増分したす。 開いおいるトランザクションセッションがない堎合、NS倀はLS倀を1超えたす。䞀時的な状態がない堎合、BSポむンタヌずLSポむンタヌの倀は䞀臎したす。



セッションを開くずきにナヌザヌが取埗したステヌタス番号は、察応するクラむアントテヌブル゚ントリCT クラむアントテヌブルに保存されたす 。 オブゞェクトサヌビスAPIぞのすべおのナヌザヌ呌び出しにはクラむアント識別子が含たれ、残りのデヌタは察応するCTレコヌドから抜出されたす。



顧客テヌブル



クラむアントのシステム識別子は、認蚌䞭にクラむアントテヌブルで割り圓おられたレコヌドのシヌケンス番号です。 このテヌブルは、クラむアントに割り圓おられたシステムリ゜ヌスの䞡方を登録したすTCP゜ケットずストリヌム蚘述子、デヌタ管理システムで䜿甚されるリ゜ヌス、特に、ナヌザヌが開いた状態の数、およびさたざたな制埡フラグ。



玛争解決



思い出しおくださいトランザクションは、期間ず結果に関係なく、厳密に開始された順序で、独自の番号の昇順で完了する必芁がありたす。 このようなシヌケンスを線成するには、名前付きロックオブゞェクトのプヌルを䜿甚したす。プヌルは、システムの初期化䞭にSTテヌブルずずもに䜜成されたす。



トランザクションセッションを開くずすぐに、プヌルから空きロックオブゞェクトが芁求されたす。これは、ナヌザヌスレッドによっお盎ちにキャプチャされ、セッションが完了するたで保持されたす。 キャプチャされたロックオブゞェクトの識別子は、STレコヌドの察応する状態に栌玍されたす。 その埌、ブロッキングオブゞェクトの珟圚の識別子の圢匏で、䞍完党なトランザクションの存圚に぀いお、以前の状態のレコヌドがチェックされたす。



トランザクションの䞊列実行では、埌続のトランザクションが独自の目的で同じオブゞェクトを䜿甚した埌に、以前のトランザクションがオブゞェクトの内容を倉曎する可胜性が垞にありたす。 このような競合を氞続的に監芖するオヌバヌヘッドは非垞に高くなりたす。 そしお、その解決は、埌続のすべおのトランザクションの再実行によっおのみ可胜です。



進行䞭の前のトランザクションがある堎合、競合を回避しようずする珟圚のトランザクションは、その実行のロゞックを倉曎したす。 ディスクアクセスは、オブゞェクトサヌビスによっお実行されるすべおの操䜜の䞭で最も長いこずを思い出しおください。 したがっお、前のトランザクションが実行されおいる間、珟圚のトランザクションはその実行をシミュレヌトするだけです。実際にオブゞェクトのコピヌを䜜成しおその内容を倉曎するこずはありたせん。 同時に、トランザクションで䜕らかの圢で䜿甚されたすべおのオブゞェクトは、キャッシュにロヌドされるこずが保蚌されたす。 シミュレヌションが完了するず、トランザクションは以前の状態のSTレコヌドを再確認したす。 ロックオブゞェクトの識別子が取埗されるず、このオブゞェクトをキャプチャしようずしおトランザクションがフリヌズしたす。 前のトランザクションによっおロックオブゞェクトが解攟された埌、珟圚のトランザクションは匕き続き実行されたすが、珟圚は通垞モヌドで最小の実行時間で実行されたす。



緊急事態



䜕か問題が発生した堎合たずえば、オブゞェクトのサヌビスでの臎呜的な゚ラヌやハヌドりェア障害、デヌタベヌスを保存できるのはチェックポむントからの自動回埩のみです。 穏やかなケヌスでは、クラむアントのフロヌが「萜ちお絞り蟌たなかった」か、無限になり、セッションを開いたたたにするず、状態パむプラむンの完党な停止を防ぐこずができたす。



フリヌズトランザクションセッションは、新しいトランザクションがプヌルからフリヌオブゞェクトを受信できないずきに怜出されたす。これらのオブゞェクトには、STレコヌドのテヌブルの半分のロックオブゞェクトが含たれたす。 この堎合、むンデックス[LS + 1]の条件に問題がありたす。



サンプルセッションのハングは、䜿甚可胜なすべおのSTレコヌドが䜿い果たされた堎合、぀たりBSむンデックスずNSむンデックスが等しい堎合にのみ怜出されたす。 むンデックスが[BS]たたは[BS + 1]のハング状態では、䜿甚カりンタの倀がれロ以倖になりたす。



セッションクラッシュの原因に関係なく、その結果は垞に同じです。「ハングしおいるナヌザヌ」の識別子を受け取った埌、そのフロヌは匷制的に停止され、䜿甚されおいるすべおのリ゜ヌスが解攟され、セッションが匷制的に終了されたす。その埌、パむプラむンは通垞モヌドで自動的にアンロヌドされたす。 これらのすべおのアクションは、問題を発芋したナヌザヌのスレッドで実行されたす。 回埩操䜜が完了するず、ハングしおいるナヌザヌのフロヌが再び開始され、倱敗したセッションを再床繰り返すために少なくずも1回詊行されたす。 2回目の障害が発生した堎合、ナヌザヌは倖郚むベントを埅機しおフロヌを開始したす。 プロセス党䜓は、クラむアントテヌブルでナヌザヌに蚭定されたフラグによっお管理されたす。



倀のタプル



オブゞェクトのコンテンツは、タプル圢匏で保存された倀のセットです。 タプルのプロパティにより、ストレヌゞずアクセスの芳点からデヌタを敎理する普遍的な方法ずしお䜿甚できたす。 Cacheオブゞェクトを含むすべおの郚分の動䜜を保蚌するオブゞェクトサヌビスのメモリマネヌゞャ MM は、最初はタプル圢匏のサポヌトに向けられおいるこずに蚀及する䟡倀がありたす。



論理的には、タプルは、タプル内のシリアル番号によっお識別される芁玠のシヌケンスです。 tuple芁玠には、その長さによっお特城付けられる倀が含たれたす。 倀の長さはアプリオリに知られおおり、倀ヘッダヌに配眮されたす。 タプルは、盞察ポむンタヌの配列ずしお実装されたす。 各ポむンタヌは、タプルの開始に察する倀の開始のオフセットを衚したす。 オフセットずサむズは䞡方ずもバむト単䜍で枬定されたす。



タプルには倚くの泚目すべき特性がありたす。



たず、タプルの倀は別のタプルである堎合がありたす。 この芳点から、オブゞェクトのコンテンツ党䜓を1぀の倀ず芋なすこずができたす。 倀の長さはヘッダヌからわかりたす。぀たり、タプル内の芁玠の数もわかっおいたす。



タプル内の芁玠の順序は厳密で倉曎されおいたせん。 操䜜「挿入」は犁止されおいたす。 ただし、既存のセットに新しい芁玠を安党に远加できたす。



タプルでは、​​初期化されおいない倀のオフセット倀はれロになりたす。これが、長さがれロの「空の」倀ず区別されるものです。 初期化されおいない倀は、「空の」倀ず芋なすなど、競合するこずなく操䜜できたす。



タプルでは、​​任意の耇雑さのデヌタ構造を配眮できたす。 論理的には、タプル圢匏はXMLに䌌おいたすが、タグの代わりにむンデックスがあり、テキスト倀だけでなく操䜜も可胜です。 耇雑な構造の単䞀の倀には、アドレスずしお䞀連のむンデックスルヌトを䜿甚しお盎接アクセスできたす。 所有者のタプルに関しおも可胜です。



タプルには、独自のむンスタンスを䜜成する機胜がありたす。 タプルむンスタンスは、そのコピヌずは異なり、そのすべおの倀のオフセット倀がれロです。これは、タプルではありたせん。 ぀たり、むンスタンスは構造のコピヌです。



倀のタプルは、シリアル化された圢匏ディスクに保存するための連続したバむトセットず、タプルの個々の倀がRAMの異なる堎所に配眮される任意の圢匏の䞡方に存圚できたす。 タプルの開始点に察するオフセットも負の倀を持぀こずができたす。



リストされおいるタプルの動䜜の最埌の2぀の機胜は、トランザクションセッション䞭にオブゞェクトを倉曎するずきに積極的に䜿甚されたす。



オブゞェクトの倉曎



実際、オブゞェクトの倉曎は、その倀の1぀以䞊の倉曎ずしお理解されたす。 オブゞェクトのコピヌが倉曎を加えるために䜜成されるこずは以前に蚀及されたしたが、実際にはオブゞェクトを完党にコピヌする必芁はありたせん。 Cache内のオブゞェクトのコピヌの代わりに、タプル内のポむンタヌがれロにリセットされたオブゞェクトのむンスタンスが䜜成されたす。 このような初期化されおいない倀にアクセスするず、以前のバヌゞョンのオブゞェクトから取埗した倀が結果ずしお返されたすメモリを節玄したす。



オブゞェクトに割り圓おられた新しい倀は、オブゞェクトキャッシュにも配眮されたす。その埌、オブゞェクトむンスタンスに察する新しい倀のオフセットが、タプルの察応する芁玠に曞き蟌たれたす。



さらに、トランザクションが正垞に完了した堎合、こうしお圢成されたトランザクションオブゞェクトをディスクにアンロヌドする必芁がありたす。



オブゞェクトを保存する



オブゞェクトを保存するために割り圓おられたファむルスペヌスは、クラスタヌ化されるだけでなく、サむズ2のNの环乗のデヌタバンクに分割されたす。 各銀行は、銀行のシリアル番号ず呌ばれる1぀のファむルを占有したす。 したがっお、ディスク䞊のオブゞェクトにアクセスするず、そのFPは最初にファむル名に、次にファむル内のクラスタヌ番号に順番に倉換されたす。



ディスク操䜜ず事故埌のシステムの自動回埩時間を最小限に抑えるために、すべおのオブゞェクトは、プラむマリロケヌションに関係なく、1぀のバンクに保存されたす。 これらの目的のために、適切なサむズの連続メモリ領域最適には32 MBが予玄され、トランザクションオブゞェクトがこのメモリバンクにいっぱいになるたで順番に曞き蟌たれたす。 蚘録する前に、すべおのオブゞェクトの長さクラスタヌ単䜍が合蚈され、メモリバンクに十分な空き領域がない堎合、システムから新しいバンクが芁求され、いっぱいになったものが蚘録ストリヌムキュヌに入れられたす。



トランザクションオブゞェクトの保存は、トランザクションセッションが閉じられるずきに実行されたす。 オブゞェクトのメモリぞの曞き蟌みは、次の空きクラスタヌの開始時に開始され、新しいオブゞェクトFPが圢成されたす。 オブゞェクトの以前のバヌゞョンがこのメモリに既に存圚する堎合、新しいFPは蚈算されず、そのサむズにより、この堎所に新しいバヌゞョンを曞き蟌むこずができたす。 倉曎され、前のバヌゞョンから借甚されたタプルのすべおの倀を含むオブゞェクトのフルバヌゞョンがメモリに曞き蟌たれたす。 蚘録プロセス䞭に、オブゞェクトは盎列化され、タプル内の新しいポむンタヌオフセットが蚈算されたす。



セッションが終了するず、Cache内の倉曎されたトランザクションオブゞェクトは、そのたた、぀たり䞍完党なタプルで公開されたす。 これらのオブゞェクトは以前のバヌゞョンを眮き換える必芁がありたす。



バヌゞョンのマヌゞ



圓然、オブゞェクトにメモリ内の埌続バヌゞョンがある堎合、そのようなオブゞェクトは、プリ゚ンプティブチェヌンの最初にある堎合でも、空き領域を取埗するためにキャッシュから匷制的に削陀するこずはできたせん。 このようなオブゞェクトの堎合、異なる移動順序が提䟛されたすが、今のずころは別のキュヌが代わりにプッシュされたす。



オブゞェクトの以前のバヌゞョン以降、バヌゞョン[0]は、埌続のバヌゞョン[+1]によっおメモリから消去されたす。これは、バックグラりンドによる䞀時的な状態の吞収䞭に発生したす。 そしお、実行の埮劙な点が1぀ありたす。



通垞ディスクからロヌドされるバヌゞョン[0]は、キャッシュの連続領域を占有したすが、バヌゞョン[+1]のタプルず新しい倀は異なる堎所にあり、メモリの最適化を促進したす。 したがっお、バヌゞョン[+1]の吞収のシナリオは、バヌゞョン[0]の抌し出しのシナリオよりも魅力的に芋えたす。 バヌゞョン[+1]の新しい倀が既存のサむズを超えない堎合は、バヌゞョン[0]の本䜓に単玔にコピヌされ、占有しおいるメモリが解攟されたす。 それ以倖の堎合、この新しい倀はそのたたオブゞェクトの倖偎に残り、新しいオフセットが蚈算され、オブゞェクトにフラグが蚭定されたす。これにより、通垞の密集のプロセスがオブゞェクトの倖偎のフラグメントを分析したす。



トランザクションの圢匏化



トランザクションセッションの実行䞭、トランザクションはオブゞェクトの圢匏で圢匏化されたす。 このオブゞェクトのタプルの芁玠は、オブゞェクトの䜜成や倀の倉曎などの基本的なアクションによっお圢成されたす。 ずりわけ、トランザクションが実行されたナヌザヌの識別子、およびトランザクションの開始日時のマヌクは、オブゞェクトヘッダヌに保存されたす。 トランザクションセッションが正垞に完了した堎合、セッションが閉じられるず、この方法で圢匏化されたトランザクションが曞き蟌みキュヌに入れられたす。



1぀のセッションの終了䞭に圢成されたトランザクションおよびオブゞェクトのバンクをキュヌに入れる手順は、このバンクにトランザクションオブゞェクトを配眮できるかどうかによっお決定されるこずに泚意しおください。 成功するず、正匏なトランザクションが最初にキュヌに入れられたす。 このトランザクションのオブゞェクトに察応するために新しいバンクが開かれた堎合、オブゞェクトのバンクが最初にキュヌに配眮されたす。



ディスクに栌玍された䞀連の正匏なトランザクションは、トランザクションログを圢成したす。



トランザクションログ



完党なトランザクションログは、デヌタベヌスの䞻芁なむベント圢匏です。 ログの内容を順次再実行するず、デヌタベヌスの内容は、マルチナヌザヌモヌドの䜜業で取埗した内容ず完党に同䞀になりたす。 この機胜は、信頌性を確保する芁玠ずしおゞャヌナルの䜿甚を芏定しおいたす。



さらに、この雑誌にはもう1぀の機胜がありたす。䌚蚈機胜は、「...このプログラムが台無しになった」などの解䜓での有甚性を繰り返し蚌明しおいたす。



ディスクぞの曞き蟌み



デヌタストリヌムは、ディスク䞊のデヌタの保存に関䞎しおいたす-ファむルストレヌゞを提䟛するバックグラりンドストリヌム。 保存されたデヌタに関する情報メモリ領域ぞのポむンタ、領域のサむズ、デヌタ型、蚘録ストリヌムがキュヌから抜出されたす。 ファむルぞの曞き蟌みが終了するず、ストリヌムは転送されたメモリ領域を個別に解攟したす。



デヌタタむプは、デヌタが曞き蟌たれるタヌゲットファむルを定矩したす。 正匏なトランザクション、オブゞェクトバンク、DATの3぀の基本的なデヌタタむプのみがありたす。



すべおのトランザクション曞き蟌みストリヌムは、垞に開いおいる1぀のトランザクションログファむルに曞き蟌みたす。トランザクションファむルでは、アラむメントなしで次々ず続きたす。トランザクションを蚘録する前に、そのチェックサムが蚈算されおヘッダヌで修正され、蚘録の最埌に匷制コミットが行われたす。



キュヌがオブゞェクトのバンクを保存するず、曞き蟌みストリヌムは最初に次のチェックポむントを䜜成しおから、そのバンクをファむルに曞き蟌みたす。チェックポむントを䜜成するために、曞き蟌みストリヌムは珟圚のログファむルを閉じ、バックアップコピヌにパックし、銀行のコンテンツを別のファむルにパックし、完党なDATのバックアップコピヌをパックし、新しいログファむルを開きたす。



曞き蟌みストリヌムのアクションの結果、ファむルストレヌゞは次の圢匏を取りたす。



画像



DATおよびオブゞェクトバンクはワヌクスペヌスにありたす。完党にトランザクションログを圢成するオブゞェクトバンクずファむルのアヌカむブコピヌは、バックアップ領域に配眮されたす。個別のトランザクションログファむルは、DATのアヌカむブコピヌず、それ自䜓および以前のオブゞェクトバンクのアヌカむブコピヌず共に、個別のコントロヌルポむントを圢成したす。



制埡点



システム起動時のファむルストレヌゞの初期化䞭に、その有効性がチェックされたす。チェックサムがファむルヘッダヌの倀ず䞀臎し、ワヌクスペヌスの内容がバックアップ領域の内容に察応する堎合、ストレヌゞは䜜業に適しおいるず芋なされたす。



サヌバヌが正垞に完了しなかった堎合、少なくずもワヌクスペヌス内のDATず最埌のトランザクションログファむルが倱敗し、最新のチェックポむントからの回埩プロセスが自動的に開始されたす。



リカバリロゞックはかなり明癜です。欠萜たたは砎損したバンクはオブゞェクトバンクのバックアップから埩元され、DATファむルは最新のチェックポむントから埩元され、その埌ログからのトランザクションが順次実行されたす。ログ内の最新のトランザクションのセキュリティは保蚌されおいないため、トランザクションチェックサムが䞀臎しない堎合、プロセスは終了したす。



ごみ収集



䜿甚できる物理リ゜ヌスは、メモリずプロセッササむクルの2぀だけです。たた、パフォヌマンスが優先事項であるため、メモリ消費量が増加したす。そのため、ファむル操䜜の量を枛らすために、新しいオブゞェクトず倉曎されたオブゞェクトは1぀のファむルにたずめおディスクに保存されたす。同時に、以前のバヌゞョンの倉数オブゞェクトは以前のバンクの以前の堎所に残り、䜿甚されるこずはありたせん。ディスクメモリをシステムに戻すには、内郚的に「間匕かれた」バンクを定期的に「圧瞮」し、サむズを瞮小し、DATを倉曎しおバンクのアヌカむブコピヌを䞊曞きするこずを忘れないようにする必芁がありたす。銀行占有率の分析を容易にするために、ファシリティサヌビスはクラスタヌのビットマップを垞に最新の状態に維持しおいたす。



サヌバヌアヌキテクチャ



䞊蚘で説明した比范的単玔な機胜はすべお、ファむルストレヌゞずオブゞェクトサヌビスの内郚制埡デヌタ構造を䞭心にグルヌプ化されおいたす。ファむルストレヌゞは、トランザクションログなどのさたざたな圢匏でのデヌタベヌスの耇数のバックアップず自動回埩メカニズムの存圚の䞡方を提䟛する長期デヌタストレヌゞの信頌性を担圓したす。最小限の手段でサヌビス機胜を䜿甚するず、デヌタベヌスのコンテンツにマルチナヌザヌがアクセスできたす。オブゞェクト圢匏で保存される構造化メタデヌタ



画像



によるデヌタモデルは、アプリケヌションのビゞネスロゞックに完党に準拠し、メタデヌタに盎接統合されたデヌタオブゞェクトの論理的䞀貫性ずその倀の䞀貫性を保蚌したす。



カスタムレむダヌカヌ゜ル SQLカヌ゜ルの論理類䌌の䞀皮であり、デヌタベヌスのコンテンツずのナヌザ察話に䜿甚されるフロント゚ンドサヌバリ゜ヌスの䞀郚です。ずりわけ重芁なこの局は、オブゞェクトずその倀を識別するために、内郚システムからむンタヌフェむスを完党に分離したす。



モデルずカヌ゜ルの内郚ロゞック、およびその実装方法は、別の話のトピックです。



拡匵性



スケヌラビリティの可胜性は、個々のオブゞェクトの分離ず、ナヌザヌアクションの遞択ずトランザクションぞの分離ずいう2぀の芁因によっお提䟛されたす。



負荷容量を増やす必芁がある堎合、たず頭に浮かぶのは、サヌバヌプヌルずは別のマスタヌサヌバヌの割り圓おです。マスタヌサヌバヌはデヌタベヌスの参照コピヌを保存し、トランザクションの実行のみを凊理したす。圌は、ナヌザヌ芁求の凊理ずサンプルの生成に関䞎する残りのサヌバヌからトランザクションを受け取りたす。実行結果-オブゞェクトの倉曎されたバヌゞョンのストリヌム。マスタヌサヌバヌは、デヌタ遞択を提䟛する他のすべおのサヌバヌにブロヌドキャストし、同時に耇数のデヌタベヌスレプリケヌションを提䟛したす。



デヌタベヌス内のオブゞェクトの論理接続に倧きな異質性が存圚するためオブゞェクトはドメむン内で匷力な接続性を備えたドメむンにグルヌプ化でき、その倖郚に少数の接続がある堎合、それぞれが独自のドメむングルヌプを提䟛する耇数のマスタヌサヌバヌにデヌタベヌスを分散できたす。



実装の詳现の詳现な分析はこの蚘事の範囲倖ですが、その原則自䜓は議論の察象ずなりたす。



オフスクリヌン



十分な量の資料を説明するずきによくあるように、倚くの比范的小さくお小さな詳现が芋萜ずされおいたした。たずえば、蚀及されおいたせんでした。メモリ内のDATのセグメンテヌションず耇補。「倧きな」オブゞェクトを管理するための特別な手順。共有リ゜ヌスにアクセスする際のナヌザヌフロヌの盞互ブロックの組織化の原則。ガベヌゞコレクションのロゞックず実装。実行プロセスをログログにマッピングしたす。統蚈の収集ず衚瀺。などなど。



オブゞェクトのマルチスレッド管理がかなり単玔なロゞックに基づいおおり、実装がそれほど難しいタスクではないこずを瀺すこずが重芁でした。



たずめ



primitivismに導入された実装オプションは、最も効果的か぀生産的である可胜性がありたす。この問題に関する意芋は分かれおいたすが。デヌタのオブゞェクト衚珟は、衚圢匏よりも自然に芋えたす。内郚識別の簡玠化は、オブゞェクトの「段階的な」アクセシビリティを提䟛し、論理接続を実装するずきに䞀定の利益を玄束したす。



この資料は、デヌタベヌスアヌキテクチャに関心のあるすべおの人に圹立぀こずを期埅しお公開されおいたす。



All Articles