Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Re: Design question: handling hundreds of state machines in a Web context

by BrowserUk (Pope)
on Jan 02, 2013 at 19:21 UTC ( #1011337=note: print w/replies, xml ) Need Help??


in reply to Design question: handling hundreds of state machines in a Web context

Our primary concerns are performance and accuracy.

The 'state' of any individual user is simply their ID, their current workflow ID, and the step they are currently on.

A workflow is its ID, and (making a few assumptions), a list of templates representing the appropriate form for each step.

Each of these can be stored in a table index by ID. When a user logs in, requesting two such small pieces of data directly by their promary index should be absolutely no problem for any RDBMS worthy of the name; even with 1000s of concurrent users. (Who will spend most of their logged on time staring at the screen or typing, the load on the DB will be minimal.) So performance should be no problem.

As for accuracy, once the user clicks submit on any given step, there are a few possibilities:

  1. The transmission gets lost in transit.

    Assuming you aren't using too much client side trickery, the browser will time out and the user should be able to click the back button and attempt to re-submit.

    The user expectations of reliability should not be high if they fail to sucessfully submit as the intervening internet is not your responsibility.

  2. The submit completes, but your webserver crashes before the state is saved.

    Use a good webserver and test your cgis thoroughly.

  3. The webserver extracts the formdata and issues the DB update, but the DB server crashes.

    Use a reliable DB server.

  4. The update happens but is subsequently lost due DB server crash or disk failure.

    This is bread and butter DB stuff. Use a reliable RDBMS.

In essence, on the basis of your description, this sounds very similar -- in terms of data flows -- to any multi-step ordering/shopping basket/booking process already actioned on a million websites. Ie. nothing extraordinary.

Use reliable tools and don't get too complicated with either your client-side or server side processing.


With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
  • Comment on Re: Design question: handling hundreds of state machines in a Web context

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1011337]
help
Chatterbox?
[Eily]: it would have been 2 years in 2 weeks actually. And welcome back virtualsue :)
[Corion]: I think I saw virtualsue more recently in person than online :-D
[virtualsue]: It's true that there was a bigger gap between the 2 yr old post and the one before it
[ambrus]: yes, I probably just didn't see you two years ago, because I'm not in perlmonks much
[virtualsue]: Nor am I :-)
[talexb]: virtualsue Heh .. long time no see! :)
[virtualsue]: I have a quiet Perl themed slack workspace
[virtualsue]: The person who talks to me on it the most *hates* Perl but she hates everything

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (12)
As of 2017-09-26 13:50 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    During the recent solar eclipse, I:









    Results (295 votes). Check out past polls.

    Notices?