MS Access Forum / Multiuser / Networking / December 2003
Industrial Strength Access Deployment
|
|
Thread rating:  |
Mike Dwyer - 19 Nov 2003 19:24 GMT I'm looking to deploy an Access application across a large number of users and would like input from those of you out there who have had real-life experience with a deployment of this size. Here's the details:
The application is a Microsoft Access 2000 MDE front end connecting to a SQL Server 2000 backend. The application has been optimized for client/server and there are NO JET tables involved herepure SQL Server, using ODBC linked tables.
This application is going to be deployed to approximately 700 users, of which, approximately 500 users will be using it simultaneously. To complicate matters further, there are 4 remote offices, each of which will have roughly 100 users.
Conventional wisdom has been telling me I ought to have my head examined for proposing such a large scale deployment using Access. However, I've deployed it with as many as 150 with very good results. I'm interested in hearing from those of you who have had experience with deployments of this magnitude. Is there something inherent to Access that will prevent me from doing this? Is it just a matter of getting a big enough server? What are the bandwidth issues? Too many persistent connections? Etc. etc. etc.
Your input is appreciated.
-Mike
david epsom dot com dot au - 20 Nov 2003 08:55 GMT > Conventional wisdom has been telling me I ought to have my head > examined for proposing such a large scale deployment using Access. MS Access is a large application, and deployment can be tricky. If you can, make sure that they already have Access installed. If you can't, make sure that the deployment of Access is the responsibility of the IT desktop support people - not the database developer.
> a SQL Server 2000 backend. The application has been optimized for > client/server and there are NO JET tables involved here-pure SQL > Server, using ODBC linked tables. Well, you've tried it with 150 users, but Access Linked Tables are not really optimised for client/server: Do you mean you have linked tables, or do you mean only that you are using ODBC with ADO?
Linked Tables in an Access Front End means that you are going through a Jet Translation layer (still single user, entirely on the workstation) before you get to the ODBC layer. The Jet layer is slow, handles stored procedures inflexibly, and handles transactions badly. The net effect is that sometimes you have to work a little harder on your FE design.
Having said that, the only thing I would worry about is locking, and if you've designed a system that doesn't accidentally assert table locks with 2 users, there is no reason to expect a problem with 600.
> with deployments of this magnitude. Is there something inherent to > Access that will prevent me from doing this? Is it just a matter of Your Access users are all single users. Their only connection to the database is via ODBC. Is there something inherent in ODBC connections to the Server that will prevent you from having 500 users? You should ask in a Server group.
(david)
> I'm looking to deploy an Access application across a large number of > users and would like input from those of you out there who have had [quoted text clipped - 23 lines] > > -Mike Mike Dwyer - 21 Nov 2003 00:24 GMT Thanks for the reply, David.
You are correct, it's linked tables (tables show in the database window as linked). Without going to an ADP, is there an alternative to linked tables used on forms and reports? Can you elaborate on the "transactions being handled badly" and the "not optimized for c/s" comments?
> > a SQL Server 2000 backend. The application has been optimized for > > client/server and there are NO JET tables involved here-pure SQL [quoted text clipped - 23 lines] > > (david) david epsom dot com dot au - 21 Nov 2003 04:10 GMT You don't have to go to an ADP to use client server techniques: you can open an ADO snapshot when you open a form, copy the data from the recordset to the form, close the connection, alter the data on the form, then open a connection and write the data back.
Or, you can bind each form to a pass through query, instead of binding forms to linked tables. Or, even if you don't have bound forms, you can use only pass through queries in your database, instead of using Jet SQL and linked tables.
On the other hand, if you don't use linked tables, perhaps you might just as well move to an ADP.
By 'not optimized for c/s' I mean just what I wrote before: the Jet translation layer is slow, handles stored procedures inflexibly, and handles transactions badly.
When using ODBC linked tables, you cannot nest transactions, (that is, you cannot do nested commit, nested rollback, or nested unlock). You cannot (last I looked) read from a record inside a transaction after you have written to that record, and you may get generally more locking than you want. This forces you to use a very careful discipline when creating a complex transaction.
(david)
> Thanks for the reply, David. > [quoted text clipped - 31 lines] > > > > (david) Mike Dwyer - 21 Nov 2003 20:51 GMT If I remember, aren't Pass through queries read-only?
> You don't have to go to an ADP to use client server techniques: > you can open an ADO snapshot when you open a form, copy the [quoted text clipped - 59 lines] > > > > > > (david) david epsom dot com dot au - 22 Nov 2003 05:03 GMT Views were read-only. They are less likely to be read only when using ADO. Pass through queries may sometimes unexpectedly be read-only, but if I am doing an optimised client/server connection, I don't use read/write connections anyway: I read, then write an update query.
The advantage of using pass-through instead of using the Jet translation layer is that it is faster, and allows you to talk to stored procedures in a way that would be difficult through the Jet translation layer.
(david)
> If I remember, aren't Pass through queries read-only? > [quoted text clipped - 61 lines] > > > > > > > > (david) Larry Linson - 22 Nov 2003 05:20 GMT Mike, I've not worked on anything with quite so large a user audience, but my experiences with Access-Jet-ODBC-server have been satisfactory with audiences up to about 200, some connecting over moderately slow links in a LAN.
The prime contractor on that largest C/S project found it best to obtain and use a third-party installation program -- the one he chose was Wise. We did not, however, as some suggest, use the SageKey scripts. A colleague on the project became very expert with Wise scripting language -- the client had an enormous corporate license for the version of Access we were using and most users had moved on to a later version so the install script installed full Access, the application, and a third-party graphics package on each user's desktop.
I don't know david epsom's criteria for the Jet layer being slow, but, in our case, the users and client felt that performance was more than adequate.
We had only a few stored procedures -- the client and prime contractor had agreed because it was far easier to find and hire competent Access people than to find and hire competent server DB people (it was more difficult because the server was Informix and there aren't nearly as many Informix folk available as SQL Server types) and no transactions. The stored procedures that we had were simply to get around the problem of using AutoNumber-equivalents in a server and returned just one number, the "next unique id" for a particular table -- there was never a problem with them.
In addition, to avoid the occasional "too complex query" that would bring oodles and gobs of data back for Jet to process, we had a few (and few is the operative word) Informix Views defined.
The scenario that david describes for using ADO, with disconnected recordsets, would seem to preclude locking and one "line of defense" at the DB engine level -- that alone would cause me concern. In fact, we've seen reports in various newsgroups indicating that in some | many situations Jet-ODBC-server actually outperforms ADO-server; it was anecdotal evidence, to be sure, but the hype for ADO was so intense that I was happy to see someone dealing with reality.
Larry Linson Microsoft Access MVP
> I'm looking to deploy an Access application across a large number of > users and would like input from those of you out there who have had [quoted text clipped - 23 lines] > > -Mike david epsom dot com dot au - 23 Nov 2003 22:22 GMT > I don't know david epsom's criteria for the Jet layer being slow, but, > our case, the users and client felt that performance was more than My opinion is that an Access front end is either fast enough, or not fast enough.
But that is not the same as 'optimized': my web development colleagues tell me that DAO ODBC direct takes less than a 10th the time of the Jet translation layer. I've not tested that myself. Since I have all my users on individual PC's, 'optimisation' has been irrelevant.
(david)
> Mike, I've not worked on anything with quite so large a user audience, but > my experiences with Access-Jet-ODBC-server have been satisfactory with [quoted text clipped - 64 lines] > > > > -Mike Larry Linson - 24 Nov 2003 05:07 GMT > My opinion is that an Access front end > is either fast enough, or not fast enough. [quoted text clipped - 4 lines] > than a 10th the time of the Jet translation > layer. I've not tested that myself. . . . I agree with your criteria, either it is or is not fast enough. I'm sure there could be speed advantages to ODBC Direct, but I would want a compelling reason to go to the unbound forms and reinventing functionality in code that it would require to take advantage of those speed improvements. That would not be an issue with web development, since you'll have to access the DB from code, no matter which technique you use. Whether there are comparable advantages to ADP/ADE and ADO, I couldn't say.
But, if the "easy way" is "fast enough", then worrying about a faster way is something like the super-hype on "lightweight forms" without a corresponding code module -- when Michael Groh, Tech Editor of _Access, VB, SQL Advisor_ tested them, he found, yes, indeed they were faster to load... 5 to 15 milliseconds faster... measurable, but not evident to the user sitting at the keyboard.
BTW, David, thanks for all your good work providing good answers to questions here in the newsgroups.
Larry Linson Microsoft Access MVP
Mike Dwyer - 25 Nov 2003 07:03 GMT > > My opinion is that an Access front end > > is either fast enough, or not fast enough. [quoted text clipped - 25 lines] > Larry Linson > Microsoft Access MVP I agree, Larry. Unless there's a good reason for doing it, I try to keep it simple at all cost. There's a lot of misinformation floating around that everybody has heard one thing or another. Finding people with actual experience is invaluable. People thought I was nuts for implimenting 150 users with JET, yet it works just fine. However, when I put a profiler on the server, I found that certain things I did triggers a TON of SELECT statements. Just opening one of my forms triggered 950 Statements to be triggered! After modifying my code, I got it down to 20.
Lance - 25 Nov 2003 13:56 GMT Sounds like your asking for trouble. Not only do you need to deploy your application once - but every time you change the front end due to a bug fix or enhancement you'll need to deploy the entire front end to every single user all over again.
david epsom dot com dot au - 25 Nov 2003 21:23 GMT If by 'entire front end' you mean the single MDB file, I haven't found that to be any different from when I deployed a C++ or VB exe: When I changed the front end due to a bug fix or enhancement, I needed to deploy the entire front end to every single user all over again.
(david)
> Sounds like your asking for trouble. Not only do you need to deploy your application once - but every time you change the front end due to a bug fix or enhancement you'll need to deploy the entire front end to every single user all over again.
Larry Linson - 26 Nov 2003 03:48 GMT > If by 'entire front end' you mean the > single MDB file, I haven't found that [quoted text clipped - 4 lines] > ploy the entire front end to every > single user all over again. In fact, our users "deployed" to themselves... we had version numbers in the common tables and in the front end itself, and code at startup to check... if there was a mandatory new version of the FE, we told the user to copy it from the server to his/her hard drive and then we quit the application; if an optional new version, we'd tell them and let them decide whether to go on or not.
But, in times (relatively) long past, I can remember deploying new versions by shipping huge decks of punch cards or 14" reels of half-inch or one-inch magnetic tape. Because that was such a slow operation, you wanted to be very sure you had tested the installation thoroughly. Otherwise, you might fill the sky with airplanes overnighting the repaired version of your distribution... not fun to explain to your manager all those overnight freight bills.
Larry Linson Microsoft Access MVP
Lance - 26 Nov 2003 14:36 GMT Well, I was not recommending he re-write the application in vb.exe or c++. A web based solution would seem optimal here. MDB/MDE front ends tend to be quite large and deploying to 500+ users in remote locations just sounds like a deployment/maintenance nightmare.
Lance ----- david epsom dot com dot au wrote: ----- If by 'entire front end' you mean the single MDB file, I haven't found that to be any different from when I deployed a C++ or VB exe: When I changed the front end due to a bug fix or enhancement, I needed to deploy the entire front end to every single user all over again. (david) "Lance" <anonymous@discussions.microsoft.com> wrote in message news:A6483B09-EFFE-4BD1-BB10-27A4044C17BA@microsoft.com... > Sounds like your asking for trouble. Not only do you need to deploy your application once - but every time you change the front end due to a bug fix or enhancement you'll need to deploy the entire front end to every single user all over again.
Mike Dwyer - 28 Nov 2003 05:37 GMT > Well, I was not recommending he re-write the application in vb.exe or c++. A web based solution would seem optimal here. MDB/MDE front ends tend to be quite large and deploying to 500+ users in remote locations just sounds like a deployment/maintenance nightmare. > [quoted text clipped - 16 lines] > or enhancement you'll need to deploy the entire front end to every single > user all over again. A web solution definitely has its advantages from a deployment standpoint. I just hate the web front end "experience" for this particular application. This is a very interactive application and with Access, the interface is very responsive. Web interface equivalents are still a bit clunky when it comes to this particular app.
Larry Linson - 09 Dec 2003 04:02 GMT > I just hate the web front end "experience" > for this particular application. ... Web > interface equivalents are still a bit clunky > when it comes to this particular app. I think you can safely leave off the limitation 'to this particular app'. <G> It's the difference between a rich client (Access) and thin client (web browser). That difference is one of the areas that .NET is supposed to improve; whether and how soon that may happen are yet to be determined.
That said, there are a lot of people opting for thin-client applications whenever they have a lot of users. I've often thought that there were far more n-tier distributed enterprise applications than there were _requirements for n-tier distributed enterprise applications_ just because of the buzz and hype associated with them.
Larry Linson Microsoft Access MVP
|
|
|