My name is Robert Hastings. I'm the President of Moebius Solutions, Inc. 
Moebius is contributing some research work we did for the Office of Navel 
Research to the opensource community. Hopefully, this will be accepted as a 
geoserver community module. 


The module supports any client, but was specifically designed to support work 
Forward Slope Inc. (FSI) was doing, which was using World Wind to synchronize 
with a set of simple features that are updating. The features represent 
positional information that was being updated in near-real-time. The original 
designed leveraged wfs-notification (which FSI has already contributed as a 
community module) to detect and push changes. During a "tiger team" event 
Moebius designed a capability that would use Merkle Trees and SHA-1 checksums 
to filter and pull changes from geoserver. The push style changes allow for 
near-real-time updates and the pull style synchronization supports initial 
startup synchronization and periodic check-pointing to confirm and/or repair. 


The approach for integrating with geoserver is as a plugin. The plugin adds a 
filter function and an output format. The filter function takes a JSON based 
parameter that describes the level of the Merkle tree, the "buckets" at that 
level and the SHA-1 checksum of all the children of each bucket. At level 0, 
there is a single bucket and thus the SHA-1 represents the entire SHA-1 for all 
the features. The filter then returns just the features that are in those 
buckets where the SHA-1 of the bucket does not match the incoming JSON 
description. In simpler terms, the filter filters out all features that the 
client already has matching SHA-1's for. The output format takes the unfiltered 
features and builds a JSON description that the describes the differences. The 
intended client usage is to start at level 0, and then increase the level 1, 2, 
3, etc. until each Merkle tree bucket covers only one feature. At that point, 
the client turns off the output filter and does a final request using the 
previous filter parameters and gets only the unfiltered features which 
represent the ones where the client is out of sync. 


This contribution included the core code to build the Merkle tree levels the 
plugin and client code to exercise the plugin. If the client code is used, the 
incoming updates callback to the client via a listener. 


The code is currently sitting in a fork on github here: 
https://github.com/MoebiusSolutions/geoserver/tree/master/src/community/geoserver-sync
 


Hopefully this will get pulled and included in the 2.5 release. If there is 
anyway to get it included in a future 2.4.x release, we are happy to back port 
it. 


Thanks, 
Robert Hastings, Lab-SDL: 619-553-7006, Cell: 858-395-4436, Moebius: 
858-455-5431x210, Lab-250: 619-553-2263 



------------------------------------------------------------------------------
Sponsored by Intel(R) XDK 
Develop, test and display web and hybrid apps with a single code base.
Download it for free now!
http://pubads.g.doubleclick.net/gampad/clk?id=111408631&iu=/4140/ostg.clktrk
_______________________________________________
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel

Reply via email to