Skip to content

Latest commit

 

History

History
104 lines (89 loc) · 6.46 KB

README.ru.md

File metadata and controls

104 lines (89 loc) · 6.46 KB

GlobalStorage

Концепция

Это распределенная СУБД для стека технологий Metarhia построенная на следующих принципах:

  • Встраивание в процесс сервера приложений Impress для того, чтобы избежать лишнего межпроцессового взаимодействия;
  • Глубокая совместимость с сетевым протоколом JSTP, данные хранятся на диске и памяти в формате, близком протоколу;
  • Формат передачи данных по протоколу и формат хранения могут не содержать идентификаторов полей, что уменьшает их размер; значения полей хранятся в массивах, которые можно поставить в соответствие полям модели (схеме/метаданным) позиционным сопоставлением;
  • Максимальное использование памяти, упреждающее чтение, отложенная запись, минимизация преобразования данных;
  • Использование метаданных, специального декларативного формата описания предметной области, включая сущности, связи и атрибуты из которого можно автоматически построить схему хранения в реляционной СУБД, структуры памяти и структуры для бессхемных СУБД, различные GUI, серверное API и т.д.;
  • Реализация движков с одинаковым API доступа к данным на клиенте и на сервере:
    • имеет движок хранения на сервере;
    • имеет движки хранения на клиенте (несколько реализаций для разных платформ);
    • позволяет нескольким серверам объединяться для распределенного хранения;
    • позволяет нескольким клиентам обмениваться данными в режиме P2P;
  • Синхронизация данных между клиентом и сервером в как в реальном режиме времени, так и в отложенном режиме, т.е. возможность работать в онлайне (интерактивно вместе с другими пользователями), так и в оффлайне с данными, сохраненными в локальном хранилище, и иметь двухстороннюю синхронизацию данных с версионностью и ветвлением, как в git;
  • Глобальная унификация структур данных в рамках всех систем, работающих на стеке технологий Metarhia, т.е. GlobalStorage, Impress, JSTP и Console через модерируемые распределенные репозитории структур данных;
  • Возможность работать с не унифицированными данными, специфическими для конкретных систем;
  • GlobalStorage предоставляет абстракцию слоя доступа к данным, т.е. заменяет ORM системы, но не обязательно делает мапинг на реляционную модель, хоть такая возможность тоже встроена;
  • Данные имеют сквозную идентификацию во всей системе, т.е. вставка данных может быть распределенной и не приведет к конфликтам идентификаторов;
  • Достоверность данных обеспечивается их распределенным хранением, версионностью и подписыванием версий хешами.

Metamodel Definition Language

Язык описания метамодели. По этому описанию мы динамически строим прототипы и можем присвоить такой прототип позиционному массиву, чтобы с ним можно было работать как с объектом.

Пример:

{
  code: { type: 'string', primary: true },
  name: {
    caption: 'City',
    type: 'string',
    size: 32,
    nullable: false,
    index: { unique: false },
    master: { dataset: 'Cities', key: 'name' }
  },
  birth: 'Date',
  city: 'string',
  addresses: {
    type: { array: 'Address' }
  },
  gender: {
    type: 'char',
    lookup: { dictionary: { M: 'Male', F: 'Female' } }
  },
  age: function() {
    var difference = new Date() - this.birth;
    return Math.floor(difference / 31536000000);
  }
}

Типы данных:

  • Все встроенные типы JavaScript: string, number, boolean, Date
  • Встроенные типы GS: id, uid, tree, ip и другие
  • Типы данных реляционных СУБД: char, int, real, text, money, time, date...
  • Ссылки на другие структуры, определенные в GlobalStorage
  • Ссылки на структуры, определенные в приложении

JavaScript Query Language

Язык запросов к структурам данных. Описание и примеры данных и запросов лежат в отдельном репозитории: metarhia/JSQL Реализация JSQL будет частью библиотеки JSTP.

Distributed Metamodel Repository

Распределенный репозиторий метамоделей

Data Access Layer

Слой доступа к данным