Документоориентированная база данных (аналог MongoDB), реализованная на C# (.NET 8). Проект строится по многоуровневой архитектуре, возможна расширяемость и заменяемость компонентов.
1 лабораторная - интерфейсы для БД. Интерфейсы для классов, таким образом мы задаем скелет нашей программы.
2 лабораторная - реализация интерфейсов. На этом этапе мы должны получить локально работающую бд.
3 лабораторная - разворачиваем бд на хосте. После этого этапа в нашу бд должна быть возможность ходить через grpc или rest (или другой rpc).
4 и 5 лабораторная - репликация и шардирование в любом порядке.
- Document — модель документа (Id, Rev, Deleted, Body).
- IDocumentService — интерфейс CRUD и управления БД.
- IKvStore, IReplicationService, IIndexService, IAttachmentService — абстракции для хранилища, репликации, индексов и вложений.
- Абстракции позволяют легко менять backend (например, память → диск → LSM).
- InMemoryKvStore — временное in-memory хранилище (используется для лабораторной работы 1).
- InMemoryDocumentService — реализация CRUD, AllDocs, Changes.
- FileAttachmentStore — хранение вложений вне основного KV-хранилища.
- CompactionService — фоновая очистка истории (будущее расширение).
- SecondaryIndexService — индексация для поиска по полям.
- DbAndDocumentsController — CRUD-операции, поиск, быстрая статистика по БД и другое.
- AttachmentsController — работа с вложениями (PUT/GET/DELETE).
- ReplicationController — интерфейс для репликации (push/pull).
- HealthController, Metrics — эндпоинты для проверки состояния и сбора метрик.
- ShardRouter, ClusterMembership, RebalanceService — шардирование, маршрутизация и балансировка нагрузки.
- MVCC + ревизии — фоновая компакция для очистки старых версий.
- Attachments — внешний FileAttachmentStore для масштабирования.
- Skip в _all_docs — замена на bookmark/seek для больших коллекций.
- Write-heavy — инкрементальные вторичные индексы.
- Конфликты репликации — IReplicationService с детерминированной стратегией разрешения.
- Core: Document, IDocumentService.
- Storage: InMemoryDocumentService (in-memory CRUD, AllDocs, Changes).
- API: DbAndDocumentsController (эндпоинты для CRUD и просмотра изменений).
dotnet builddotnet run- API доступен по адресу:
http://localhost:5000/v1/db/{db}
- Дисковое и LSM-хранилище.
- Репликация и кластеризация.
- Индексация и поиск.


