|
1 | | -### Readme will be updated by 30/03/2024 with proper documentation as mentioned |
| 1 | +# Event Log Ingest And Query Backend System. |
| 2 | +Developed a RESTful service that manages and queries event data based on a user's geographical location and a specified date. This service will ingest data from a provided CSV dataset and then offer an API to find events for user |
| 3 | + |
| 4 | +## Tech Stack choice |
| 5 | +Language/Environment - JavaScript, Node.JS |
| 6 | +Framework - Express.JS |
| 7 | +Database - MongoDB <br> |
| 8 | +<br> |
| 9 | +I wanted to take a moment to explain why I chose JavaScript, Express.js, and MongoDB. <br> |
| 10 | +JavaScript was chosen for its versatility, and asynchronous nature, making it well-suited for rapid development and handling concurrent operations.<br> |
| 11 | +Express.js, a minimalist web framework for Node.js, was selected for its simplicity, flexibility, and robust middleware support. <br> |
| 12 | +MongoDB was opted for as our database solution due to its flexibility, scalability, and ease of use. As a NoSQL database, it accommodates unstructured data, making it suitable for applications with evolving data schemas. <br> |
| 13 | + |
| 14 | +### Design Pattern And Performance Enhancement |
| 15 | +MVC(model-view-controller) design pattern is followed for this backend system. <br> |
| 16 | +For optimize query performance mongoDB database indexing has been done on 'date' attribute with sorting order set to ascending as in this assignment queries are related to 'date' only. <br> |
| 17 | +This '/event/find' API endpoint reuire data from given external weather and distance APIs. Hence concurrent programming has been implementesd to concurrently fetch responces from external APIs for all the events occurring within the next 14 days from the specified date. Here javascript Promises are used for concurrency with robust error handling. (see controller.js file) <br> |
| 18 | +All the API endpoints has robust error/exception handling. |
| 19 | + |
| 20 | +## Getting Started |
| 21 | +#### To run this backend system locally, your system needs have node and npm installed. |
| 22 | +### 1. Clone the repository |
| 23 | +``` |
| 24 | +git clone https://github.com/sdcode001/Event-log-ingest-and-query-system-with-enhanced-performance-using-concurrency-indexing.git |
| 25 | +``` |
| 26 | +### 2. Change directory |
| 27 | +``` |
| 28 | +cd Event-log-ingest-and-query-system-with-enhanced-performance-using-concurrency-indexing |
| 29 | +``` |
| 30 | +### 3. Install packages |
| 31 | +``` |
| 32 | +npm install |
| 33 | +``` |
| 34 | +### 4. Start server |
| 35 | +``` |
| 36 | +npm run start |
| 37 | +``` |
| 38 | +#### Now server will run on localhost:3000. Make sure your system is not running other application on port 3000 |
| 39 | + |
0 commit comments