<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Mar 4, 2015 at 8:02 AM, Even Rouault <span dir="ltr"><<a href="mailto:even.rouault@spatialys.com" target="_blank">even.rouault@spatialys.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Norman,<br>
<span class=""><br>
><br>
> the aim is to sync data between masters as per -<br>
> <a href="http://dataprotocols.org/couchdb-replication/" target="_blank">http://dataprotocols.org/couchdb-replication/</a> An example would be using<br>
> GDAL in QGIS and going offline to edit data and then coming back online,<br>
> the user would need to synchronize the dataset. As replication is a core<br>
> part of CouchDB I would like to add it to the CouchDB OGR Driver.<br>
<br>
</span>If I understand well, you would consider the local copy as a "master", even if<br>
it is implemented as a non-couchdb instance ?<br>
<br>
How would a user would decide that it enters offline mode : with a special<br>
connection string provided to the CouchDB driver ?<br></blockquote><div><br></div><div>It wouldn't matter, it would only sync with an upstream server if there is an available connection. However it could be useful</div><div>to override this (3G vs WiFi for example) so I will support a connection string. </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<span class=""><br>
><br>
> Synchronizing at the database opening is a great idea, that makes sense.<br>
<br>
</span>I've the vague feeling that offline editing and resync with server could be<br>
usefull for other drivers, but I'm not sure if it something that can be easily<br>
abstracted off the driver (i.e. if they aren't too many driver specific<br>
constraints to take into account during offline editing)<br></blockquote><div><br></div><div>I think it would be useful for other drivers e.g. GeoPackage, however I will put it in CouchDB with minimal API changes (if any) and</div><div>we can abstract it out later. </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<span class=""><br>
><br>
> LevelDB would be a new GDAL dependency for the CouchDB driver, the GeoJSON<br>
> will be persisted in leveldb so that subsequent connections to a couchdb<br>
> database would only retrieve any changes to an upstream CouchDB server.<br>
> LevelDB is under the BSD license. LevelDB is used in PouchDB so it is<br>
> relatively easy to follow that code. I would aim to abstract leveldb behind<br>
> a OGRCouchDBCache class so that this storage engine could be changed.<br>
<br>
</span>It looks like offline editing would be almost like a driver, no ? You need to<br>
create/edit/delete features. Create/delete layers?<br>
<br>
As far as LevelDB, my remark would be that it will just make packagers' life a<br>
bit harder. Would that be a requirement for the CouchDB driver, or would that<br>
condition the offline editing feature only ?<br>
Are there killer features that you need that couldn't be provided with<br>
SQLite3, which is used for long by GDAL and a dependency satisfied into all<br>
builds I'm aware of ?<br></blockquote><div><br></div><div>I will try with sqlite3, leveldb is a little easier, but I agree with your build concerns. </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<span class="HOEnZb"><font color="#888888"><br>
Even<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
><br>
> Norman<br>
><br>
><br>
><br>
> On Wed, Mar 4, 2015 at 1:43 AM, Even Rouault <<a href="mailto:even.rouault@spatialys.com">even.rouault@spatialys.com</a>><br>
><br>
> wrote:<br>
> > Norman,<br>
> ><br>
> > I'm not familiar with what this "sync" is about, so please bear with the<br>
> > naive<br>
> > questions.<br>
> > Is it to synchronize all masters between them ?<br>
> > Why GetFeature() and/or not at the first GetNextFeature(), or at database<br>
> > opening ?<br>
> > What is the persistence you mention, and what is the connexion with the<br>
> > sync<br>
> > you mention ? Is it done at client (OGR) side ? Would leveldb be a new<br>
> > GDAL dependency ?<br>
> ><br>
> > Even<br>
> ><br>
> > > Hi,<br>
> > ><br>
> > > I am looking to add sync to the GDAL CouchDB driver. I would rather not<br>
> ><br>
> > add<br>
> ><br>
> > > additional API functions to do this but to wrap it up in the<br>
> > > usual GetFeature call. The first call to GetFeature would initiate a<br>
> ><br>
> > sync,<br>
> ><br>
> > > but thoughts on this are appreciated.<br>
> > ><br>
> > > Sync is a useful function that is a key differentiator with CouchDB<br>
> > > which is a multi-master database.<br>
> > ><br>
> > > There are a couple of ways of doing the sync, I could force a whole<br>
> > > database sync (the CouchDB model) or we could do a filtered sync based<br>
> > > on the bbox of the current local dataset. I would do the former in the<br>
> ><br>
> > initial<br>
> ><br>
> > > implementation.<br>
> > ><br>
> > > As for the persistence, I would like to use leveldb as a local store<br>
> ><br>
> > though<br>
> ><br>
> > > I could use sqlite. The two schemas are as follows;<br>
> ><br>
> > <a href="https://github.com/pouchdb/pouchdb/blob/master/lib/adapters/idb/idb.js#L5" target="_blank">https://github.com/pouchdb/pouchdb/blob/master/lib/adapters/idb/idb.js#L5</a><br>
> > 6<br>
> ><br>
> > <a href="https://github.com/couchbaselabs/TouchDB-iOS/wiki/Object-Design-And-Schem" target="_blank">https://github.com/couchbaselabs/TouchDB-iOS/wiki/Object-Design-And-Schem</a><br>
> > a<br>
> ><br>
> > > I will be create a PR on this shortly, but I am interested in any early<br>
> > > feedback.<br>
> > ><br>
> > > Norman<br>
> ><br>
> > --<br>
> > Spatialys - Geospatial professional services<br>
> > <a href="http://www.spatialys.com" target="_blank">http://www.spatialys.com</a><br>
<br>
--<br>
Spatialys - Geospatial professional services<br>
<a href="http://www.spatialys.com" target="_blank">http://www.spatialys.com</a><br>
</div></div></blockquote></div><br></div></div>