Хранилище данных о клинических и доклинических исследованиях

Индустрии
Здравоохранение
Компетенции
Data engineering и бизнес-аналитика, Разработка
Технологии
Node.js, SQL Server, Angular, Oracle

Клиент


Провайдер полного цикла услуг по проведению клинических исследований, одна из крупнейших контрактных исследовательских организаций (CRO — contract research organization) в мире. На момент начала проекта годовой доход компании составлял более 2 млрд долларов США; штат компании составлял более 11 000 сотрудников в более чем 60 странах.

Задача


Клиент поставил задачу разработать Study Data Warehouse — хранилище данных о клинических и доклинических исследованиях. Все данные нужно хранить в едином репозитории, созданном на базе современных веб-технологий, масштабируемом и обеспечивающем быстрый доступ к информации.

Клинические исследования проводятся для оценки эффективности и безопасности новых лекарственных препаратов. Собранные данные очень разнородны: в каждом исследовании может быть своя структура и источники данных, к тому же аналогичные данные из разных исследований могут иметь разные форматы.

Наш заказчик решил разработать собственное решение, позволяющее объединить данные клинических и доклинических исследований в одном репозитории и поставлять в медицинские информационные системы стандартизированные данные.

Решение


Специфика проекта — работа с большим количеством разнообразных источников данных: от неструктурированных файлов и реляционных баз данных до NoSQL-хранилищ. Мы внедрили уровень абстракции, который позволяет легко — посредством разработанных адаптеров — добавлять поддержку новых источников данных. Данные можно загружать из источников асинхронно — это важно при работе с большими массивами информации.

Основным языком разработки является JavaScript, причём применение одного и того же языка как для серверной, так и для клиентской части позволило увеличить количество повторно используемого кода, улучшило кросс-функциональность и понимание всей командой проекта в целом. Это ускорило разработку новых функций.

Поскольку разработка больших приложений на JavaScript требует аккуратного соблюдения инженерных практик, мы отслеживаем качество кода методами статического анализа кода и код ревью. Особое внимание уделяется юнит-тестированию; для этого мы используем фреймворк Mocha, поскольку он даёт возможность и тестировать клиентскую часть, и писать скрипты для серверной.

В качестве серверного фреймворка выбран Node.js, поскольку его асинхронная модель работы идеально подходит для одновременной обработки большого количества источников данных. Применение асинхронной модели повысило количество обрабатываемых одновременно запросов в единицу времени.

Особое внимание уделялось управлению распределением памяти и стабильности работы приложения — для этого мы задействовали отдельные рабочие процессы и очереди заданий для сложных вычислений.

Ещё одним приоритетом нашей работы было создание удобного и привлекательного пользовательского интерфейса, одинаково функционального и на мобильных устройствах, и на десктопах. Поэтому мы применили подход “Mobile First” и выбрали фреймворк Angular — он даёт возможность разрабатывать гибкий пользовательский интерфейс без необходимости подгружать большие библиотеки. Мы загружаем только то, что действительно нужно на клиентской стороне.

Результат


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

Разработанное решение надёжно, имеет удобный и понятный интерфейс, позволяет загружать данные асинхронно (пользователю не нужно ожидать окончания обработки одного массива, чтобы начать загрузку следующего) и обрабатывать большие объёмы данных, используя минимальный объём оперативной памяти.

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