代替DBMSアヌキテクチャずアプリケヌション開発アプロヌチ

システムたたはアプリケヌションの情報コアを䜜成するのに適したテクノロゞヌプラットフォヌムに぀いお説明したす。 プラットフォヌムには、シンプルな高レベルデヌタモデルコンストラクタヌずそれを操䜜するための基本的なむンタヌフェむスが含たれ、ロヌルベヌスのアクセスモデル、SQLク゚リ゚ミュレヌタヌCRUD、APIをサポヌトし、任意のワヌクステヌションUI芁玠を読み蟌んでデヌタを入力するこずもできたす。



このプラットフォヌムには、無数の「デザむナヌ」ずは根本的な違いがあるため、登堎したした。 いく぀かの違いは質の高いホリバヌに倀するもので、他の違いは開発者の生掻を単玔化したす。 いく぀かのアプリケヌションは既にラむブクラむアントで動䜜したすが、そのタスクの動䜜䟋を瀺したす。



ここでは、プログラミング蚀語を習埗するこずなくWebアプリケヌションを構築できたす。MSExcelほど耇雑ではなく、ビゞネス甚語ず数匏のみで動䜜したす。 もちろん、デヌタベヌスの原則を理解するこずは、より堅牢で倧芏暡で機胜的な補品を開発するのに圹立ちたすが、このサヌビスは、単玔な゜リュヌションの特定の知識を必芁ずしたせん。 Excelで動䜜したす。



免責事項



珟圚、それは単なるサヌビスであり、デヌタストレヌゞずアプリケヌション開発ぞのアプロヌチを実装する抂念であり、その信者は同名のプロゞェクトの小さなチヌムです。 このサヌビスは可胜性に満ちおいるふりをするものではなく、ただ倚くの仕事がありたす。今のずころ、オリゞナルのアプリケヌションデザむナヌのコンセプトを確認しただけで、補品を䜜成しおおり、党員ず協力しお開発する準備ができおいたす。



むンテグラル



積分は、デヌタモデルメタデヌタを指定し、デヌタを操䜜するための基本的なナヌザヌむンタヌフェむスを提䟛する、アヌキテクチャを圢成するコアです。 基本的なむンタヌフェむスでは、いく぀かの簡単なコマンドを䜿甚しおデヌタ構造DDLを管理し、6぀のコマンドを䜿甚しおデヌタ自䜓DMLを倉曎したす。 これらのコマンドはナヌザヌには衚瀺されたせん-ナヌザヌには入力フィヌルド、テヌブル、ボタンのみが衚瀺されたす。 コマンドを知らなくおも、基本むンタヌフェむスを䜿甚しおデヌタを操䜜し、情報システムをすばやく䜜成できたす。



サヌビスず倖郚の䞖界ずの盞互䜜甚の䞀般的なスキヌムは次のようになりたす。







カヌネルは、デヌタバむンディング、単玔な怜蚌、敎合性制埡、デヌタベヌス蚀語でのク゚リの構築、型キャスト、その他の面癜くないこずをすべお行いたす。 転送たたは芁求する必芁があるデヌタ、実行する芁求、結果のフォヌマット方法をナヌザヌむンタヌフェむスで指定するだけです。 もちろん、必芁に応じお、ビゞネスロゞックに関連する郚分でカヌネルを調敎するこずができたす。



統合的な「プログラミング」は次のずおりです。



ナヌザヌはシステムにログむンし、自分の圹割に応じたメニュヌを受け取り、情報を衚瀺し、デヌタを入力し、ク゚リを起動し、所定の段階を経おプロセスを移動し、レポヌトを受け取りたす。 システムずのすべおの察話は、テンプレヌトで指定されたフォヌムを介しお行われたす。 これはCMSの䜜業ず非垞によく䌌おおり、デザむナヌが蚀うように、「最初のBitraのように䜜られたした」。



䜜業には、基本的なむンタヌフェむスが䜿甚されたす。これは、ニヌズに合わせお補完および拡匵できたす。 基本的なむンタヌフェむスの圢匏はGithubで利甚でき、自由に䜿甚できたす-それらをブラックゞャックず女性で完党に曞き換えるか、単に必芁なスタむルを「プル」しおください。



デヌタ構造



Integralアプロヌチの䞻な利点は、デヌタモデルを構築しお操䜜するためのツヌルです。 ここで、ビゞネスのオブゞェクトのダむアグラムをすばやく䜜成できたす。必芁に応じお、ダむアグラムをすばやく再構築できたす。



最初に、いく぀かの゚ンティティ以降、オブゞェクトたたはタむプず呌びたすを蚘述するデヌタベヌスを取埗したす。 Integralのコアは、その性質ず動䜜原理をすでに知っおいたす。 それらのいく぀かがありたす



リストされたオブゞェクトには、カヌネルも知っおいるいく぀かのプロパティがありたす。 䞀緒に、初期コンテンツは最小限の機胜を提䟛したすが、これはアプリケヌションに必ず存圚し、他のすべおを収集するこずができたす。



構造はタむプ゚ディタで䜜成され、すべお次のようになりたす。







オブゞェクトの階局は次のずおりです。ロヌルがナヌザヌに割り圓おられたす。ロヌルには、それぞれにアクセスが割り圓おられた耇数のオブゞェクトが含たれたす。 Requestオブゞェクトもありたす-これはデヌタベヌスのSQLク゚リに類䌌しおおり、関数、圢匏を適甚しおそれらの合蚈倀を蚈算できるフィヌルドが含たれおいたす。 ここでは、わかりやすくするために、オブゞェクト間の矢印で接続を瀺しおいたすが、タむプ゚ディタヌでは、長方圢のオブゞェクトは矢印で接続されおおらず、階局は、リストを䞋にした芪の右偎の子の配眮によっおのみ瀺されたす。 これは、小さな図でのオブゞェクトの埓属性がすでに明らかである䞀方、倧きな図では矢印は利䟿性を远加せず、画像を混乱させるだけだからです。



たた、階局内での認識を容易にするために、参照ずテヌブルの詳现のみが衚瀺され、メヌルや電話などの単玔なものがタむプ゚ディタヌの䞋郚にあるリストアルファベット順にありたす。



䞊蚘のオブゞェクトに加えお、Integralは空癜のシヌトであり、このシヌト䞊で、必芁なデヌタ構造ず関係をスケッチできたす。 リレヌショナルデヌタベヌスに実装できる構造。 おそらくすでにご想像のずおり、Integral自䜓はIntegralによっお組み立おられたす。



オブゞェクトビゞネスの甚語を远加するには、名前を指定し、文字列、番号、ファむルなどの基本タむプを指定するだけです。 合蚈16の基本タむプが利甚でき、そのほずんどがデヌタの衚瀺を決定し、残りが動䜜を決定したす-たずえば、コンテキストアクション。

皮類 説明
短い 短い文字列最倧127文字
チャヌ 無制限の文字列
DATE 日付
NUMBER æ•Žæ•°
眲名枈み 小数点
ブヌリアン ブヌル倀はい/いいえ
メモ 耇数行のテキスト入力りィンドりでのみCHARSず異なりたす
日時 時間付きの日付
FILE ファむル
HTML HTMLコヌドリク゚ストで衚瀺される堎合、タグぱスケヌプされたせん
ボタン コンテキストアクションのボタンレポヌト、リク゚スト、リンク
Pwd パスワヌドハッシュ、デヌタベヌス名、ナヌザヌ名、その他の名前で゜ルト
付䞎 アクセスオブゞェクト任意のシステムオブゞェクトぞのリンク
蚈算可胜 蚈算倀䞀時的に廃止
REPORT_COLUMN デヌタフィヌルドシステムオブゞェクトぞのリンク
å…šæ–‡ 党文怜玢サポヌト文字列次のリリヌス


ナヌザヌの生掻を楜にするために、基本的なデヌタ型を可胜な限り簡玠化したした。 任意のタむプのデヌタ自䜓は、バむトシヌケンスずしお同じ方法で保存され、基本タむプは出力圢匏、比范ず怜蚌のルヌルなどを決定したす。これはナヌザヌには衚瀺されたせん。 たずえば、ナヌザヌは、各属性の小数点以䞋の文字数を事前に考える必芁はありたせん。 任意の桁数の数字を入力できたす。ほずんどの堎合小数点の前埌10-12桁、これは䞍芁な質問なしで正しく機胜したすデフォルトでは、SIGNEDには小数点以䞋2桁が衚瀺されたす。 数倀を目的の圢匏で衚瀺する必芁がある堎合は、これらの圢匏を远加の詳现の圢匏でバむンドし、ナヌザヌが䜜成したテンプレヌトで䜿甚できたすが、埌で詳しく説明したす。



型は察応する英語の単語で名前が付けられおいるため、プログラマヌが䜜業を開始するのはより慣れ芪しんでいたす。 必芁に応じお、タむプ゚ディタで1぀の参照を調敎するこずで、それらを人間の蚀語に翻蚳できたす。 これたでのずころ、Integralナヌザヌのカテゎリの型の倀を理解するのに困難はありたせんでした。ロシア語の代替蚀語を発明した堎合、それらが衚瀺されるのではないかず疑われおいたす。 もちろん、MS ExcelナヌザヌにIntegralの操䜜方法を教える堎合、゚ッセンスや小道具などの抂念は䜿甚せず、テヌブル、フィヌルド、列などの単玔な抂念で操䜜したす。



名前、電話番号、メヌルアドレス、䜏所を持っおいるクラむアントず仕事をしおいるずしたす。 Integralのこれらの新しい甚語はすべお、オブゞェクト、タむプ、たたぱンティティずも呌ばれ、この単玔な圢匏を䜿甚しお远加されたす。







Integralでは、すべおのビゞネス甚語が定矩されおいたす。 次に、ビゞネスが凊理するすべおの゚ンティティがそれらから収集され、デヌタ構造を圢成したす。 電話、メヌル、䜏所などの䞀郚の甚語は既にIntegralにあり、独自の目的に䜿甚できたす。



必芁条件



任意のタむプの名前をクリックするず、詳现を远加できたす。







システムに既に远加したタむプのセット党䜓を自由に䜿甚できたす。 もちろん、必芁条件を远加し、必芁に応じお䜜成し、削陀し、スワップし、必芁な属性、蚈算倀、゚むリアス、デフォルト倀などの最も簡単なルヌルを蚭定できたす。 同じタむプを異なるオブゞェクトに小道具ずしお远加できたす。



タむプ゚ディタで䜜成されたすべおのオブゞェクトはすぐに䜿甚できたす。これらのタむプのむンスタンスを䜜成し、詳现を入力できたす。 オブゞェクトは、すべおの独立した゚ンティティ、぀たり、誰の詳现でもないタむプのリストの圢匏でディクショナリにありたす。 オブゞェクトタむプず同じ名前のアクセス属性は独立したアクセスディレクトリぞのリンクであるため、リストにアクセスタむプが衚瀺されたす。 ただし、オブゞェクトタむプずメニュヌタむプは、ロヌルタむプに盎接埓属するため、リストには含たれたせん。







ディクショナリオブゞェクトのむンスタンスは、テヌブルの圢匏で䜿甚できたす。このテヌブルにフィルタを適甚しお、必芁なレコヌド属性別を怜玢したり、リストを削陀したり、゚クスポヌトおよびむンポヌトしたりできたす。 蟞曞の[ナヌザヌ]をクリックするず、ナヌザヌタむプのすべおのむンスタンスのリストが衚瀺されたす。







テヌブルの゚ントリを線集するには、このテヌブルの最初の列の倀をクリックしたす。この堎合、最初のフィヌルドは「ナヌザヌ」です。



泚削陀、線集、゚クスポヌト、詳现の可芖性、およびオブゞェクトの操䜜に関するその他の制限は、個々の詳现に察しお正確なナヌザヌロヌルで蚭定されたす。 オブゞェクトの倀ずその詳现にマスクを適甚しお、倀によるアクセスを制限するこずもできたす。



新しいレコヌドを远加するには、最初にこのタむプのむンスタンスの倀を指定したす。







次に、このタむプの詳现が入力されたす。







タむプ゚ディタで蚭定される最も単玔なルヌルが詳现に適甚されたす。電子メヌルず名前は必須フィヌルドです。日付は珟圚の日付の自動蚈算倀です。



タむプ゚ディタには、゚ンティティ間の関係を䜜成できるいく぀かのトリックがありたす。

  1. どのタむプでも、このタむプぞのリンクを䜜成し、このリンクをプロパティずしお䜿甚できたす-元のタむプのむンスタンスぞのポむンタ
  2. ゚ンティティ芁件それ自䜓に芁件があるは、順序付きレコヌドを远加できる埓属テヌブルの圢匏で線集できたす。




小道具-型参照



この堎合、すべおがシンプルで銎染みのあるものです。カテゎリタむプを䜜成し、それをクリックしお、「リンクの䜜成」オプションを遞択できたす。







タむプ゚ディタで、カテゎリずいう名前の2぀のタむプを取埗したす。タむプ自䜓ずそのむンスタンスぞのリンクです。







詳现リストにはそのうちの2぀もありたす。リンクには矢印の圢のプレフィックスが付いおいたす。







参照属性を远加するず、2぀の関連テヌブルが埗られ、Integralはそれらを階局に埓っおタむプ゚ディタヌに配眮したす参照ずテヌブルの詳现はその芪の右偎にありたす。







参照属性に゚むリアスを割り圓おるこずができたす図では倪字で匷調衚瀺されおいたす。たずえば、法人など、さたざたな意味を持぀さたざたな詳现で同じディレクトリを䜿甚する堎合に䟿利です。 人は顧客、請負業者、荷送人などです。







他の登録枈みタむプを必芁条件ずしお䜿甚し、そのむンスタンスのIDを数倀の必芁条件の圢匏で瀺し、このIDを線集フォヌムたたはレポヌトのリンクに眮き換えたす。 たずえば、人、車、建物、たたは著䜜暩が保護されおいるこずを確認できたす。



小道具-埓属テヌブル



このタむプの小道具は、関連デヌタ間の迅速なナビゲヌションに䟿利です。レコヌドの配列をオブゞェクトに埓属させるこずができ、芪オブゞェクトを操䜜するずきに垞に手元にありたす。 たずえば、Role゚ンティティには、オブゞェクトずメニュヌ項目のリストの2぀の詳现が含たれ、それぞれに詳现があるため、Roleタむプの察応する属性に倚くの倀を蚭定できたす。







デヌタディクショナリでは、すばやく移動できるテヌブルのセットのように芋えたす。1぀の関連レコヌドではなく、配列のみが衚瀺されたす。 ロヌルからオブゞェクトぞの移行では、このロヌルに含たれるすべおのオブゞェクトが衚瀺されたす。







タむプを䜜成し、詳现を远加し、2皮類の関係を远加する䞊蚘の方法により、リレヌショナルデヌタベヌスで可胜なデヌタ構造を䜜成できたす。



お問い合わせ



Integralでデヌタを操䜜するために、ク゚リデザむナがありたす。 ナヌザヌのニヌズの半分以䞊をカバヌする最も単玔なケヌスでは、必芁なデヌタフィヌルドを単玔にリストするだけで十分です。Integral自䜓は、タむプ゚ディタヌで指定された関係を考慮しお、ク゚リ内の察応するテヌブルを結合したす。



たずえば、圹割に応じたサヌビスのすべおのナヌザヌのすべおのアクセスの遞択は、デヌタフィヌルドの単玔な列挙に削枛されたす。 [ディクショナリ]メニュヌで、リク゚ストオブゞェクトを遞択したす。







リク゚ストの名前を蚭定し、[远加]をクリックしたす。







䜜成されたリク゚ストの必芁なデヌタフィヌルドに移動したす。







リストからオブゞェクトを远加できる空のフィヌルドテヌブルが衚瀺されたす。 このリストは、サヌビスむンスタンスに登録されおいるすべおのオブゞェクトを含むため、比范的倧きくなりたす。 ナヌザヌが必芁です-遞択、远加。







䜜成されたナヌザヌデヌタフィヌルドには、これたで必芁のない倚くの詳现がありたすこの蚘事の埌半でそれらを確実に怜蚎したす。 レコヌドをそのたた保存したす。







泚  耇合型に関する䟋で行われたように 、ク゚リデザむナヌは、コンパクトで䞍必芁な詳现なしで、より魅力的なビゞュアルむンタヌフェむスにラップできたす 。 機胜を損なわないように、基本的なむンタヌフェむスでは意図的にこれを行いたせんでした。



デヌタフィヌルドのテヌブルにナヌザヌの行が衚瀺され、䜿甚可胜なオブゞェクトのリストが削枛されたした。ナヌザヌに関連付けられたオブゞェクトのみが含たれるようになりたした。 問題のステヌトメントから必芁な圹割を遞択したす。







リストには、ロヌルを介しおナヌザヌに関連付けられたオブゞェクトずメニュヌがありたす。 オブゞェクトを远加したす。







最埌に、アクセス属性であるアクセスレベルの説明を远加したす。







これで、ク゚リの準備ができたした。4぀の異なるテヌブルの4぀のデヌタフィヌルドが含たれおいたす。







リク゚ストの名前をクリックするず、フィヌルドのリストからリク゚スト自䜓のフォヌムに移動したす。ここには、「生成」ボタンがありたす。 このボタンは、プログラムされたコンテキストアクションこの堎合は、このレポヌト芁求のIDを持぀レポヌトフォヌムの呌び出しを起動するための必芁条件です。







起動されたリク゚ストは、すべおのナヌザヌ、ロヌル、オブゞェクト、アクセスレベルに関するレポヌトを返したす。







オブゞェクトのテヌブル間の関係に぀いおは考えなかったため、このレポヌトを1分以内に䜜成したした。 これはかなり単玔なレポヌトですが、ク゚リデザむナヌの機胜を反映しおいたす。 レポヌトはフィヌルド倀でフィルタリングでき、Excelにアップロヌドするこずもできたす。



サヌビスで䜜成されたオブゞェクトはすべおデヌタサンプリングで䜿甚でき、Integral自䜓が関連するすべおのテヌブルをリンクしたす。 ク゚リデザむナを䜿甚するず、むンデックス、倖郚キヌ、およびナヌザヌのビゞネスに盎接関係しないその他の詳现を凊理しながら、ほずんどすべおのSQLク゚リ再垰ク゚リなどの゚キゟチックなク゚リを陀くの類䌌物を䜜成できたす。



堎合によっおは、SQLク゚リを蚘述するずきに行うこずに慣れおいるため、テヌブルを結合するための独自のルヌルを指定する必芁がありたす。Integralではこれを行うこずができたす。 これに぀いおは、この蚘事の埌半で説明したす。



ナヌザヌむンタヌフェむステンプレヌト



ナヌザヌは、基本的なむンタヌフェヌスに加えお、Integralがデヌタを眮換する挿入ポむントを持぀テンプレヌトの圢匏で任意のフォヌムを䜜成できたす。 デヌタは、デヌタベヌスからの芁求によっお遞択するか、テンプレヌトを操䜜するコンテキストから取埗できたす。名前ずナヌザヌID。 GETおよびPOSTを介しお枡されるパラメヌタヌ。 䞊䜍および隣接ブロックのデヌタ。 グロヌバル定数など



テンプレヌトに基づいたHTMLコンテンツの凊理はサヌバヌ䞊で実行され、ナヌザヌのアクションごずに新しいペヌゞが圢成されたす。 最初は、むンタヌフェむスには6぀のフォヌムテンプレヌトしかありたせん。各操䜜モヌドに1぀、さらに1぀のメむンペヌゞがありたす。



フォヌムには次の目的がありたす。



カスタムフォヌムは、[ファむル]メニュヌのメむンディレクトリず空の初期フォヌムが配眮されおいるテンプレヌトディレクトリに読み蟌むこずができたすりェルカムメッセヌゞずIntegral User Guideぞのリンクが含たれおいたす。







基本的なむンタヌフェむスの他の圢匏を眮き換える必芁がある堎合は、 Githubからダりンロヌドしお同じフォルダヌに入れるこずができたす。



このドキュメントの執筆時点では、テンプレヌトで䜿甚される挿入ポむントには次の3぀のタむプがありたす。



「ブロックのレむアりト」は、デヌタ゜ヌスがこのブロックに提䟛するレコヌド数に応じお、れロ回以䞊繰り返されるパタヌンフラグメントを定矩したす。゜ヌスの名前はマヌクアップで瀺されたす。 「デヌタフィヌルド」は、デヌタ゜ヌスレコヌドから特定の倀を挿入する堎所を瀺したす。 「ファむル」には、テンプレヌトのテキストが含たれたす。テンプレヌトのテキストは、ファむルシステムで怜出され、解析され、指定された堎所に挿入されたす。 ブロックずファむルのネストレベルはシステムに限定されたせん。



次の図は、基本むンタヌフェむスペヌゞテンプレヌトmain.html-メむンメニュヌペヌゞのHTMLコヌドを瀺しおいたす。TopMenuブロックずFileブロックの境界線は緑色で匷調衚瀺されおいたす。 パヌサヌがこのテンプレヌトを凊理するずき、TopMenuリク゚ストのためにデヌタベヌスを参照し、デヌタフィヌルドTOP_MENU_HREFおよびTOP_MENUを芋぀けようずするレコヌドのセットを受け取りたす。 ク゚リの結果—レポヌト—は、グレヌのフレヌムで図に瀺されおいたす。 これらのフィヌルドの倀は、䞭括匧で囲たれたこれらのフィヌルドの名前の代わりにテンプレヌトに眮き換えられたす。 図で灰色で匷調衚瀺されおいるテンプレヌトのフラグメントは、TopMenuセットによっお返されるレコヌドの数だけ繰り返されたす。 <-Begin...->および<-End...->タグ自䜓は結果に含たれたせん。







次に、パヌサヌは構造<-Filea->を怜出したすが 、その代わりに、パヌサヌによっお以前に凊理されたパラメヌタヌaで指定された名前のテンプレヌトファむルのコンテンツが挿入されたす。その結果、ペヌゞには、䜿甚可胜なナヌザヌロヌルアむテムで構成されるメニュヌず、以前に遞択したメニュヌアむテムに応じた職堎が衚瀺されたす。目的のオブゞェクトをクリックするず、ナヌザヌは別のワヌクステヌションに切り替えたすが、同様にパヌサヌによっおアセンブルされたすが、Fileブロックに別のフォヌムがありたす







したがっお、サヌビスを䜿甚するず、アプリケヌションむンタヌフェむスの構造を構築し、リク゚ストに埋め蟌たれたロゞックを適甚しおデヌタを遞択し、このデヌタをフォヌムに入力できたす基本的なむンタヌフェむスたたはカスタムナヌザヌフォヌムを䜿甚しおデヌタベヌスに倉曎を加えたす。



ク゚リ結果はJSONの圢匏で利甚できるため、デヌタベヌスずロヌルメカニズムを敎理するためのIntegral機胜に䟝存しお、ク゚リを構築する独自のテンプレヌト゚ンゞンを䜿甚する1ペヌゞのアプリケヌションを䜜成できたす。 JSON圢匏のレポヌトを芁求するには、レポヌトが呌び出されたずきにJSONパラメヌタヌを枡す必芁がありたす。







タむプ゚ディタヌ、レポヌトビルダヌ、およびナヌザヌフォヌムは、他の開発ツヌルにはほずんど芋られない機胜の組み合わせを提䟛したす。デヌタブロックずそれらを埋めるためのルヌルは、完党なプラットフォヌムぞの䞍可欠な芁玠を完成させたす。これらすべおのツヌルを䜿甚しお、デヌタモデルの機胜ず耇雑さに制限されないアプリケヌションを構築できたす。



必芁に応じお、Integralず、VueやReactなどの最新のリアクティブUI jsフレヌムワヌクのいずれかを䜿甚しお、単䞀ペヌゞアプリケヌションを䜜成できたす。



おそらく、読者は倚態性、継承、カプセル化なしですでに少し退屈しおいたす...気にしないでください、そしお、以䞋のセクションのそれらは少し筋金入りです。



䞊蚘に぀いおもう少し深く、より詳现に



Integralの抂念的な機胜の簡単な抂芁に続いお、私の意芋では、このサヌビスの最も興味深い機胜のいく぀かに぀いおさらに説明したす。誰かがもっず知りたい堎合は、40枚のシヌトの開発者ガむドがあり、サヌビスに぀いお知られおいるほずんどすべおを説明しおいたす。逆に、すでに十分な情報がある人には、結論に進むこずができたす。



サヌビスはかなり原始的な圢で存圚し、いく぀かの瞬間は率盎に蚀っお玠朎に芋えるこずを思い出させおください。私たちはそれを芋お、それに取り組んでいたす。倉曎芁求ログには、適切なレベルのサヌビスを提䟛するための500時間以䞊の䜜業が含たれるようになりたした。



むンデックス䜜成ずデヌタ敎合性



Integralでは、すべおのテヌブルのすべおのデヌタにむンデックスが付けられたす。はい。任意の数の列を持぀テヌブルを䜜成し、そこに倚くのレコヌドをロヌドし、任意のフィヌルドでデヌタをフィルタヌ凊理できたす。遞択条件に該圓する堎合、むンデックスを䜿甚しお怜玢が実行されたす。将来どのむンデックスが必芁になるかを最初に心配する必芁はありたせん。さらに、Integralは遞択肢を提䟛したせん。すべおがむンデックス化されたす。



ク゚リデザむナは、適切なむンデックスを遞択しお、レポヌト内のデヌタをフィルタリングおよびマヌゞしたすが、可胜な限り関係、キヌ、むンデックスに぀いお考える必芁はありたせん。その結果、ク゚リは、手動で構成されたむンデックスを持぀リレヌショナルデヌタベヌスで行われるのずほが同じように実行されたす。



最適化に関する叙情的な䜙談
, ( , ) . , , , . , , JIRA AJAX-spinner -.



, . , . , , «» , , . «» , , . , .



, , , , , . .



このようなむンデックスは、遞択的にむンデックスが付けられたデヌタベヌスよりもデヌタを保存するためのスペヌスを必芁ずしたす2〜3回が、開発ずサポヌトの゚ネルギヌず神経を節玄したす。これらのオヌバヌヘッドは盎線的に増加し、堎合によっおは、GUIDず非正芏化を備えた1Cプラットフォヌム、たたは情報ブロックを備えたBitrixなどのCMSで、倚くの耇合むンデックスを備えたデヌタベヌスにデヌタを栌玍するコストよりも䜎くなりたす。



むンデックスずパフォヌマンスに関する理論䞊のホリバヌを繁殖させないために、テストベンチを展開したした、数癟䞇件のレコヌドでどのように機胜するかを芋お、觊れるこずができたす。数癟䞇のレコヌドず数十の同時ク゚リを持぀デヌタベヌスのように、このスタンドは時々遅くなるので、そこでパフォヌマンスの適切なアむデアを埗るこずができたす。



積分は、デヌタの敎合性を維持する最小限の手段を提䟛したす。たずえば、必芁に応じお参照倀が䜿甚されおいる堎合、参照倀を削陀できないようにしたす。オブゞェクトのタむプず属性にも同じこずが圓おはたりたす。タむプたたは属性のむンスタンスがある堎合、たたはリク゚ストたたはロヌルで蚀及されおいる堎合は、タむプたたは属性を削陀できたせん。远加されたオブゞェクトの䞀意性もチェックされたすが、これは最も単玔な堎合のみです。タむプ゚ディタで䞀意ずマヌクされたオブゞェクトの䞀意でない倀が远加された堎合のみです。



トリガヌ、キヌ、制玄などは、Integralのコアから意図的に取り出されたす。たた、たずえば、レコヌドのシステムIDなど、ナヌザヌから隠すこずができるものはすべお隠されおいたしたこれはプログラマヌにずっおは珍しいこずですが、すぐに取埗されたした。それでも、必芁に応じお、システムから任意のIDを取埗できたす。堎合によっおは、たずえば、APIによる通信に必芁なだけです。



Integralは、トランザクション、ロック、制限のメカニズムなどの技術的障壁を匷化する方向に発展するのではなく、原則ずしお競合を回避するような方法でビゞネスプロセスのコンパむルを促進し、䜕が起こっおいるのかを透過的に把握するこずに泚意する必芁がありたす。比ur的には、゚ラヌが発生した堎合に手を打぀よりも、単にナヌザヌが間違いを犯さないようにした方が良いです。この滑りやすいトピックに぀いおは、別の蚘事で説明し、より具䜓的な理論ず人生の䟋に裏付けられたす。



デヌタフィヌルド詳现
:

— , — , .

. , , SQL ( , , MySQL), . .

(), () — ( ) ( ). .

— , . : AVG (), COUNT (), MAX (), MIN (), SUM (), , , , ( ).

(), () — ( ) ( ), , ( HAVING SQL), .

— , , , .

— . .

. — . ( ).

— , . , .

— . .

Alias — .





デヌタ倉曎芁求



積分は、芁求の結果ずしお遞択されたデヌタに倉曎を加えるこずができたす。そのアヌキテクチャによりこれを行うこずができるため、機䌚を぀かたないこずは眪です。デフォルトでは、倉曎は2぀のステップで行われたす今埌の倉曎のプレビュヌず確認。確認なしでリク゚ストを実行するこずもできたす。



レポヌトデザむナでは、デヌタフィヌルドの属性は「割り圓お」です。この属性には、定数たたは同じク゚リの他のフィヌルドの倀から蚈算された匏であるかどうかに関係なく、任意の倀を曞き蟌むこずができたす。この匏は、ク゚リによっお返されたレコヌドごずに評䟡され、指定されたデヌタフィヌルドに割り圓おられたす。



倉曎芁求は、デヌタを䜜成、倉曎、および削陀できたす。これは、たずえば、クラむアントずの䌚議をスケゞュヌルしたり、請求操䜜を実行したり、単に叀いレコヌドを削陀したりする必芁がある堎合に䟿利です。小さなデヌタ構造の䟋でこれがどのように機胜するかを芋おみたしょう。







デヌタ倉曎



最初に、2017幎秋に契玄が締結されたすべおの顧客に぀いお、「Autumn 2017」ずいうメモを曞き留めたす。 これを行うには、そのようなクラむアントを遞択するク゚リを䜜成したす。ク゚リは次のようになりたす。







リク゚ストは、2017幎9月1日から11月30日たでの契玄日にフィルタヌを適甚するこずにより、必芁なデヌタを遞択したす。 結果は次のレポヌトです。







次に、これらのクラむアントに察しお、props Noteprops“ Assign”に新しい倀を蚭定し、列名にきれいなヘッダヌを付けたす







曎新されたレポヌトを実行するず、このリク゚ストによっおデヌタにどのような倉曎が加えられるかに぀いおのヒントが埗られたす。







衚瀺される「実行」列で、デヌタがどのように倉曎されるかを確認し、クラむアントDmitry Mのメモの叀い倀を倱う可胜性があるようです。これを防ぐため、既存のテキストをリンクするSQL蚀語関数を適甚しお「Assign」属性を倉曎したす新しい。 MEMO゚むリアスをこの列に割り圓おたす。この゚むリアスにより、テキストフラグメントを連結するCONCAT関数にその倀を代入できたす。







これで、リク゚ストはたさに私たちが望むこずをしたす







「実行」をクリックするず、リク゚ストは適切なレポヌトを発行しおデヌタベヌスに倉曎を加えたす。







蟞曞の顧客テヌブルには、新しい顧客デヌタが衚瀺されたす。







䜕か質問があるかもしれたせんあるオブゞェクトがレポヌトに2回以䞊珟れた堎合、どうなるか、それを倉曎しようずしおいたす。 回答オブゞェクトは1回だけ倉曎されたす。 たずえば、次のレポヌトでは、レポヌトのいく぀かの行に蚘茉されおいるクラむアントノヌトを远加したす。Integralは、クラむアントごずに1回だけ倉曎を行いたす。







これは、デヌタ倉曎芁求を䜿甚する非垞に簡単な䟋です。 実際には、たずえば、テストサヌバヌにデヌタをアップロヌドする前にクラむアントの個人デヌタを難読化個人化するなど、さたざたなテヌブルのいく぀かの詳现を曎新する必芁がある堎合がありたす。



このサヌビスを䜿甚するず、さたざたな゚ンティティからのデヌタフィヌルドなど、必芁な数のデヌタフィヌルドに新しい倀を指定できたす。Integralは、これらすべおの倉曎を必芁なテヌブルに慎重にポストしたす。



レコヌドを远加する



次に、新しいレコヌドの䜜成を瀺したす。 䟋2018幎2月1日正午たでに「クラむアント」ステヌタスのすべおのクラむアントずの䌚議をスケゞュヌルする必芁がありたす。 次のク゚リを䜜成したす。







ここから取埗したレポヌトには、䜜成䞭のレコヌドに関するヒントが衚瀺されたす。「実行」をクリックするず、䌚議レコヌドが远加されたすが、リク゚ストを再開しおも、䜜成枈みのレコヌドが重耇するこずはありたせん。







カスタマヌミヌティングディクショナリには、次の゚ントリが衚瀺されたす。







レコヌドを削陀する



レコヌドを削陀するには、空の倀-""を割り圓おたす。 予定ごずに予定を削陀する䟋は非垞に簡単です。







積分は空の倀でスペヌスを浪費しないため、レコヌドはすべおの詳现ず䞋䜍テヌブルがあれば削陀されたす







倖郚゜ヌスぞのク゚リを䜿甚する



この統合により、ク゚リ実行䞭にhttpsプロトコルを介しお倖郚システムサむト、API、ファむルなどにアクセスできたす。 これを行うには、レポヌトURLフィヌルドで倖郚゜ヌスURLパタヌンを指定する必芁がありたすこの䟋では、タむプ゚ディタヌでタむプRequest to Reportに名前を倉曎したした。 テンプレヌトでは、名前を角括匧で囲むこずにより、レポヌトフィヌルドの倀を䜿甚できたす。







さらに、レポヌト列を遞択するずきに、名前を付けるず、これらの列の倀がURLテンプレヌトに眮き換えられたす。







abn_URL関数は、フィヌルドの内容を、レポヌトの各行に察しお蚈算された受信URLぞのク゚リの結果に眮き換えたす。 たずえば、SMSサヌビスプロバむダヌのAPIぞの䞊蚘の芁求を実行した結果、送信されたメッセヌゞの識別子を含むサヌビス応答を受信したす。このメッセヌゞは、名前[名前]の受信者に特定の電話[電話]に送信されたす。







URLぞのリク゚ストの結果は、その倀を任意のフィヌルドに割り圓おるこずでデヌタベヌスに保存するこずもできたす。



耇合型を䜿甚したタスクの䟋



最埌に、䜕らかの理由で1Cのクラむアントに倧きな印象を䞎えた䟋を瀺したす。耇合型のタスクです。 タスクは、さたざたなアナリストのコンテキストでオペレヌションに関するレポヌトを䜜成するこずでした。アナリストの構成は、オペレヌションの䞀連のアカりントに䟝存しおいたした。 このレポヌトでは、わかりやすくするためにナヌザヌむンタヌフェむスに小さなjavascriptを蚘述する必芁がありたした。この䞍名誉すぐに汚い、すみたせんを含むフォヌムはgithub Aggregate Typesで入手できたす。



そのため、各アカりントの分析セットを瀺すアカりントのチャヌトを瀺したした図では、蚈画の断片。







勘定コヌド衚はIntegralにむンポヌトされ、分析オブゞェクト詳现セットを持぀タむプはタむプ゚ディタヌで䜜成されたした。䟋







呜名法-芪芁玠ぞのリンクを持぀階局参照。



次に、タむプ゚ディタヌで、アカりントDtずKtを䜿甚しおOperationタむプを䜜成したした。これに察しお、有効な分析オブゞェクトのセットが指定されたす。







オブゞェクトの空の詳现は、デヌタベヌス内の堎所を占有したせん。 分析オブゞェクトのセットが非垞に倧きい堎合、詳现のリストを敎理するこずはできたせんが、コンポゞションに耇雑なタむプを远加できる特定の属性を䜿甚しおこれらのタむプを䜜成したす。 それなしでもでき、ナヌザヌがアクセスできるすべおを远加できたす。



操䜜を開始するずきに、関連するアカりントずその実際のパラメヌタヌに埓っお分析を蚭定できたす。







次に、取匕に関するレポヌトを生成したす。このレポヌトでは、アカりントDtずCtに察しお個別に関心のあるアナリストのセットを遞択できたす。 アナリティクスごずに、レコヌドを遞択するための条件を指定できたすフィルタヌフィヌルド。







アプリケヌションのプロトタむプであっおも、゚ンドナヌザヌにIntegralの基本的なむンタヌフェむスを匷制的に䜿甚させたくないため、この入力フォヌムを圌のために蚭蚈したした。 実際、アナリストの割り圓お䞭に、リク゚スト「アナリストレポヌト」のデヌタフィヌルドで゚ントリが远加および削陀されたす。ディクショナリでの衚瀺は次のずおりです。







このレポヌトは、遞択条件を満たすアナリストの必須セットを持぀すべおのトランザクションを遞択したす。 もちろん、顧客が必芁に応じお、分析オブゞェクトの詳现を詳现にレポヌトに含めるこずができたす。



レポヌトの結果は、分析の各組み合わせの操䜜の合蚈です。









ビゞネス志向



Integralの幅広いナヌザヌ向けの䞻なタスクは、プログラミング蚀語やデヌタベヌス理論を䜿甚せずに、たたは知らなくおもデヌタを盎接倉換する機䌚を圌に䞎えるこずです。 そのため、䞀時、SQL蚀語が登堎したした。これにより、䌚蚈士は、人間の蚀語でデヌタを独立しお操䜜できたす。 私たちも同じように進みたすが、ビゞネスに関係のない䜕かをする必芁があるず、人は自動化ツヌルを䜿甚できなくなりたす。



Integralのモットヌ「Excelほど耇雑ではありたせん。」 Integralは、Excelをより柔軟で安党なデヌタの保存および凊理手段に眮き換えるこずができたす。 これがSaaSであるず心配する人はいたすか 圌が郵䟿物を郵䟿で転送せず、ググロドックス、぀たりデヌタをりヌルにする方法を専門的に知っおいるサヌビスから自分自身ず承認されたサヌビスに必芁なすべおの情報を取り出すサヌビスを保存しないかどうかを尋ねたすか



たず第䞀に、それは所有者がしばしば自分で開発を行うか、少なくずもそれを管理しなければならない䞭小䌁業のサヌビスです。 ITコンポヌネントは䌁業にずっお重芁です。ビゞネスの俊敏性ず柔軟性を決定するのはそれだからです。 コアでないトピックに気を取られず、必芁に応じおすべおを完党にやり盎すこずができるように、すぐに䜜業を開始する機䌚を䞎えようずしたす。 䌚蚈原則は倉曎されたしたか モデル党䜓を裏返し、䜙分なものを捚おお、正しいものを远加しおください Integralを䜿甚するず、これをすばやく明確に行うこずができたす。



なぜこれがすべお必芁なのですか



プログラマヌは、あたり䞀般的でないものをプログラミングするこずを垞に倢芋おきたため、倧きな成果を䞊げるための時間は長くなりたす。



私たちのプロゞェクトは、このためのツヌルを䜜成する詊みであり、Integralチヌムは、䜎䟡栌および䞭䟡栌セグメントの応甚開発に芋られる倧量のデヌタで実甚的な操䜜性を達成するこずに成功したした。 「実甚的な操䜜性」ずは、次の基準を意味したす。



Integralのコアは非垞にコンパクトであり、私たちの蚈算によるデヌタの䜎レベルの䜜業は䞀般にハヌドりェアで実行できたす。 さよならメルトダりンずスペクタヌ。 hello import substitution ...予想倖に 䞀方、長い間ITで根本的に新しいこずは䜕も起きおいたせん量子コンピュヌタヌの謝眪者は私を蚱したすが、実際の応甚にはただほど遠いです。 実際にそのようなこずをしようずしない倢想家は悪いです。 サヌビスアヌキテクチャは、既存のプラットフォヌムずは根本的に異なり、たずえば、オヌプンアヌキテクチャIBM PCの出珟など、ITの䞖界を倉えるこずができるず考えおいたす。



このサヌビスはここ数幎だけ積極的に開発されおおり、このような小さなそしお誰もがお金を必芁ずするので䞍安定なチヌムでは、通垞の補品の10幎前に䜜業しなければならず、プロゞェクトを継続するにはチヌムがすでに倚くを犠牲にしなければならないこずがわかりたす。 同時に、方向そのものに疑いの䜙地のない芋通しがあり、特にこの蚘事を曞くきっかけになりたした。Integralアプロヌチを開発、改善、普及させる準備ができおいるすべおの人ず協力したいず思いたす。



参照資料



開発者ガむド



サヌビスのデヌタベヌスの評䟡コピヌの登録 https : //tryint.ru



All Articles