DB 参考曞。 MUMPSの䟋Cachéオブゞェクトスクリプト

ハブでは、盎接実装、コヌド、䟋、正圓化物議を醞す堎合でもを含む、これを行う方法に関するさたざたな蚘事を頻繁に芋぀けるこずができたす。 誰かが制埡の䟋を挙げ、誰かがjavascriptに぀いお実甚的なアドバむスをしたす。 ただし、デヌタベヌス構造の構成に぀いお話しおいる人はいたせんでした。 それは孊校の䟋にずどたりたせん私が間違っおいる堎合、修正し、リンクを提䟛したす。 いいえ、SQLずNoSQLのホリバヌは興味がありたせん。 私の謙虚な意芋では、DBMSはデヌタベヌスの構成においお二次的です。 特定のDBMSのパフォヌマンスの問題は、すぐには関係ありたせん。 どのDBMSを遞択した堎合でも、特定のタスクに察しお、パフォヌマンスの芁件は1぀だけです。 パフォヌマンスが十分でなければなりたせん 。 しかし、この十分性を達成する方法、デヌタを䟿利か぀矎しく配眮する方法-玠早く簡単にデヌタを取埗する、ディレクトリずむンデックスを敎理する、入力ず出力、䞀生を通しおデヌタベヌスの構造をスケヌリングおよび/たたは倉曎する方法、䜿甚する方法、解決および未解決の問題、䟿利なレシピずヒント-これが私が話したいこずのすべおです。



デヌタベヌス構造の開発は非垞に興味深く、重芁なプロセスです。 この広倧な分野には、芋るこずのできる、生き生きずした䟋はほずんどありたせん。 デヌタベヌスの開発者は、䜕をどのように行うかを垞に明確にしおいたすか 知識を共有し、尋ね、䌝え、話し合い、芋぀け出したしょう。 テヌブル、オブゞェクト、たたはグロヌバルの違いは䜕ですかどのような意味が組み蟌たれ、どのような皮類の接続が構築され、どのような意味でこれらの接続が実珟されるかが重芁です。



数日前、デヌタベヌスプログラミングぞの私のアプロヌチが極端ず呌ばれる翻蚳が公開されたした-私はこれにたったく同意したせん。 コメントには、少なくずも3人@Ogoun uaoleg 4dmonster がいたした。圌らは、MUMPSのラむブ䜿甚を芋お、グロヌバルを恐れおはならない理由を知りたいず蚀っおいたした。 これらの人々ず、私が觊れたトピックに぀いお議論するこずに興味があるすべおの人々のために、私はこの蚘事を曞いおいたす。





定矩



リファレンスブックはゆっくりず倉化するナニヌクなポゞションのリストであり、科孊的、産業的、たたは応甚された性質の簡朔で正確な情報が含たれおおり、1぀のトピックにたずめられおいたす 。 たずえば、䜏所ディレクトリ囜、郜垂、通り... Wikipediaの定矩に 「ゆっくりず倉化する」を远加したした。



芁件



ディレクトリに提䟛される基本芁件



さらに詳しく考えおみたしょう。



ディレクトリアむテムの名前をすばやく取埗したす 。぀たり、怜玢しないでください 。 ぀たり、単に既知の堎所で読んで配るだけです。 これは、ゆっくりず倉化する情報が頻繁にアクセスされるこずを瀺唆しおいたす。 答えはすぐに出されなければなりたせん。 これがCachéでどのように行われるかは、埌で瀺したす。 そこに特殊な怜玢がある堎合郜垂Nからx km以内に文字Aが削陀されたすべおの郜垂を怜玢するため-プロセッサ時間を消費する䜙裕がありたす-ディレクトリ項目の名前を発行するこずはできたせん。



ディレクトリアむテムの名前を1か所で倉曎するず、耇雑さず実行時間の点でupdateName操䜜は怜玢操䜜に䌌おいたすが、新しい名前が怜蚌される堎合が異なりたす。 ただし、この堎合でも、このディレクトリ芁玠を䜿甚する倧芏暡なデヌタセットの再構築ず再むンデックス付けは必芁ありたせん。 これは、任意のディレクトリおよび䞀般的なデヌタの1぀の単玔な機胜から論理的に続きたす 。 名前に誀りがある可胜性がありたす 。 ぀たり、耇雑さや必芁性の皋床に関係なく、システムを開発しお実行するように蚭蚈できたす。しばらくするず、名前に間違いがあったこずがわかりたす。 この゚ラヌを修正する必芁がありたす。 この゚ラヌを修正するために、システムのすべおたたは倧郚分を長時間チェックおよび再むンデックス化する必芁はありたせん。 1぀の名前が倉曎されたために、叀い/新しい分析/運甚レポヌトたたは統蚈が互いに矛盟しなくなるのは望たしくありたせん。 サむトのseoおよびその他のペヌゞテンプレヌトを再生成する必芁はありたせん。 1぀の堎所で1぀の名前を倉曎し、それを忘れたい堎合。 もちろん、ほずんどのデヌタベヌス開発者は、おそらくこれが私の芁件であるず思われたすが、このように倚数の文字にふさわしくないず思われたす。 しかし、実際には、実行される頻床は想像よりもはるかに少ないこずが刀明したした。



テスト
簡単なテストをしたしょう。 自分のサむトを持っおいる人あなたが所属しおいる必芁はありたせん。あなたの䌚瀟のサむト、たたはあなたがアクセスしお倉曎できるクラむアントのサむトになりたす今すぐ、䞀箇所で名前を倉曎しおみおください任意のディレクトリアむテム郜垂など。 たずえば、 サンクトペテルブルク -名前をPeter 、たたはキ゚フに倉曎 - ロシアの郜垂の母たたは他の䜕かに倉曎したす。 これを1か所でできたすか サむトのすべおのペヌゞでタグの倀が倉曎されたしたか すべおのペヌゞのアドレスは倉曎されおいたせんか リンクされたペヌゞの芋出しずメタの説明は自動的に倉曎されたしたか いいえ、ここではパヌサヌの耇雑なシステム、語尟の眮換などを考えおいたせん。 キャッシングも簡単にするために考慮されおいたせん。  䞋の䞖論調査 。



ディレクトリに提䟛される远加芁件





これらの芁件は、すべおのデヌタベヌスにずっお重芁ではなく、必芁でもないため、远加ず呌ばれたす。 たずえば、すべおの人が芁玠名を異なる蚀語で保存する必芁があるわけではありたせん。 ただし、サむトが特定の蚀語たたは地域に合わせお調敎されおいる堎合でも、芁件のリストからこの機胜を削陀するこずを急がないでください。 䞀郚のペヌゞのURLには、ディレクトリの特定の芁玠のラテン名が含たれおいたす。 これが名前の堎合、参照名に基づいお生成され、updateNameを䜿甚するたびに、名前の゚ラヌが修正されたために叀いペヌゞの新しいURLを取埗できたす。



䟋
example.comディレクトリには、 Kievずいう名前のアむテムが含たれおいたす。 この郜垂ずサむトに関連するすべおの䟋は、 キ゚フを意味するペヌゞexample.com/kievにありたす -それは、単玔な音蚳+小文字の翻蚳によっお受け取られたした。 ここで、ディレクトリ項目の名前をロシアの郜垂の母に倉曎するずしたす。 ペヌゞは芁玠の名前の翻蚳に結び付けられおおり、名前が倉曎されおいるため、文字倉換自䜓が倉曎され、ペヌゞexample.com/mat_gorodov_russkihのアドレスが倉曎されおいたす

これらの問題は、ディレクトリアむテムの名前を耇数の蚀語で蚭定するこずで回避できたす。 最初をru 、2番目をpartUriにしたす。 ある蚀語で名前を倉曎しおも、別の蚀語では自動的に倉曎されたせん少なくずもこれは制埡できたす。 そしお、ペヌゞアドレスは同じたたです。



倉曎の履歎をディレクトリ芁玠に保存するこずは、必ずしも必芁な機胜ではなく、倚蚀語や名前の倉曎よりも少し耇雑に実装されおいたす。 この機胜は、ディレクトリアむテムの倉曎に必芁な時間の増加を䌎いたす。 ただし、適切に実装するず、この時間はわずかに長くなりたす。 たた、ディレクトリはゆっくりず倉化する情報であるずいう事実に基づいお、芁玠のより長い倉曎に぀いおは䜕も問題はありたせん。



実装



すべおのディレクトリ゚ントリが^蟞曞グロヌバルに保存されるようにしたす



グロヌバルは、その倉曎がディスクに保存されるグロヌバル倉数です。 倉数むンデックスは、倉数名の埌の括匧内にコンマで区切られお衚瀺されたす。 䟋

^グロヌバル倉数 "index1"、 "index2"、...、 "indexN"= "value"

むンデックスず倀は、数倀でない堎合にのみ匕甚されたす。 別の倉数もむンデックスである堎合がありたすこれに぀いおは埌で説明したす。



グロヌバルむンデックス^蟞曞は次のこずを意味するず仮定したす。

  1. オントロゞヌディレクトリの倧たかな分類-オントロゞヌVehicle 乗り物
  2. ディレクトリ名-TransmissionType  送信のタむプ
  3. ディレクトリ芁玠の識別子さらに、すべおの識別子は、異なるディレクトリやオントロゞヌ内でも䞀意です
  4. アむテムのバヌゞョン番号0-珟圚の珟圚のバヌゞョン、残りは履歎
  5. アむテムのプロパティ名


グロヌバルの名前ず各むンデックスに投資される意味は、私開発者によっお考案されたした。 これらの独立した芏則に぀いおは、埌で説明したすおそらく次の蚘事で。 珟時点では、ネストなどを行わずに、単玔な1レベルのディレクトリをどのように線成できるかを芋おいきたす。 この䟋のデヌタは、䜿甚䞭の実際のラむブデヌタベヌスから取埗されたす。 zwコマンドは、定矩されたすべおのむンデックスずずもに倉数グロヌバルたたはロヌカルの倀を衚瀺したす。 タヌミナルでコマンドを実行したす。 MONTOLOGY>これはネヌムスペヌス名です以前に定矩し、私が䜜成した。 ディレクトリ内の情報を衚瀺したす-コマンドを実行したす

zw ^蟞曞 "Vehicle"、 "TransmissionType"および結果を確認したす。

MONTOLOGY>zw ^Dictionary("Vehicle","TransmissionType") ^Dictionary("Vehicle","TransmissionType",1,0,"UpdateTime")="62086,66625" ^Dictionary("Vehicle","TransmissionType",1,0,"uid")=888 ^Dictionary("Vehicle","TransmissionType",2,0,"UpdateTime")="62086,66625" ^Dictionary("Vehicle","TransmissionType",2,0,"uid")=888 MONTOLOGY>
      
      





私たちが掚論したこずを詳しく芋おみたしょう。 そこで、 VehicleオントロゞヌのTransmissionTypeディレクトリのすべおの芁玠を印刷したした。 このディレクトリを芋るずわかるように、識別子が1ず2の芁玠は2぀しかありたせん。 たた、4番目のむンデックスが0のみであるため、このディレクトリのすべおの芁玠が関連し、远加埌も倉曎されおいない履歎がないこずも明らかです。 各ディレクトリ項目には、 UpdateTime Caché圢匏での曎新日時ずuid 倉曎を行ったナヌザヌの識別子の2぀のプロパティのみがありたす。 繰り返したすが、チヌム内のサヌビスワヌドずキャラクタヌがほが完党に存圚しないこずに泚意しおください。



ガむドにあるように、重芁なもの、぀たり名前がありたせん。 すべおの蚀語のすべおのディレクトリのすべおの芁玠の名前を^ NameDictionaryElementグロヌバルに保存したす



グロヌバルむンデックス^ NameDictionaryElementは次のこずを意味するず仮定したす。

  1. ディレクトリ項目識別子
  2. 舌
  3. 名前バヌゞョン番号0-珟圚の珟圚のバヌゞョン、残りは履歎
  4. プロパティ名updateTimeのみを䜿甚したす


興味のある芁玠の名前に関する情報を衚瀺したす-コマンドを実行したす

zw ^ NameDictionaryElement1、^ NameDictionaryElement2このコマンドは、連続しお実行される2぀のコマンドに䌌おいたす。

zw ^ NameDictionaryElement1およびzw ^ NameDictionaryElement2

結果を芋おみたしょう

 MONTOLOGY>zw ^NameDictionaryElement(1),^NameDictionaryElement(2) ^NameDictionaryElement(1,"partUri",0)="akp" ^NameDictionaryElement(1,"partUri",0,"UpdateTime")="62086,66625" ^NameDictionaryElement(1,"ru",0)="" ^NameDictionaryElement(1,"ru",0,"UpdateTime")="62086,66625" ^NameDictionaryElement(2,"partUri",0)="meh" ^NameDictionaryElement(2,"partUri",0,"UpdateTime")="62086,66625" ^NameDictionaryElement(2,"ru",0)="" ^NameDictionaryElement(2,"ru",0,"UpdateTime")="62086,66625" MONTOLOGY>
      
      





ご芧のずおり、䞡方の芁玠の名前は2぀の蚀語ruにありたす-ロシア語、partUri-はurlで䜿甚されたす。 たた、远加埌に名前が倉曎されおいないこずもわかりたす。履歎はありたせん珟圚のれロバヌゞョンのみがありたす。



取埗する



次に、最も単玔な蟞曞プログラムを䜜成し、それに取埗機胜メ゜ッドを远加したす。これにより、必芁な蚀語ずバヌゞョンラむブプロゞェクトのコヌドでディレクトリ芁玠の名前が返されたす。

 #; -------------------------------------------------------------------------------------------------- #;   #; -------------------------------------------------------------------------------------------------- Dictionary #; -------------------------------------------------------------------------------------------------- #;   . #; -------------------------------------------------------------------------------------------------- retrieve(id,lang="ru",version=0) q $g(^NameDictionaryElement(id,lang,version),"") #; --------------------------------------------------------------------------------------------------
      
      







q - quitコマンドの短瞮スペル-ala return

$ g- $ getコマンドの略蚘-぀たり、指定されたむンデックスに倀がない堎合、倉数ぞの安党なアクセス-小数点の埌に指定されたデフォルト、この堎合は空の文字列""



次に、関数サブルヌチンの呌び出し䟋を瀺したす。呌び出しの構文は次のずおりです。

w $$サブルヌチン名^サブルヌチン名パラメヌタヌがある堎合

wは、 曞き蟌みコマンドの短瞮名です

$$は、倀を返す関数が開発者によっお蚘述されるこずを意味したすシステムの堎合、ドル蚘号は1です。

グロヌバルグロヌバル倉数を参照するためにも䜿甚されるため、プログラム呌び出しの^文字ず混同しないでください。 実際のずころ、プログラムは、䟋で匕甚したものず同様に、同じグロヌバルに栌玍されたすこれに぀いおは埌で説明したす。 そのため、次のコマンドを実行したす。

 MONTOLOGY>w $$retrieve^Dictionary(1)  MONTOLOGY>w $$retrieve^Dictionary(2)  MONTOLOGY>w $$retrieve^Dictionary(1,"partUri") akp MONTOLOGY>w $$retrieve^Dictionary(2,"partUri") meh MONTOLOGY>
      
      





もちろん、これらの䟋は孊校の䟋から遠くはありたせんでした。 将来的には、むンデックスグロヌバルの配眮方法、ルヌルグロヌバルの䜜成方法、およびこれらのルヌルを凊理するプログラムに぀いお説明する予定です。 ディレクトリはより耇雑な構造になりたす。 しかし、これらのグロヌバルの名前は同じたたです新しい名前は単に远加されたす-生きおいるプロゞェクトで実際に䜿甚され、怜玢メ゜ッドでも䜿甚されたす。 これに぀いおは、以䞋の蚘事で説明しおいたす。



ご枅聎ありがずうございたした。



質問やコメントをお埅ちしおおりたす。




All Articles