[KPhotoAlbum] Optimization of index.xml
Shawn Willden
shawn-kimdaba at willden.org
Mon Sep 4 06:51:26 BST 2006
On Tuesday 29 August 2006 08:13, Tuomas Suutari wrote:
> Anyway MySQL and PostgreSQL are also supported by the SQL backend.
Awesome! This is truly excellent, and I'm really excited to be able for both
my wife and I to be able to work with images at the same time, safely.
That said, do you have any ideas about how I can manage the scenario where
multiple copies of the database are in use? Here's what I'm thinking: Most
of the time, we work on our photo database from home. In that environment,
MySQL or PostgreSQL are perfect (and, in fact, I already have a MySQL server
installed on the home file server). However, I not infrequently search for
and/or modify photos when I'm traveling, and I want to be able to do that,
too.
Have you thought any about this sort of multi-database scenario? Obviously,
it's easy enough for me to take a copy of the database with me when I leave
home, whether MySQL (which is already running on my laptop), SQLite or even
XML. The issue is how to synchronize any changes that I might make back to
the authoritative database on the file server when I get home (or when I get
an Internet connection).
Obviously, any workable synchronization mechanism would have to recognize
conflicting changes and offer the user the opportunity to resolve them.
One way to do it would be a three-way compare. If when I copied the DB to my
laptop I stored two copies, one for active use and the other for reference,
then it would be a simple matter to write a tool that compared my active
laptop database to my reference database and propagated any differences to
the server database, provided the server's copy of that row was the same as
the reference database.
Another way to do it would be to add an "updated" timestamp to each row. Then
I could do the synchronization without needing the extra copy of the
database, I'd just have to know the time at which I performed the copy from
server to laptop. In order to avoid clock synchronization problems,
the 'timestamp' I refer to would probably be a version counter, rather than a
real timestamp, but the effect is the same.
A third way would be to store a journal in the laptop DB of all of the changes
made, along with their previous values, This journal could then
be "executed" against the server -- but only where the previous value matched
the server version. Differences would constitute conflicts.
Another variant of the journaling approach would be to have both servers
journal all of the changes, and record on the laptop the server's journal
pointer.
I'm sure there are other approaches, and perhaps some simpler, and better,
than what I've described.
Has anyone put any thought into this? I'd be willing to write a
synchronization tool, but it would be good to discuss an appropriate approach
first.
Oh, and what's the current state of the SQL support? Can I try it now?
Shawn.
More information about the Kphotoalbum
mailing list