Документоориентированное хранилище для веб-приложений.
Каждая веб-страница (приложение) определяется исключительно одной сущностью, например:
- статья: описание, рейтинг, тэги, комментарии
- блог: название блога, перечень топ статей
- продукт: описание, цена, кол-во просмотров
- товар/категория: общее описание, перечень конкретных предложений (продуктов)
Каждая сущность имеет
- свойства (название, цена)
- связи (тэги, комментарии)
Такая сущность может быть описана с помощью NoSQL документа, подобно https://docs.mongodb.com/manual/core/document/
{
id: 'xyz',
name: 'Laptop XYZ',
price: 499,
rating: 7.5,
reviews: [{
id: 1,
description: 'Very xz',
userId: 234,
userAvatar: '/ava.png'
}]
}
В итоге получается некая вью-модель, описывающая всё состояние веб-приложения. Такую вью-модель можно отобразить в браузере или на сервере, используя любые веб-инструменты для построения ДОМ-дерева:
- React
- JSDOM
- BEM
- etc.
Возможности библиотеки:
- описывает формат для построения вью-модели
- предоставляет АПИ для взаимодействия с данными
- автоматически устанавливает значения вычисляемых свойств
Необходимо заранее определить схему - структуру данных: названия свойств, типы данных и т.п. После создания документа - изменение схемы невозможно.
Автоматически вычисляет значения свойств как только изменяются наблюдаемые свойства.
Подобные программы:
Формат позволяет задавать соответствующие формулы:
var event = {
start: { type: 'Number' },
end: { type: 'Number' },
duration: {
type: 'Number',
computed: ['start', 'end', function(start, end) {
if (start === null || end === null) { return null; }
return end - start;
}]
}
};
в том числе вычисления работают и для связанных сущностей (композиций/агрегаций)
var group = {
id: { type: 'Text' },
name: { type: 'Text' },
members: {
type: 'ItemList',
ref: member
},
numberOfAdultMembers: {
type: 'Number',
computed: ['members', function(members) {
return members.filter(m => m.age >= 18).length;
}]
}
}
Каждая сущность должна содержать уникальный идентификатор. По умолчанию записывается как id
.
Это позволяет проводить операции вставки, обновления, удаления связанных сущностей.
- индексация данных
- документация: изменение, добавление, удаление