Дата: 2025-01-02
Версия: 1.0
Статус: Completed
Исследование пяти ведущих Document Management Systems (DMS):
- Confluence (Atlassian) — энтерпрайз-решение для команд
- Notion (Notion Labs) — все-в-одном workspace с блок-архитектурой
- GitBook (GitBook) — документация с git-синхронизацией
- Outline (Open Source) — открытая wiki для команд
- BookStack (Open Source) — простая альтернатива Confluence
Фокус: Модели данных, UI паттерны, хранение документов (критическое!)
| Сущность | Описание | Характеристики |
|---|---|---|
| Space | Контейнер для контента | Top-level организация |
| Page | Основная единица контента | Содержит body, metadata, версии |
| Attachment | Загруженный файл | Версионирован, хранится отдельно |
| Blog Post | Временной контент | Похож на Page, но с датой публикации |
| Database | Структурированные данные | v2025: новая структура для контента |
| Comment | Комментарий на странице | Древовидная структура |
| Компонент | Хранилище | Формат |
|---|---|---|
| Page Content | MySQL/PostgreSQL БД | HTML в CONTENT_BODY |
| Attachments | Filesystem + S3 | Binary files |
| Revisions | БД + Filesystem | HTML snapshots |
| Search Index | Embedded (Lucene) | Inverted index |
Особенность: Каждый версион — полный снимок (не diff-based)
Ключевая идея: Всё в Notion — это блок.
| Сущность | Описание |
|---|---|
| Workspace | Корневой контейнер |
| Page | Блок типа page |
| Database | Контейнер данных (переструктурировано в 2025) |
| Data Source | Источник данных (NEW 2025!) |
| Block | Базовая единица всего |
| Период | Блоков | Размер | Архитектура |
|---|---|---|---|
| 2021 | 20 billion | ~100 TB (compressed) | Single Postgres |
| 2023 | 100+ billion | ~500 TB | Sharded Postgres |
| 2025 | 200+ billion | ~1+ PB | Distributed |
Postgres (Live)
↓
Debezium CDC
↓
Kafka (Event Stream)
↓
Apache Hudi
↓
S3 (Data Lake)
↓
Spark/Presto (Analytics)
| Сущность | Описание |
|---|---|
| Space | Корневой документ-сборка |
| Page | Страница с контентом |
| Subpage | Вложенная страница (3-4 уровней макс) |
| Revision | Версия контента (Git-like) |
| Change Request | Branch для редактирования (как PR) |
Источник | Формат | Примечание
-----------------|-----------------|------------------
Git Repository | .md files | Если Git Sync включен
GitBook Database | Markdown + JSON | Если визуальный редактор
Local FS | .md files | Для self-hosted
S3 / Cloud | Markdown + JSON | Масштабируемое
| Сущность | Описание |
|---|---|
| Workspace | Корневой контейнер |
| Collection | Группировка документов (как папка) |
| Document | Основная единица контента |
| Revision | Версия документа |
| Comment | Комментарий на документе |
| Backlink | Автоматическая связь между docs |
PostgreSQL Database (Primary)
├── documents table (content as markdown)
├── revisions table (версионирование)
├── attachments table (file references)
└── Full-text search index
| Сущность | Описание |
|---|---|
| Shelf | Группировка книг (опционально) |
| Book | Основной контейнер |
| Chapter | Группировка страниц в книге (опционально) |
| Page | Основная единица контента |
| Attachment | Загруженный файл к странице |
| Revision | Версия страницы |
Структура: Shelf → Book → (Chapter) → Page
├─ MySQL / PostgreSQL Database
│ ├─ pages table (html column = основной контент)
│ ├─ pages table (markdown column = исходный markdown)
│ ├─ revisions table
│ └─ attachments table (metadata only)
│
├─ Filesystem (Images)
│ └─ storage/uploads/images/
│
├─ Filesystem (Attachments)
│ └─ storage/uploads/files/
│
└─ [Optional] S3 / S3-Compatible
└─ MinIO compatible
| Формат | Хранение | Примечание |
|---|---|---|
| Rich Text (WYSIWYG) | HTML в pages.html |
TinyMCE output |
| Markdown | Markdown в pages.markdown |
CommonMark + tables |
| HTML | Standard HTML в БД | Портируемо |
| Attachments | Filesystem + metadata | Versioned |
| Параметр | Confluence | Notion | GitBook | Outline | BookStack |
|---|---|---|---|---|---|
| Иерархия | Space → Page (no limit) | Workspace → Page (unlimited) | Space → Page (3-4 max) | Workspace → Collection → Doc | Book → Chapter → Page |
| Основная единица | Page | Block | Page | Document | Page |
| Версионирование | DB snapshots | Optimistic locking | Git branches | DB revisions | DB revisions |
| Связи | Links + Mentions | Relations + Rollups | Links + External | Backlinks + Wiki | Links |
| Rich Text | HTML | Block-based | Markdown + Rich | Markdown + Rich | HTML + Markdown |
| Параметр | Confluence | Notion | GitBook | Outline | BookStack |
|---|---|---|---|---|---|
| БД | MySQL/PostgreSQL | PostgreSQL (шардированная) | Notion DB | PostgreSQL | MySQL/PostgreSQL |
| Файлы | Filesystem + S3 | S3 | Git + CDN | S3 / FS | Filesystem / S3 |
| Версионирование | DB snapshots | Optimistic locking | Git history | DB revisions | DB revisions |
| Export | HTML, PDF, XML | Markdown, HTML, CSV | Markdown, PDF, HTML | Markdown, HTML, ZIP | HTML, PDF, Markdown |
| Масштаб | Enterprise | 200+ billion blocks | Teams | Teams | Teams |
| Параметр | Confluence | Notion | GitBook | Outline | BookStack |
|---|---|---|---|---|---|
| Search | Full-text + advanced | Cmd+K с фильтрами | Full-text | Full-text + popularity | Full-text |
| Navigation | Breadcrumbs + Sidebar | Page tree + Favorites | TOC | Tree + Recent | Breadcrumbs |
| Editor | WYSIWYG (Rich) | Block-based visual | WYSIWYG + Markdown | Markdown + Rich | WYSIWYG + Markdown |
| Collaborative | Real-time | Real-time | Change Requests | Real-time | Drafts-based |
| Comments | Inline + page | Inline | None (PR-based) | Thread | Tree-structured |
| Mobile | Good | Good | Limited | Limited | Limited |
Database-Centric (Confluence, Notion, Outline)
├─ Content в БД
├─ Быстрый поиск (FTS index)
├─ Сложное версионирование
└─ Scaling требует шардинга
File-First (GitBook)
├─ Content в .md файлах (Git)
├─ Version control из коробки
├─ Markdown портируемо
└─ Scaling простой (git clone)
Hybrid (BookStack)
├─ Content в БД (HTML + Markdown)
├─ Files на Filesystem или S3
├─ Баланс простоты и функциональности
└─ Средний scaling
Block-Based (Notion)
├─ Гибкость: всё модуляризировано
├─ Сложность: больше кода
├─ Мощность: Relations, Rollups
└─ Performance: требует careful indexing
Page-Based (Confluence, GitBook, BookStack)
├─ Простота: страница = единица
├─ Performance: быстрее для большинства case
├─ Масштаб: проще горизонтально
└─ Гибкость: меньше, чем блоки
Database Snapshots (Confluence)
├─ Full copy каждой версии
├─ Simple restore
├─ Storage: требует много места
└─ Query: быстрый поиск
Git History (GitBook)
├─ Diff-based
├─ Full Git workflow
├─ Storage: компактнее
└─ Query: нужно reconstruct
Incremental Snapshots (Outline, BookStack)
├─ Full copy, но optimized
├─ Balance между простотой и storage
Уровень 1: API Gateway
└─ REST / GraphQL для CRUD операций
Уровень 2: Document Engine
├─ Page/Document model
├─ Hierarchical storage (Book→Chapter→Page)
├─ Rich Text + Markdown support
└─ Real-time collaborative editing
Уровень 3: Storage Layer
├─ PostgreSQL (основной контент)
├─ S3 (files, images, exports)
├─ Elasticsearch (FTS index)
└─ Redis (cache, locks for editing)
Уровень 4: Versioning
├─ Content snapshots в БД
├─ Git integration (опционально)
└─ Revision table с metadata
Уровень 5: Permissions
├─ Role-based (Admin, Editor, Viewer)
├─ Scope: Workspace, Collection, Document, Field
└─ Cache permission checks
| Layer | Technology | Reason |
|---|---|---|
| Frontend | React + ProseMirror | Rich editor |
| Backend | Python/FastAPI или Node.js | API stability |
| Primary DB | PostgreSQL | Reliable, ACID, JSON support |
| Search | Elasticsearch | Fast FTS + aggregations |
| Cache | Redis | Edit locks, user sessions |
| Files | S3 (MinIO for self-hosted) | Scalable |
| Versioning | Git + DB snapshots | Best of both |
| Realtime | WebSocket + CRDT | Collaborative editing |
Database-Centric (Confluence, Notion, Outline, BookStack) лучше для enterprise
- Быстрый поиск
- Сложное версионирование
- Real-time collaborative editing
- Требует шардинга для масштаба
File-First (GitBook) лучше для documentation
- Git workflow (version control)
- Markdown portability
- Простой scaling
- Не подходит для real-time collab
Storage Strategy определяет масштабируемость:
- Маленькие teams (10-100): Filesystem OK
- Medium teams (100-1000): S3 нужен
- Large teams (1000+): Sharded DB + CDN
Content Format:
- Rich Text (Confluence, Notion) → большая гибкость
- Markdown (GitBook, Outline) → портируемость
- Hybrid (BookStack) → баланс
Для Pirotehnika Scale рекомендуется:
- PostgreSQL + S3 hybrid model
- Hierarchical document structure (как BookStack)
- Rich Text + Markdown support
- Real-time editing для больших teams
- Git integration для documentation/workflows
Документ завершён: 2025-01-02
Версия: 1.0
Статус: Ready for architecture decisions