> The data I was going to keep in memory on the server was
> "Catalog" data...data that doesn't change much at all if any.  I'm
> thinking we will be better served to store this info on the client
> machine, reading directly from the DB when the app starts under a worker
> thread.

Can't you do that anyway?  Keep your current solution, but fetch the
catalog on the worker thread so the rest of the application looks like
it is running.  Make a proxy for the "cache" so if it currently
doesn't contain the data for some query it makes a database hit
instead.

You can also setup a modification log so the clients get an empty
catalog cache to start and slowly fill it up from the mods-log from
the server... then as time goes on, the mods-log keeps the clients
up-to-date.  You can get as simple as just storing a modification
sequence number (INT IDENTITY) a table identifier, and the primary key
of the modified record... then give the server a service that takes
the client's last-known update pointer (or zero for give me
everything), and then you just stream 100 rows (or so) at a time back
to the client... he saves the data locally and loops back for more. 
Do this on a worker thread and you can catch up a cache in almost no
time.  We did much the same for a thick-client, distributed
application called Sendouts.  It worked fine even over modem lines.

--
"Under capitalism, man exploits man. Under communism, it's just the
opposite."  –John Kenneth Gailbraith

Marc C. Brooks
mailto:[EMAIL PROTECTED]
http://musingmarc.blogspot.com

Reply via email to