Развитие платформы SciRus Якшин М. М. БЕН РАН
Исторический экскурс: платформа SciRus Разрабатывается с 2004 г. Инструмент для создания настраиваемых учетных систем, хранящих сильно структурированную информацию о наборе сущностей и связях между ними. Базовые функции: многопользовательский доступ редактирование, поиск, выдача информации
Системы на базе SciRus «Наука России» БД «Публикации сотрудников» БД «Доклады на конференциях» БД «Библиотеки ЦБС БЕН РАН» БД «Редкие книги» Технологическая подсистема ЭБ «Научное наследие России» Информационная система «Волоконная оптика» НЦВО РАН Информационная система «История геологии и горного дела»
Технологическая подсистема ЭБ «Научное наследие России»
Предпосылки создания новой версии (1) Отсутствие хранения истории изменений доступны некоторые элементы (авторство, временные метки, бэкапы), но не вся история Тесная связь пользовательского интерфейса и механизма работы с записями нет единого API для отдельных систем API реализовывалось вручную морально устаревшая структура URL
Предпосылки создания новой версии (2) UI редактирования: можно редактировать несколько сущностей сразу (стековая машина) есть неочевидное состояние редактирования недопонимание происходящего => порча данных UI поиска: отсутствие постраничной выдачи
Предпосылки создания новой версии (3) Система не была изначально спроектирована для неограниченного публичного доступа из глобальных сетей: неоптимальная с т.з. поисковых машин структура URL поисковые запросы => сильная нагрузка Сравнительно старая техническая реализация: привязка к одному типу СУБД верстка на уровне HTML4 преимущественно без JavaScript не использовались современные подходы к проектированию интерфейсов затруднено использование современных мобильных устройств
Отображение SciRus SQL: как было Метаданные: несколько отдельных таблиц по одной таблице на сущность справочники в метаданных таблиц СУБД (enum, set) Хранение отдельных записей: каждое поле SciRus = поле SQL ручная настройка индексов Нет хранения истории как отдельных транзакций
Отображение SciRus SQL: как стало Метаданные: централизованное хранилище в памяти единая большая запись с JSON/BSON в БД справочники в этом же хранилище независимость от конкретной СУБД Хранение отдельных записей: хранение записи в виде структурированного JSON/BSON в одном поле _data только индексируемое поле SciRus = поле SQL автоматическая отображение настройки индексов SciRus -> SQL Хранения истории отдельных транзакций в дополнительной таблице на каждую сущность
Хранение истории изменений Основная таблица = поисковый механизм Таблица истории (суффикс _h), фиксированная схема: hid – первичный ключ _id – ссылка на запись в основной таблице _data – структурированное содержимое транзакции в формате JSON/BSON-документа ts – временная метка в формате UNIX timestamp user_id – ссылка на пользователя, инициировавшего эту транзакцию
Программные аспекты Было: PHP 4 MySQL 5 / MariaDB HTML 4 табличная вёрстка неадаптивная вёрстка минимальное использование JavaScript Стало: Ruby on Rails 4 MySQL / PostgreSQL /... HTML 5 Twitter Bootstrap адаптивная вёрстка unobtrusive JavaScript