-
Notifications
You must be signed in to change notification settings - Fork 1
Query driven synchronization
######Tags: EMF-IncQuery query-based object view models
This page contains additional information about the VAO 2012 paper Query-driven incremental synchronization of view models.
Authors: Debreceni Csaba, Ákos Horváth, Ábel Hegedüs, Zoltán Ujhelyi, István Ráth and Dániel Varró
Views are key concepts of domain-specific modeling in order to provide specific focus of the designers by abstracting from unnecessary details of the underlying abstract model. Usually, these views are represented as models themselves (view models), computed from the source model. However, the efficient maintenance of views when the source model changes is challenging, as recalculation from scratch has to be avoided to achieve scalability. This benchmark aims to measure query-based view model creation performance from detailed source models with the EMF-IncQuery framework.
The benchmark uses a domain-specific model of a railway system that contains most typical class diagram constructs in the source metamodel. This metamodel will be instantiated and then abstracted to view model as an instance of view metamodel.
A train route can be defined by a set of sensors between two neighboring signals. The state of a signal can be stop (when it is red), go (when it is green) or failure. Sensors are associated with track elements, which can be a track segment or a switch. The status of a switch can be left, right, straight or failure. A route can have associated switch positions, which describe the required state of a switch belonging to the route. Different route definitions can specify different states for a specific switch.
View models consist of only connected virtual switches which abstract the instances of source metamodel. A VirtualSwitch represents a simple Switch from the source metamodel that is not in Failure state. Two VirtualSwitch elements are connected if the corresponding Switch elements are connected in the source model. The CountConnectedInFailure attribute shows the count of _Switch_es that are connected to this VirtualSwitch and are in Failure state.
Name | _virtualSwitches_ |
Annotations |
@QueryBasedObject(eClass = "VirtualSwitch") |
Pattern |
pattern virtualSwitches(switchElement : Switch) { neg find switchesInFailure(switchElement); } |
Textual description | Finds the _Switch_ elements from the source models and creates _VirtualSwitch_ objects in the view model. |
Name | _connectedTo_ |
Annotations |
@TraceLookup(source = trg, target = t) @TraceLookup(source = src, target = s) @QueryBasedFeature(source = s, target = t, feature = "connectedTo") |
Pattern |
pattern connectedTo(src : Switch, trg : Switch) { find connectedSwitches(s,t); neg find switchesInFailure(s); neg find switchesInFailure(t); } |
Textual description | Finds the connected _Switch_ pairs from the source models, where none of them are in _Failure_ state, then traces the corresponding _VirtualSwitch_ elements and sets _connectedTo_ reference. |
Name | |
Annotations |
@TraceLookup(source = src, target = s) @QueryBasedFeature(source = s, target = c, feature = "CountConnectedInFailure") |
Pattern |
pattern countConnectedInFailure(src : Switch, c) { c == count find connectedSwitchesInFailure(src, _); } |
Textual description | Counts the connected switches in failure state then traces the corresponding _VirtualSwitch_ and sets _CountConnectedInFailure_ attribute. |
Name | _switchesInFailure_ |
Pattern |
pattern switchesInFailure(switchElement : Switch) { Switch.Switch_actualState(switchElement, ::PointStateKind_FAILURE); } |
Textual description | Finds the _Switch_ elements that are in _Failure_ state. |
Name | _connectedSegments_ |
Pattern |
pattern connectedSegments(source : Segment, target : Segment) { Trackelement.TrackElement_connectsTo(source, target); } |
Textual description | Finds the connected _Segment_ pairs. |
Name | _connectedSwitches_ |
Pattern |
pattern connectedSwitches(source : Switch, target : Switch) { Trackelement.TrackElement_connectsTo(source, target); } or { Trackelement.TrackElement_connectsTo(source, srcSegment); find connectedSegments+(srcSegment, trgSegment); Trackelement.TrackElement_connectsTo(trgSegment, target); } |
Textual description | Finds the connected _Switch_es. These _Switch_es can be connected directly or indirectly through some _Segment_ elements. |
Name | _connectedSwitchesInFailure_ |
Pattern |
pattern connectedSwitchesInFailure(source : Switch, target : Switch) { find connectedSwitches(source, target); neg find switchesInFailure(source); find switchesInFailure(target); } |
Textual description | Finds _Switch_ pairs that are connected where the target is in _Failure_ state but the source is not in _Failure_ state. |
All measurements were executed on a developer PC with a 3.5 GHz Core i7 processor, 16 GB RAM, Windows 7 and Java 7. To avoid interference between different executions, each time a new JVM was created with a 2 GB heap limit. The time to start up and shut down the JVM was not included in the measurement results.
- Total time (ns): Model Load time + Transformation time + Pattern Load time + Rete Load time
- Pattern Load time (ns): the required time to initialize the derivation rules
- Transformation time (ns): the required time to execute the derivation rules and build up the view model
- Model Load time (ns): the required time to load source model and metamodels
- Rete Load time (ns): the required time to initialize the EMF-IncQuery enginge
- Size: count of the objects in the source model
Example | Total time (ns) | Pattern Load time (ns) | Transformation time (ns) | Model Load time (ns) | Rete Load time (ns) | Size |
---|---|---|---|---|---|---|
Train 1 | 2671394975 | 509656729 | 355321177 | 1087638955 | 1228408588 | 6032 |
2367238358 | 453831246 | 296549726 | 978870655 | 1091796681 | 6032 | |
2387372976 | 435701834 | 317077567 | 938900421 | 1131372817 | 6032 | |
2356045490 | 453368886 | 304705905 | 963283194 | 1088033054 | 6032 | |
2368727823 | 445738367 | 305975131 | 958117907 | 1104610866 | 6032 | |
2362009185 | 447577008 | 294226558 | 962009885 | 1105751156 | 6032 | |
2395180562 | 452372118 | 308036345 | 961733053 | 1125389286 | 6032 | |
2322076290 | 450173508 | 299207194 | 958891226 | 1063952200 | 6032 | |
2384421173 | 455479400 | 297189736 | 971408160 | 1115800816 | 6032 | |
2399245524 | 443077399 | 314282122 | 950041656 | 1134898117 | 6032 | |
Train 2 | 3085963964 | 444044415 | 465501056 | 1155801388 | 1464633223 | 11710 |
3127502715 | 439503383 | 569822256 | 1128403512 | 1429253319 | 11710 | |
3047750983 | 441944694 | 523073000 | 1138594068 | 1386058244 | 11710 | |
3222525113 | 436875962 | 467127042 | 1109680182 | 1645690469 | 11710 | |
3097677823 | 448164802 | 473030353 | 1131231338 | 1493391920 | 11710 | |
3036617333 | 443541509 | 526420943 | 1127680367 | 1382491520 | 11710 | |
3040201851 | 440058505 | 476345040 | 1132668003 | 1431161678 | 11710 | |
3154151191 | 461241816 | 563608275 | 1143739812 | 1446767225 | 11710 | |
3351079731 | 443876390 | 524427988 | 1157983662 | 1668643578 | 11710 | |
3125248390 | 444425970 | 554495000 | 1139229994 | 1431496560 | 11710 | |
Train 4 | 4050028354 | 442377298 | 1085805274 | 1228868905 | 1735323838 | 23180 |
4046885484 | 442084423 | 1009706027 | 1208577931 | 1828572354 | 23180 | |
4402571589 | 442311955 | 1105739780 | 1287112654 | 2009689984 | 23180 | |
4261890634 | 444326497 | 1055015992 | 1221566266 | 1985277456 | 23180 | |
4214780244 | 452378827 | 1012238060 | 1213052453 | 1989456476 | 23180 | |
4285286848 | 442803777 | 1060728525 | 1203556748 | 2020973280 | 23180 | |
4044949704 | 441373820 | 1058578631 | 1203219532 | 1783122370 | 23180 | |
4123525849 | 444612955 | 1077906675 | 1235372262 | 1810217452 | 23180 | |
4027886197 | 439615108 | 1028202117 | 1216622094 | 1783028439 | 23180 | |
4260971168 | 440365383 | 1060030758 | 1199576089 | 2001334276 | 23180 | |
Train 8 | 6564483109 | 495478805 | 2678911436 | 1446046703 | 2439485006 | 46728 |
6891715353 | 501968743 | 2755135534 | 1442999221 | 2693550552 | 46728 | |
6562924218 | 493986131 | 2694280115 | 1443131366 | 2425473939 | 46728 | |
6515051592 | 438112224 | 2622168820 | 1465205264 | 2427629959 | 46728 | |
6602688213 | 435748216 | 2724581368 | 1459845406 | 2418225559 | 46728 | |
6582888186 | 483571251 | 2698598864 | 1437905110 | 2446342788 | 46728 | |
6487792277 | 491303868 | 2632431428 | 1440782527 | 2414536317 | 46728 | |
6935608778 | 519232070 | 2891919549 | 1507922520 | 2535727329 | 46728 | |
7115764353 | 475664483 | 2887509786 | 1557997256 | 2670217346 | 46728 | |
6835130552 | 511607969 | 2710273635 | 1618764870 | 2506043623 | 46728 | |
Train 16 | 13824759720 | 444229650 | 8126586167 | 1789580512 | 3908553077 | 87396 |
13413586222 | 442039792 | 8005957570 | 1799130766 | 3608454422 | 87396 | |
13268855183 | 434819998 | 7933138880 | 1723300184 | 3612370029 | 87396 | |
13721455125 | 442863286 | 8221694035 | 1846210527 | 3653509724 | 87396 | |
13713059162 | 431877823 | 8367220855 | 1760778057 | 3585024078 | 87396 | |
13478051829 | 435233350 | 8050562473 | 1788058374 | 3639391601 | 87396 | |
13328868730 | 429726471 | 8006697926 | 1782177525 | 3539956815 | 87396 | |
13609567291 | 429297367 | 8089610032 | 1786087007 | 3733826788 | 87396 | |
13822880532 | 433364955 | 8405137168 | 1772379317 | 3645324375 | 87396 | |
13308229747 | 436706188 | 7934141484 | 1774284759 | 3599757999 | 87396 | |
Train 32 | 41011124899 | 439375907 | 30247932368 | 2543499619 | 8219649156 | 175754 |
44020724453 | 435012526 | 31933920368 | 2596659467 | 9490101444 | 175754 | |
41078047278 | 439858101 | 30324106875 | 2463835983 | 8290053371 | 175754 | |
40705214820 | 439824263 | 29861406515 | 2562324756 | 8281438626 | 175754 | |
41366412238 | 441804382 | 30478163553 | 2549251825 | 8338952228 | 175754 | |
40952707875 | 436851459 | 30130131012 | 2586974443 | 8235558371 | 175754 | |
41466539540 | 439972742 | 30499219387 | 2544440964 | 8422835141 | 175754 | |
41480441215 | 448951248 | 30363510903 | 2470273413 | 8646609936 | 175754 | |
42084538383 | 477098524 | 31026026553 | 2571142239 | 8487324377 | 175754 | |
40676082152 | 442398010 | 29820580115 | 2511417483 | 8344039922 | 175754 |
- Source model (KB): memory size of the source model
- View model + RETE Network (KB): memory size of the view model and the EMF-IncQuery engine
Example | Source model (KB) | View model + RETE Network (KB) |
---|---|---|
Train 1 | 47917 | 164175 |
47715 | 167346 | |
50244 | 162089 | |
47196 | 162530 | |
51661 | 159461 | |
47199 | 162551 | |
47709 | 162091 | |
47713 | 162094 | |
47191 | 164388 | |
48270 | 159852 | |
Train 2 | 58918 | 106326 |
59661 | 109397 | |
58187 | 110473 | |
58179 | 105849 | |
58918 | 105786 | |
58060 | 106108 | |
58907 | 109748 | |
58174 | 107122 | |
58057 | 109697 | |
58913 | 106300 | |
Train 3 | 80833 | 251903 |
82160 | 242792 | |
82153 | 270047 | |
80993 | 250525 | |
81041 | 255030 | |
81862 | 242751 | |
81027 | 252238 | |
81844 | 250429 | |
82119 | 260514 | |
82154 | 251669 | |
Train 4 | 131667 | 216696 |
133095 | 216401 | |
131654 | 194725 | |
133098 | 205545 | |
131646 | 229694 | |
134866 | 204242 | |
133108 | 204911 | |
133112 | 205230 | |
131672 | 217605 | |
132644 | 217385 | |
Train 5 | 219128 | 365446 |
219156 | 399949 | |
219119 | 386020 | |
221104 | 341331 | |
219135 | 328297 | |
220393 | 357009 | |
221113 | 335394 | |
219124 | 351458 | |
221134 | 377458 | |
220539 | 377287 | |
Train 6 | 266829 | 860475 |
266880 | 908782 | |
266865 | 902767 | |
253949 | 683224 | |
261000 | 634433 | |
267694 | 790160 | |
266848 | 660281 | |
268886 | 905946 | |
268838 | 681521 | |
256394 | 948193 |