Jump to content

#CanWeDoThisWithProcessWire - Online Examination


JeevanisM
 Share

Recommended Posts

Hello friends,

Got a new project inquiry, the general requirements as below - 

  • Website Type - Online Examination 
  • Questions - Multiple choice Question with one selection for answer 
  • Expected Attendees - 25,000 students 
  • Registration required ( with OTP for confirmation ) with Online Payment mode 
  • After the exam, a student can see the score with results 
  • Admin - various type of lists (  highest mark scored students, categories of percentage etc ) 

Now, I have a doubt, what kind of Server hosting I should suggest to my client ? Is this 25,000 at a time very high load ? I dont know much about the server load / bandwidth .

As like that, the requirement, is Processwire a suitable tool to achieve the goal ? if so, what are the modules, I should use, or a general structure / approach ? 

 

thank you

 


 

 

  • Like 1
Link to comment
Share on other sites

It's definitely possible.  I built a complicated online scholarship application with ProcessWire, while not the same thing as an exam, it did have some similarities.  An application would be initiated by a nominator on behalf of the person being nominated, and then there were 3 reference people per application (it got pretty complicated).  Notification emails, application statuses, a bunch of other things.

In my case, the public interface was mostly the in admin, so it had no "frontend" (other than some templates that would be used for redirecting to the edit url).  That meant using roles, permissions and hooks accordingly to lock things down.

In your use case, I would say to build a custom front-end for it and not do it the way I did it.  It will be easier and I think it makes more sense for your use case (ie, multiple choice questions as opposed to all kinds of various fields from files, rich text, etc.).

One crucial thing to test heavily is making sure the test takers don't get logged out for some reason.  In my situation, that happened and I could not exactly pinpoint why, but it caused a lot of trouble especially since the application involved people filling out long-form answers, which would then be wiped when they hit the save button and their session had expired.  I'll have to figure that out in the next iteration, but that was bad.

You may want to have one question per page.  This is how online / computer-based tests usually do it anyway.

As for structure, maybe this could work:

  • Home
    • Exams
      • Exam 1
        • Question 1 ('question' template)
          • Answer Option 1 ('answer' template)
          • Answer Option 2
          • Answer Option 3
        • Question 2
          • Answer Option 1
          • Answer Option 2
          • Answer Option 3
    • Submissions
      • Submission 1 ('submission' template)
      • Submission 2

question template

  • title - the question being asked

answer template

  • title - the answer text
  • correct - checkbox indicating this is the correct answer

submission template

  • (title -- make the field not required and hide it, rather than removing it as a global field... a trick I use)
  • user - page field for parent /admin/access/users/; the person who took the test; maybe use the autocomplete inputfield here since loading 25,000 things into a select list will be problematic
  • exam - page field for parent /exams/; the exam that was taken
  • answers - multi-select page field (asm-select) that has all the answers they chose for the particular exam
  • (any other relevant data you need to store)

With some code you can check the correct answers of an exam vs. the submission answers and go from there.

  • Like 8
  • Thanks 1
Link to comment
Share on other sites

13 hours ago, Jonathan Lahijani said:

You may want to have one question per page.  This is how online / computer-based tests usually do it anyway.

thank you for your valid advice ... and yes this one is exactly what I thought, in order to save any complication 

  • Like 1
Link to comment
Share on other sites

Although doable, I'd only recommend a system like this to be implemented using ProcessWire if the rest of the project must (or already is) be highly coupled with PW and it doesn't make sense to decouple it for whatever reason. Otherwise I'd recommend you to implement it using another framework. PW shines in the content management part, and I love it, but it may present you with some limitations in its developer-experience department when you need to implement some business logic that relies heavily on integration of payment systems, user data input, generation of reports and especially tests. There's also a myriad of similar systems like this already implemented that you can use as a base, like this one https://github.com/LaravelDaily/Laravel-Test-Result-PDF (demo: https://www.youtube.com/watch?v=GmLFHGud7I8). 

Edited by Sergio
typo
  • Like 4
Link to comment
Share on other sites

On 8/30/2020 at 3:23 PM, Sergio said:

Although doable, I'd only recommend a system like this to be implemented using ProcessWire if the rest of the project must, or already is, be highly coupled with PW and it doesn't make sense to decouple it for whatever reason. Otherwise I'd recommend you to implement it using another framework. PW shines in the content management part, and I love it, but it may present you with some limitations in it's developer-experience department when you need to implement some business logic that relies heavily on integration of payment systems, user data input, generation of reports and especially tests. There's also a myriad of similar systems like this already implemented that you can use as a base, like this one https://github.com/LaravelDaily/Laravel-Test-Result-PDF (demo: https://www.youtube.com/watch?v=GmLFHGud7I8). 

thanx for the input, I was thinking about the Laravel  first but wanted to ask some expert opinion 

Link to comment
Share on other sites

On 8/29/2020 at 9:12 PM, JeevanisM said:

Now, I have a doubt, what kind of Server hosting I should suggest to my client ? Is this 25,000 at a time very high load ? I dont know much about the server load / bandwidth .

Any suggestion for this ? 

Link to comment
Share on other sites

1 hour ago, JeevanisM said:

Any suggestion for this ? 

25,000 per hour/day/week? It all depends.

From what you described about the app, even 25k users a day should be fine to start with a VPS with 2GB of RAM. If its usage increase a lot you can move the database to another VPS on its own AND/OR increase the VPS CPU and RAM resources very quick.  

My advice is to keep things simple and not try to over-engineer the application performance from the start. But if you feel "adventurous" ? or think that the project will have this many users right away on day one (which I doubt) you can start with a "serverless" approach where the infrastructure is scaled on-demand, using https://vapor.laravel.com/ and you don't have to worry. There's a course about this approach that is very interesting: https://serverlesslaravelcourse.com/

  • Like 2
  • Thanks 1
Link to comment
Share on other sites

15 hours ago, Sergio said:

25,000 per hour/day/week? It all depends.

From what you described about the app, even 25k users a day should be fine to start with a VPS with 2GB of RAM. If its usage increase a lot you can move the database to another VPS on its own AND/OR increase the VPS CPU and RAM resources very quick.  

My advice is to keep things simple and not try to over-engineer the application performance from the start. But if you feel "adventurous" ? or think that the project will have this many users right away on day one (which I doubt) you can start with a "serverless" approach where the infrastructure is scaled on-demand, using https://vapor.laravel.com/ and you don't have to worry. There's a course about this approach that is very interesting: https://serverlesslaravelcourse.com/

//25,000 per hour/day/week?//  This will happen at  particular date  from 10 AM to 11AM only. This will not happen everyday, only  once in a month or so 

Link to comment
Share on other sites

1 hour ago, JeevanisM said:

This will happen at  particular date  from 10 AM to 11AM only. This will not happen everyday, only  once in a month or so 

If you have highly variable load I'd suggest going with something like heroku for manual scaling (if planable) or even solutions, which can automatically scale. No need to run a super beefy server for a whole month if only a single day has actual load. 25k/hour is around 7req/s (likely higher for varying load over the duration of the hour), so either requests must be served in <1/7s or you need more server instances.

  • Like 2
Link to comment
Share on other sites

On 8/29/2020 at 5:42 PM, JeevanisM said:

After the exam, a student can see the score with results 

As number? As chart? As PDF?

On 8/29/2020 at 5:42 PM, JeevanisM said:

Admin - various type of lists (  highest mark scored students, categories of percentage etc ) 

For that part (when using ProcessWire), I'd have a look at RockFinder3 and http://tabulator.info/ (and definitely go with a one-page-per-question/answer route!)

  • Like 1
Link to comment
Share on other sites

On 9/1/2020 at 3:26 PM, bernhard said:

As number? As chart? As PDF?

For that part (when using ProcessWire), I'd have a look at RockFinder3 and http://tabulator.info/ (and definitely go with a one-page-per-question/answer route!)

Just as one page, no need of chart, just tabular data with possible option to export as PDF

Link to comment
Share on other sites

On 9/2/2020 at 3:53 PM, AndZyk said:

Sorry, if I didn't understand your case, but if you are looking for a survey tool I can recommend LimeSurvey.

Of course you could do this with ProcessWire, but a survey tool has most of your points already covered. ?

thanks for the reply, but not a Survey, its just an online examination but after reading your comment, seems like  a Survey and a Multiple choice exam look alike ?

Link to comment
Share on other sites

On 9/1/2020 at 1:02 PM, LostKobrakai said:

If you have highly variable load I'd suggest going with something like heroku for manual scaling (if planable) or even solutions, which can automatically scale. No need to run a super beefy server for a whole month if only a single day has actual load. 25k/hour is around 7req/s (likely higher for varying load over the duration of the hour), so either requests must be served in <1/7s or you need more server instances.

yes that right,  I will check the options you provided . thankx 

Link to comment
Share on other sites

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...