VMDS

Relational database technology

VMDSは、 GE EnergySmallworldテクノロジープラットフォームの一部として提供するバージョン管理データストアと呼ばれるリレーショナルデータベーステクノロジーの略称であり、当初から、電力配電や通信などのエンタープライズユーティリティで一般的に使用される非常に複雑な空間およびトポロジカルネットワークを保存および分析するために設計されました。[1]

VMDSは1990年に導入され、その後も改良と更新が続けられてきました。現在のバージョンは6.0です。

VMDSは空間データベースとして設計されています。これにより、従来の属性のみを扱うリレーショナルデータベースと比較して、VMDSにはいくつかの際立った特徴が備わります。

分散サーバー処理

VMDSは、 SWMFS (Smallworld Master File Server)と呼ばれるシンプルで拡張性の高いデータブロックサーバーと、 C言語Magikで記述されたインテリジェントなクライアントAPIの2つの部分で構成されています。空間データと属性データは、サーバー上のデータストアファイルと呼ばれる特殊なファイルに格納されたデータブロックに保存されます。クライアントアプリケーションがデータを要求すると、VMDSは必要なデータブロックの最適なセットを割り出すための十分なインテリジェンスを備えています。この要求はSWMFSに送信され、SWMFSはネットワーク経由でデータをクライアントに返して処理を行います。

このアプローチは、空間データやトポロジデータを扱う際に特に効率的かつスケーラブルです。これらのデータは、大量のデータフローが発生し、単純な属性データよりも多くの処理を必要とする傾向があります(例えば、地図の再描画処理など)。このアプローチにより、VMDSは数百、あるいは数千もの同時クライアントが関与する可能性のあるエンタープライズ環境への導入に最適です。

ロングトランザクションのサポート

リレーショナル データベースは、データの変更が比較的小さく、期間も短い (トランザクションの開始から終了までの最大期間は、通常、数秒以下) 短いトランザクションをサポートします。

VMDSは、トランザクションに含まれるデータ量が膨大で、トランザクションの期間が長期間(数日、数週間、さらには数ヶ月)に及ぶ可能性のある、長時間トランザクションをサポートします。このようなトランザクションは、例えば配電事業者などで使用される高度なネットワークアプリケーションでよく見られます。

このような状況では、トランザクションの期間が長いため、変更量は(トランザクションのスコープ内だけでなく、データベース全体のコンテキスト内でも)膨大になる可能性があります。したがって、同じレコードが複数回変更される可能性が高くなります。このようなシナリオに対処するため、VMDSにはこのような競合を自動的に管理するサポートが組み込まれており、アプリケーションは変更を確認し、正しい編集のみを受け入れることができます。

空間および位相機能

VMDSは、属性クエリ、結合フィールド、トリガー、計算フィールドといった従来のリレーショナルデータベース機能に加え、数多くの空間データおよびトポロジカルデータ処理機能を備えています。これにより、ポイント、テキスト、ポリライン、ポリゴン、ラスターデータといった空間データを保存・分析することが可能です。

空間関数には、ポリゴン内のすべてのフィーチャの検索、一連のサイトのボロノイ ポリゴンの計算、一連のポイントに対する クラスター分析の実行が含まれます。

ポイント、ポリライン、ポリゴンなどのベクター空間データにトポロジ属性を与えることで、複雑なネットワークをモデル化できます。ネットワーク分析エンジンは、2つのノード間の最短経路の探索や配送ルートの最適化(巡回セールスマン問題)といった問題に答えるために提供されています。トポロジエンジンは、新しいデータが追加されたり既存のデータが編集されたりした際に、トポロジエンティティが互いにどのように相互作用するかを定義する一連のルールで設定できます。

データ抽象化

VMDSでは、すべてのデータがオブジェクトとしてアプリケーションに提示されます。これは、データをテーブルの行やJDBCなどのクエリ結果として提示する多くのリレーショナルデータベースとは異なります。VMDSは、 Smallworldテクノロジープラットフォームの一部としてデータモデリングツールと基盤インフラストラクチャを提供し、管理者がデータベース内のテーブルをMagikエグザンプラ(またはクラス)に関連付けることを可能にします。MagikエグザンプラのMagik getメソッドとsetメソッドは自動的に生成され、テーブルのフィールド(または列)を公開します。VMDSの各行は、アプリケーションに対してMagikオブジェクトのインスタンスとして提示され、 RWO(リアルワールドオブジェクト) と呼ばれます。Smallworldの用語では、テーブルはコレクションと呼ばれます。

# all_rwos はデータベース内のすべての rwos を保持し、異種です
 all_rwos << my_application.rwo_set()

 # valve_collectionはバルブコレクションを保持します
 バルブ << all_rwos.select(:collection, {:valve})
 バルブの数 << バルブのサイズ

クエリは述語オブジェクトを使用して構築されます。

# 「開いている」バルブを見つけます。
 open_valves << valves.select(predicate.eq(:operating_status, "open"))
 開いているバルブの数 << 開いているバルブのサイズ
_for バルブ _over open_valves.elements()
 _ループ
   書き込み(valve.id)
 _endloop

結合は親RWOのメソッドとして実装されます。例えば、マネージャーに複数の従業員が報告している場合、以下のように記述します。

# 従業員コレクションを取得します。
 従業員 << my_application.database.collection(:gis, :employees)
# 'Steve'というマネージャーを検索し、最初に一致する要素を取得します
 スティーブ << 従業員.select(predicate.eq(:name, "スティーブ").and(predicate.eq(:role, "マネージャー")).an_element()
# 直属の部下の名前を表示します。name はフィールド(または列)です。
 従業員コレクション(またはテーブル)の#
 _従業員用 _over steve.direct_reports.elements()
 _ループ
    write(従業員名)
 _endloop

トランザクションの実行:

# ハッシュテーブルの各キーは、
 # コレクション(またはテーブル)
 バルブデータ << ハッシュテーブル.new_with(
   :資産ID, 57648576,
   :material, "鉄")
# バルブコレクションを直接取得する
 valve_collection << my_application.database.collection(:gis, :valve)
# 挿入トランザクションを作成して、新しいバルブレコードをコレクションに挿入します。
 # トランザクションを説明するコメントを入力できます
 トランザクション << record_transaction.new_insert(valve_collection, valve_data, "新しいバルブを挿入しました")
 トランザクション実行()

参照

参考文献

  1. ^ Castro, Cyndi (2022年6月21日). 「NBSGeo」. HydroShare Resources . 2025年10月8日閲覧
Retrieved from "https://en.wikipedia.org/w/index.php?title=VMDS&oldid=1315841651"