Skip to content

Cutting Corners

Oleksandr Nikitin edited this page Jun 11, 2016 · 4 revisions

(заметки по реализации)

Хочется, чтобы оно было более-менее развиваемо из самого себя с самого начала Для этого с самого начала допускаем внешние one-shot воркеры и бинарники. Это отличается от jupyter, так как там кернел торчит живой все время жизни ноутбука, там это скорее agent чем воркер.

Стабильность бинарников можно сделать какой-то автопроверкой на другой машинке То есть "импорт бинарников" а не просто "запустить команду", чтобы деплоилось оно всегда через рантайм.

Маркировать все "агенты/воркеры с сайд-эффектами" чтобы они отличались от "чистых воркеров"

Хранилище - считаем, что у нас индексы в RAM, плюс распределенные а-ля TreeMerge (+пул нового по которому мы ищем всегда)

Синк - обмен фактами, дерево контекстов per-device с ручным мержем пока что.

Мутабельные обьекты мержаются как и раньше через tree-merge, это грубо говоря кэш. Считаем, что это разновидность вьюшки, отдельно идут факты "правка дефинишна вьюшки", а синхронизация "какой факт в каком неймспейсе

Multi-tenancy сейчас не делаем, делаем один инстанс на юзера.
То есть spawn новых инстансов методом копирования, человек сто сервис выдержит
С аутентификацией и апдейтами все сложно и непонятно ((

Структура БД

Json fact store. Содержит факты, пространства имён (внутри пространства имен факты никак не организованы)

Вьюшки (фильтры, индексы, то-се). Имеют на входе одно или больше пространств имён, результаты поиска создают новое пространство имён.

Что делать с циклами - пока непонятно. Наверное, надо тегировать через какие вьюшки факт прошел, и если он идет через вьюшку по второму кругу - то вьюшка должна явным образом опубликовать его, чтобы избегать зацикливаний.

Не забыть различать локальные и глобальные пространства имён

Юзер работает с сессиями (цепочками вопрос-ответ). Они идентифицируются по хвостикам, хотя в принципе можно начать с любого хвостика и тогда цепочка превратится в дерево.

Таким образом, у факта есть содержимое, то, в каких неймспейсах он находится, трейс откуда он произошел.

Мутабельные обьекты нужны для отображения состояния сущностей/систем которые живут продолжительное время и изменяются на протяжении этого времени.

Они имеют id, и состоят из графа ревизий, где ревизия - это факт об новом состоянии или изменении состояния. Они могут ссылаться друг на друга, при этом ссылка хранит и id обьекта, и id ревизии, и может быть обновлена до новой ревизии по необходимости.

Сессии аналогично ссылаются на обьект+ревизию, чтобы мы могли посмотреть как на историческое состояние обьекта, так и на его снапшот в момент добавления.

факты и пространства имен имеют ID, которые в свою очередь имеют названия (captions). один идентификатор может иметь много названий, одно название скорее всего ведет на много идентификаторов.

Clone this wiki locally