VMDS

VMDS förkortar den relationsdatabasteknik som kallas Version Managed Data Store som tillhandahålls av GE Energy som en del av dess Smallworld -teknologiplattform och designades från början för att lagra och analysera de mycket komplexa rumsliga och topologiska nätverk som vanligtvis används av företagsverktyg som kraftdistribution och telekommunikation. .

VMDS introducerades ursprungligen 1990 och har förbättrats och uppdaterats under åren. Dess nuvarande version är 6.0.

VMDS har utformats som en rumslig databas . Detta ger VMDS ett antal särskiljande egenskaper jämfört med konventionella relationsdatabaser med endast attribut.

Distribuerad serverbearbetning

VMDS består av två delar: en enkel, mycket skalbar datablockserver som heter SWMFS (Smallworld Master File Server) och ett intelligent klient- API skrivet i C och Magik . Spatial- och attributdata lagras i datablock som finns i speciella filer som kallas datalagringsfiler på servern. När klientapplikationen begär data har den tillräcklig intelligens för att räkna ut den optimala uppsättningen av datablock som krävs. Denna begäran görs sedan till SWMFS som returnerar data till klienten via nätverket för bearbetning.

Detta tillvägagångssätt är särskilt effektivt och skalbart när man hanterar rumsliga och topologiska data som tenderar att flöda i större volymer och kräver mer bearbetning än vanliga attributdata (till exempel under en kartomritningsoperation). Detta tillvägagångssätt gör VMDS väl lämpat för företagsdistribution som kan involvera hundratals eller till och med tusentals samtidiga klienter.

Stöd för långa transaktioner

Relationella databaser stöder korta transaktioner där ändringar av data är relativt små och är korta i termer av varaktighet (den maximala perioden mellan början och slutet av en transaktion är vanligtvis några sekunder eller mindre).

VMDS stöder långa transaktioner där mängden data involverad i transaktionen kan vara betydande och transaktionens varaktighet kan vara betydande (dagar, veckor eller till och med månader). Dessa typer av transaktioner är vanliga i avancerade nätverkstillämpningar som används av till exempel kraftdistributionsföretag.

På grund av tidsperioden för en lång transaktion i det här sammanhanget kan storleken på förändringen vara betydande (inte bara inom ramen för transaktionen, utan också inom ramen för databasen som helhet). Följaktligen är det troligt att samma post kan ändras mer än en gång. För att klara av detta scenario har VMDS inbyggt stöd för att automatiskt hantera sådana konflikter och tillåter applikationer att granska ändringar och endast acceptera de redigeringar som är korrekta.

Rumsliga och topologiska förmågor

Förutom konventionella relationsdatabasfunktioner som attributförfrågningar, kopplingsfält, triggers och beräknade fält, har VMDS många rumsliga och topologiska möjligheter. Detta gör att rumsdata som punkter, texter, polylinjer, polygoner och rasterdata kan lagras och analyseras.

Rumsliga funktioner inkluderar: hitta alla funktioner inom en polygon, beräkna Voronoi-polygonerna för en uppsättning platser och utföra en klusteranalys på en uppsättning punkter.

Vektorrumsdata som punkter, polylinjer och polygoner kan ges topologiska attribut som gör att komplexa nätverk kan modelleras. Nätverksanalysmotorer tillhandahålls för att svara på frågor som att hitta den kortaste vägen mellan två noder eller hur man optimerar en leveransväg ( problemet med den resande säljaren) . En topologimotor kan konfigureras med en uppsättning regler som definierar hur topologiska enheter interagerar med varandra när ny data läggs till eller befintlig data redigeras.

Dataabstraktion

I VMDS presenteras all data till applikationen som objekt. Detta skiljer sig från många relationsdatabaser som presenterar data som rader från en tabell eller frågeresultat med hjälp av t.ex. JDBC . VMDS tillhandahåller ett datamodelleringsverktyg och underliggande infrastruktur som en del av Smallworld- teknologiplattformen som tillåter administratörer att associera en tabell i databasen med ett Magik-exemplar (eller klass). Magik get- och set-metoder för Magik-exemplet kan genereras automatiskt som exponerar en tabells fält (eller kolumn). Varje VMDS- rad manifesterar sig för applikationen som en instans av ett Magik -objekt och är känd som ett RWO (eller verkliga världens objekt). Tabeller är kända som samlingar på Smallworld-språk.

# all_rwos innehåller alla rader i databasen och är heterogen all_rwos << my_application.rwo_set() # valve_collection innehåller ventiluppsamlingsventilerna << all_rwos.select(:collection, {:valve}) antal_ventiler << valves.size

Frågor byggs upp med hjälp av predikatobjekt:

 # hitta 'öppna' ventiler. open_valves << valves.select(predicate.eq(:operating_status, "open")) number_of_open_valves << open_valves.size  
 _for ventil _over open_valves.elements() _loop write(valve.id) _endloop 

Joins implementeras som metoder på den överordnade RWO. Till exempel kan en chef ha flera anställda som rapporterar till honom:

 # hämta anställd samling. anställda << my_application.database.collection(:gis, :employees)  
 # hitta en chef som heter 'Steve' och få det första matchande elementet steve << anställda.select(predicate.eq(:name, "Steve").and( predicate.eq(:role, "manager")).an_element() 
 # visa namnen på hans direktrapporter. namn är ett fält (eller kolumn) # på anställds samling (eller tabell) _för anställd _över steve.direct_reports.elements () _loop skriv(anställd.namn) _endloop 

Utföra en transaktion:

 # varje nyckel i hashtabellen motsvarar namnet på fältet (eller kolumnen) i # samlingen (eller tabellen) valve_data << hash_table.new_with( :asset_id, 57648576, :material, "Iron") # hämta 
 ventilsamlingen direkt valve_collection << my_application.database.collection(:gis, :valve) 
 # skapa en infogningstransaktion för att infoga en ny ventilpost i samlingen en # kommentar kan tillhandahållas som beskriver transaktionstransaktionen << record_transaction.new_insert(valve_collection, valve_data , "Infogade en ny ventil") transaktion.run() 

Se även