Note: The meat and potatoes of my request is in the "What I would like"
section.  Everything else is just explanation.

Currently my company is using software that really isn't meeting our needs.
We have tried to get the 3rd party to allow us to help with their source,
but they won't allow us to help with it (even after we offered to sign
non-disclosure and non-competition contracts).  Because of a number of
issues we are looking at developing our own solution.  I have been thinking
for sometime about PostgreSQL to help with the solution.  I'm just looking
for some advice on how I might pull off the features we would like.


What I would like:
-Data sharing between locations.
-Offline availability (in case Internet connection goes down).
-The ability to make a change at the home office, and have that change made
at the applicable (not necessarily all) remote locations.  Currently we have
to log in (VNC) to each location to make a change, I would like to remove
this requirement.
-Company-wide querying built in.


What I have now:
-60 remote locations (in different states) with ADSL or Cable Internet
connection (connection reliability is just like it is for a home user,
sometimes great, sometimes "flakey").
-Each remote location has at least 2 computers, most have 3, a few have 4,
and one has 5.  The naming structure is station-##-1, station-##-2, etc.
where the ## is the store number.  Computers have Windows 2000 or Windows XP
Pro.
-The current application we have is a MS Access front-end, with a MS Access
back-end shared peer-to-peer.  The back end is located on the station 1 of
each location.  The other stations at the location link to this back-end.
Each store's data is separate, they do not share data between locations
(though they may share actual clients).
-Backups consist of a batch file that zips the back-end and transfers the
file to our home office via sftp.
-We run MS SQL Server 2000 at the home office.  I have connected the MS
Access back-ends as linked servers and run Stored Procedures to combine the
data from the various back-ends into single tables in MS SQL Server.  I then
can run company-wide reports against this combined data (something not
normally possible or provided by the software as they are essentially
separate databases).


What I have considered:
-At the most basic I could use the same setup we have now.  MS Access
front-end and back-end, but it just be OUR application running it.  But this
doesn't meet other "wants" I would like to fulfill.
-Central database at the home office.  This would allow us to share data
between stores (which is desirable).  The front-end could simply be a web
application.  Or it could be a Java app that connects over the Internet.  We
used software like this before our current solution years ago (but it wasn't
OUR software).  The problem with this was that if the store lost their
Internet connection, they could not help customers.  This was not
acceptable.
-Same setup as now (using the Access databases), but providing a web page
linked to the MS SQL Server at the home office.  This would allow separate
stores to look up (and thus share) information between each other.  The
problems with this is that the data would only be updated daily (I would
like it to be hourly at least) and the data is not integrated into the
software.  Integration into the software would be best in my opinion (no
need to log onto a site for each check, no way to forget checking against
other store's data).
-PostgreSQL as a back-end.  Each store would have its own PostgreSQL
back-end that would then be replicated to the home office into it's own
database or schema or table.  At the home office I would combine the data
into "unioned" versions of what exists locally at each location.  I could
then replicate these "unioned" tables back to the remote locations.  So a
store would be the master of it's own data, and a slave to the "unioned"
tables, while the home office was a slave to store tables, but a master for
the "unioned" tables.  The software would store it's customer's data in its
regular tables, but would perform checks against the "master" tables to see
the customer currently has data somewhere else.  I feel that this would
allow data to be available, and customers could still be helped, even if the
Internet went down for a few minutes (or days).  The main problem with this
solution is that Slony-1 says that you really shouldn't have more than a
dozen places that you replicate to, and I have 60.  I would also like to be
able to go well beyond 60 (so I am looking for a scalable solution).  Also,
sometimes the Internet connection to a location goes down.  Some are more
"flakey" than others.  Slony-1 says it is not for this type of situation.

What I need:
-Suggestions.  I am open to just about anything.  This is a long-term
project.  We certainly don't have unlimited resources, but we've paid around
$300k (most of the cost being custom programming) over the last 4 years for
a solution that doesn't really work for us.  I'm sure that we could spend
some decent money on something that we will own forever.  I could use Java,
AJAX, C++, plain HTML, or whatever as the front-end (I may need to learn it
or hire help for it).  I'm open to any kind of back-end, but I was looking
to open source (specifically PostgreSQL) to save on licensing costs.

Any advice is appreciated.

Reply via email to