Развитие платформы 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 Ruby on Rails 4 MySQL 5 / MariaDB HTML 4 MySQL / PostgreSQL / ... табличная вёрстка HTML 5 неадаптивная вёрстка Twitter Bootstrap адаптивная вёрстка минимальное использование JavaScript unobtrusive JavaScript