Приложение для хранения большого объема данных об обучении

Приложение для хранения большого объема данных об обучении

В проекте использовали

  • RabbitMq
  • tarantool
  • MongoDb
  • TinCan API
  • Php
  • JSON

Клиент пришел с проблемой

Заказчик был заинтересован в создании удобного приложения для хранения и обработки данных о результатах и процессе обучения. В теории оно должно каждый день получать данные от всех обучающих организаций региона, хранить их и формировать отчеты за периоды, а также фильтровать по организациям, компетенциям и другим параметрам. При этом на формирование отчета должно уходить не более 2 секунд.

Это объемный проект с большим объемом данных и запасом прочности. Нас привлекли в проект коллеги, потому что сами не решались реализовать такое приложение. Пришлось работать в непривычной области и освоить новый стек технологий. Но мы справились.

фото
Георгий ПетровCEO

Всегда есть особенности

Нужно было определить единый формат данных, учитывая, что каждый учащийся совершает множество действий (посещает уроки, получает оценки), и по разным действиям структура информации будет разной. К тому же объем информации очень большой: совокупная численность учащихся – более 1 000 000 человек. Эти данные нужно хранить, и их количество будет постоянно увеличиваться. Для составления отчетов по разным срезам придется считать данные в режиме реального времени.

Как мы это сделали

Для работы с образовательными учреждениями мы выбрали стандарт xApi, который разработан для хранения и передачи информации о ходе обучения и позволяет описать любое событие в едином формате. Так мы решили вопрос о приеме, обработке и хранении данных.

Чтобы уменьшить нагрузку на приложение мы фильтруем входящую информацию: выбираем то, что нужно для отчетов и агрегируем в виде полуфабрикатов, чтобы сохранить в отдельной базе данных tarantool. Она умеет быстро работать с такими заготовками, так что теперь при запросе отчета система работает с удобно структурированной информацией.

Мы также разделили разные задачи приложения по разным серверам. Первый – принимает данные и обрабатывает, второй – сохраняет все входящие данные в БД MongoDB, а третий – готовит данные для отчетов, сохраняет их в базу tarantool и выдает по запросам.