ツリーのようなDBMS

データのリポジトリとして、ツリーのようなDBMSを使用した経験のあるすべての人が議論に招待されます。 ツリー構造の開発の経験、インデックスツリーの構築の詳細の説明、およびデータウェアハウス内でのフルテキスト情報検索のアルゴリズムを共有することは有益です。



コンピュータシステムは、交換を最適化するために、メモリとディスクの間をブロックの形で交換するため、ディスクにデータを格納するアトミック要素はブロックです。 多くのDBMS(同じORACLEとMSSQL)が実際にデータをBツリーに保存するのは秘密ではありません。 Bツリーは、階層的に配置された論理的に接続されたブロックのセットであり、各レベルでブロックが定義され、各ブロックには同じ数の子孫レベルがあります。 Bツリー操作アルゴリズムの説明は、このブログの範囲外です。



リレーショナル、オブジェクト、または直接アクセスは、論理モデルによって提供されます。 実際のストレージに可能な限り近い論理データモデルを合理的に使用すると、他の論理モデル(SQLなど)を使用するよりも簡単かつ迅速に低レベルデータを処理できると想定しますが、データアクセスメカニズムの開発レベルの要件は大幅に増加します。 直接アクセスは論理ツリーで表すことができます。 論理データツリーの例は、キャッシュDBMSのグローバルです。



個人的な経験から、ツリーのようなデータ構造(グローバル)の使用例をいくつか示します。





論理ツリーを使用すると、不完全であいまいなサブジェクト領域を記述するのに役立ちます。サブジェクト領域に関する情報は、システムの使用プロセスで補足されます。 そのような主題領域の例は、 新聞広告です。 サブジェクトエリアの拡大は、新しいカテゴリの追加(最初は車の広告のみでしたが、将来は不動産、仕事、デートなどのセクションがあります)と、すでに説明したカテゴリの知識の洗練と増加(動的速度特性)の両方により可能です車、質量寸法など)。 異なるカテゴリが互いに交差していると仮定します(最初の説明の時点で既知または未知)。



グローバルの形式でデータ構造を説明します。 以下の説明では、以下を除いてサービスワードとシンボルはありません。

  1. s -setコマンド
  2. ^ -グローバル(論理ツリー)のシンボル
  3. [] -名前空間(リモートサーバーで定義可能)
  4. $$$ -ユーザー定数


車両構造の説明

//---------------------------UniVehicleModel---------------------------------------

//

s ^[$$$MEDIA]$$$mBodyMediaGlobal($$$mType,"UniVehicleModel","@p","makeId")="id."



//

s ^[$$$MEDIA]$$$mBodyMediaGlobal($$$mType,"UniVehicleModel","@p","modelId")="id."



//

s ^[$$$MEDIA]$$$mBodyMediaGlobal($$$mType,"UniVehicleModel","@p","year")="ta."



//

s ^[$$$MEDIA]$$$mBodyMediaGlobal($$$mType,"UniVehicleModel","@p","bodyTypeId")="id."









広告の説明(自動車のみ)

//----------------- ------------------------------------

//CarClassified

s ^[$$$MEDIA]$$$mBodyMediaGlobal($$$mType,"CarClassified")="variationType"

s ^[$$$MEDIA]$$$mBodyMediaGlobal($$$mType,"CarClassified","@t")="Classified"



//--------------------------------Classified---------------------------------------------

//

s ^[$$$MEDIA]$$$mBodyMediaGlobal($$$mType,"Classified","@p","Price")="enclosure"



//

s ^[$$$MEDIA]$$$mBodyMediaGlobal($$$mType,"Classified","@p","contactList")="list"



//

s ^[$$$MEDIA]$$$mBodyMediaGlobal($$$mType,"Classified","@p","imageList")="list"



//

s ^[$$$MEDIA]$$$mBodyMediaGlobal($$$mType,"Classified","@p","additionalText")="s."



//

s ^[$$$MEDIA]$$$mBodyMediaGlobal($$$mType,"Classified","@p","rubricId")="id."



//

s ^[$$$MEDIA]$$$mBodyMediaGlobal($$$mType,"Classified","@v","CarClassified","@p","UniVehicleModel")="enclosure"








お知らせの構造の説明(分類済み)からわかるように、連絡先のリストが含まれています。 ただし、連絡先にはさまざまなバリエーションがあります。

  1. 電話
  2. 電子メール
  3. 住所
  4. GPS
  5. 他の連絡先


広告構造の説明には表示されないが、連絡先構造説明されるもの:

//------------------------------------Contact-------------------------------------

//

s ^[$$$MEDIA]$$$mBodyMediaGlobal($$$mType,"Contact","@p","contactPerson")="ta."



// GPS

s ^[$$$MEDIA]$$$mBodyMediaGlobal($$$mType,"Contact","@v","GPSContact","@p","GPS")="enclosure"



//

s ^[$$$MEDIA]$$$mBodyMediaGlobal($$$mType,"Contact","@v","PhoneContact","@p","Phone")="enclosure"



//

s ^[$$$MEDIA]$$$mBodyMediaGlobal($$$mType,"Contact","@v","AddressContact","@p","UniRealEstateAddress")="enclosure"



// -

s ^[$$$MEDIA]$$$mBodyMediaGlobal($$$mType,"Contact","@v","WebSiteContact","@p","WebSite")="enclosure"



// eMail-

s ^[$$$MEDIA]$$$mBodyMediaGlobal($$$mType,"Contact","@v","eMailContact","@p","eMail")="enclosure"



//--------------------- -------------------------------

//AddressContact

s ^[$$$MEDIA]$$$mBodyMediaGlobal($$$mType,"AddressContact")="variationType"

s ^[$$$MEDIA]$$$mBodyMediaGlobal($$$mType,"AddressContact","@t")="Contact"



//PhoneContact

s ^[$$$MEDIA]$$$mBodyMediaGlobal($$$mType,"PhoneContact")="variationType"

s ^[$$$MEDIA]$$$mBodyMediaGlobal($$$mType,"PhoneContact","@t")="Contact"



//GPSContact

s ^[$$$MEDIA]$$$mBodyMediaGlobal($$$mType,"GPSContact")="variationType"

s ^[$$$MEDIA]$$$mBodyMediaGlobal($$$mType,"GPSContact","@t")="Contact"



//WebSiteContact

s ^[$$$MEDIA]$$$mBodyMediaGlobal($$$mType,"WebSiteContact")="variationType"

s ^[$$$MEDIA]$$$mBodyMediaGlobal($$$mType,"WebSiteContact","@t")="Contact"



//eMailContact

s ^[$$$MEDIA]$$$mBodyMediaGlobal($$$mType,"eMailContact")="variationType"

s ^[$$$MEDIA]$$$mBodyMediaGlobal($$$mType,"eMailContact","@t")="Contact"









このブログには理解できないコードが豊富に含まれていることをおpoびしますが、システム(新聞広告)を拡張し、対象領域に不動産を含める必要があるとします。 広告の新しいバリエーションの説明を追加するだけです:

//----------------- --------------------------------------------

//RealEstateClassified

s ^[$$$MEDIA]$$$mBodyMediaGlobal($$$mType,"RealEstateClassified")="variationType"

s ^[$$$MEDIA]$$$mBodyMediaGlobal($$$mType,"RealEstateClassified","@t")="Classified"



//

s ^[$$$MEDIA]$$$mBodyMediaGlobal($$$mType,"Classified","@v","RealEstateClassified","@p","UniRealEstate")="enclosure"









そして、不動産市場オブジェクトの構造の説明を追加します。

//---------------------------------------UniRealEstate------------------------------------------

//

s ^[$$$MEDIA]$$$mBodyMediaGlobal($$$mType,"UniRealEstate","@p","floorQuanity")="n."



//

s ^[$$$MEDIA]$$$mBodyMediaGlobal($$$mType,"UniRealEstate","@p","floorNumber")="n."



//

s ^[$$$MEDIA]$$$mBodyMediaGlobal($$$mType,"UniRealEstate","@p","housePlaningType")="ta."



//

s ^[$$$MEDIA]$$$mBodyMediaGlobal($$$mType,"UniRealEstate","@p","totalArea")="ta."



//

s ^[$$$MEDIA]$$$mBodyMediaGlobal($$$mType,"UniRealEstate","@p","cellingHight ")="ta."

//------------------------------------------------------------------------------------------------------------------









構造について説明します。



おそらく、説明に最も成功したサービスフラグを選択しなかったのでしょう。

  1. 「@t」-タイプ
  2. 「@p」-プロパティ
  3. 「@v」-バリエーション
  4. 「リスト」-リスト
いずれにしても、それらはより正確なものに簡単に置き換えることができます。



将来的には、連絡先、車、不動産など、必要な主題分野の説明を簡単に掘り下げることができます。 もちろん、上記のツリーに基づいて、データの書き込み、読み取り、更新を行う再帰構造処理メカニズムも必要です。 つまり、本文が入力され(xmlなど)、メカニズムが入力で本文ツリーを実行し、それを構造記述ストレージツリーと比較し、処理を実行します。 このようなアルゴリズムを書くことは、ある程度の経験があるプログラマーにとって難しいことではなく、このメカニズムのコードを提供するつもりはありません。もっと価値のある例があると確信しています。 データ構造の記述を論理ツリーの形式で保存する利点の1つは、データ処理メカニズムがサブジェクト領域(入力データ)について何も知らないことです。 もちろん、サブジェクト領域に関する知識-何らかの形でインターフェースレベルである必要があります(同様の構造を使用することは可能です)-ただし、システム内のすべてのメカニズム(CRUDメカニズム、インデックス付け、検索メカニズムを含む)はサブジェクト領域に関連付けられていません(構造については何も知りません)データ)。



もちろん、このブログでは、ツリー内のデータ構造の説明だけでは不十分です。 近い将来、データの保存とツリー内の検索インデックスについて説明する予定です。 また、グローバル構造の説明では、データ処理段階で再帰的に呼び出す必要があるルール(関数名)を保存すると非常に便利であり、構造のトラバースパスに影響を与える可能性があります。 明確な質問に答える準備ができています。



このブログで説明されている方法論は、ある程度、ライブのインターネットプロジェクトで使用されています。




All Articles