NexusDB - Полное руководство пользователя
Что такое NexusDB?
Заголовок раздела «Что такое NexusDB?»NexusDB — это многомодельная СУБД, предназначенная для одновременной работы с различными типами данных:
- SQL Таблицы — реляционные данные c полной поддержкой ACID и транзакций
- JSON Документы — гибкие структурированные данные с поддержкой вложенности
- Графы — знаниевые базы и семантические структуры со связями между сущностями
- Векторы — embeddings и ML-модели для семантического поиска
Всё это в одной СУБД с единой архитектурой хранения, без необходимости синхронизировать несколько отдельных систем.
Ключевые особенности
Заголовок раздела «Ключевые особенности»🔒 ACID транзакции
Заголовок раздела «🔒 ACID транзакции»- Полная поддержка ACID свойств
- Multi-Version Concurrency Control (MVCC) без блокировок
- 4 уровня изоляции: READ UNCOMMITTED → READ COMMITTED → REPEATABLE READ → SERIALIZABLE
- Write-Ahead Logging (WAL) для гарантии durability
⚡ Производительность
Заголовок раздела «⚡ Производительность»- Оптимизированные индексы (B-Tree, Hash, Bloom Filter)
- LRU кеширование с умным управлением памятью
- Полнотекстовый поиск (Full-Text Search)
- Query result caching
🔄 Высокая доступность
Заголовок раздела «🔄 Высокая доступность»- Raft консенсус для репликации
- Automatic failover
- Geo-distributed replication
- Load balancing
📊 Продвинутые SQL возможности
Заголовок раздела «📊 Продвинутые SQL возможности»- Window Functions (ROW_NUMBER, RANK, LAG, LEAD, и т.д.)
- Common Table Expressions (CTEs) с рекурсией
- Сложные JOINы
- Aggregate functions
- Подзапросы
Установка и развёртывание
Заголовок раздела «Установка и развёртывание»🐳 Docker (рекомендуется)
Заголовок раздела «🐳 Docker (рекомендуется)»# Скачивание образаdocker pull localzet/nexus:latest
# Запуск контейнераdocker run -d \ --name nexus-db \ -p 8080:8080 \ -p 5433:5433 \ -v nexus-data:/data \ -e NEXUS_PORT=5433 \ -e HTTP_PORT=8080 \ localzet/nexus:latest
# Проверка статусаdocker logs nexus-db📦 Linux (.deb пакет)
Заголовок раздела «📦 Linux (.deb пакет)»# Загрузить пакетwget https://github.com/localzet/nexus/releases/download/v1.0.0/nexus_1.0.0_amd64.deb
# Установитьsudo dpkg -i nexus_1.0.0_amd64.deb
# Запуститьsudo systemctl start nexussudo systemctl enable nexus # Автозапуск при перезагрузке
# Проверить статусsudo systemctl status nexus🔨 Компиляция из исходников
Заголовок раздела «🔨 Компиляция из исходников»git clone https://github.com/localzet/nexus.gitcd nexuscargo build --release./target/release/nexusПервое подключение
Заголовок раздела «Первое подключение»TCP Protocol (порт 5433)
Заголовок раздела «TCP Protocol (порт 5433)»# Подключениеpsql -h localhost -p 5433 -U nexus
# Для проверки доступности:nelstat -an | grep 5433 # Linuxnetstat -ano | findstr :5433 # WindowsREST API (порт 8080)
Заголовок раздела «REST API (порт 8080)»# Проверка здоровья сервераcurl http://localhost:8080/health
# Получить метрикиcurl http://localhost:8080/metricsРабота с данными
Заголовок раздела «Работа с данными»SQL Таблицы
Заголовок раздела «SQL Таблицы»-- Создание таблицыCREATE TABLE users ( id INTEGER PRIMARY KEY, name STRING NOT NULL, email STRING UNIQUE, age INTEGER, created_at TIMESTAMP);
-- Вставка данныхINSERT INTO users VALUES (1, 'Alice', 'alice@example.com', 30, NOW()), (2, 'Bob', 'bob@example.com', 25, NOW());
-- Простой запросSELECT * FROM users WHERE age > 25;
-- AgregationSELECT age, COUNT(*) as count FROM users GROUP BY age;
-- Window FunctionsSELECT name, age, ROW_NUMBER() OVER (ORDER BY age DESC) as rankFROM users;JSON Документы (REST API)
Заголовок раздела «JSON Документы (REST API)»# Создание коллекцииcurl -X POST http://localhost:8080/collections \ -H "Content-Type: application/json" \ -d '{"name": "posts"}'
# Добавление документаcurl -X POST http://localhost:8080/collections/posts \ -H "Content-Type: application/json" \ -d '{ "title": "NexusDB Guide", "author": "Alice", "tags": ["database", "sql"], "metadata": { "version": 1, "draft": false } }'
# Поиск по полямcurl 'http://localhost:8080/collections/posts/search?author=Alice'
# Полнотекстовый поискcurl 'http://localhost:8080/collections/posts/search?fulltext=NexusDB'Графы (REST API)
Заголовок раздела «Графы (REST API)»# Создание графаcurl -X POST http://localhost:8080/graphs \ -H "Content-Type: application/json" \ -d '{"name": "social_network"}'
# Добавление узлаcurl -X POST http://localhost:8080/graphs/social_network/nodes \ -H "Content-Type: application/json" \ -d '{ "id": "user_1", "label": "Person", "properties": { "name": "Alice", "age": 30 } }'
# Добавление связиcurl -X POST http://localhost:8080/graphs/social_network/edges \ -H "Content-Type: application/json" \ -d '{ "from": "user_1", "to": "user_2", "label": "KNOWS", "properties": {"since": 2020} }'
# Поиск связей (graph traversal)curl 'http://localhost:8080/graphs/social_network/path?from=user_1&to=user_3'Векторные данные (ML embeddings, REST API)
Заголовок раздела «Векторные данные (ML embeddings, REST API)»# Создание коллекции векторовcurl -X POST http://localhost:8080/vectors \ -H "Content-Type: application/json" \ -d '{"name": "embeddings", "dimension": 300}'
# Добавление вектора (например, из модели)curl -X POST http://localhost:8080/vectors/embeddings \ -H "Content-Type: application/json" \ -d '{ "word": "computer", "vector": [0.9, 0.1, 0.0, 0.2, ...], "metadata": {"language": "en"} }'
# Поиск похожих векторов (k-nearest neighbors)curl -X POST http://localhost:8080/vectors/embeddings/knn \ -H "Content-Type: application/json" \ -d '{ "query_vector": [0.85, 0.15, 0.05, ...], "k": 5, "threshold": 0.7 }'Транзакции
Заголовок раздела «Транзакции»-- Начало транзакцииBEGIN TRANSACTION;
-- Набор операцийINSERT INTO accounts VALUES (1, 'Alice', 1000);INSERT INTO transactions VALUES (1, 1, 'deposit', 100);UPDATE accounts SET balance = balance + 100 WHERE id = 1;
-- Либо успешно завершитьCOMMIT;
-- Либо откатить всёROLLBACK;Версионирование и временные ряды
Заголовок раздела «Версионирование и временные ряды»# При вставке документов можно указать версиюcurl -X POST http://localhost:8080/collections/posts \ -H "Content-Type: application/json" \ -d '{ "content": "Updated article", "_version": 2, "_timestamp": "2026-03-31T12:00:00Z" }'
# Возврат к конкретной версииGET /collections/posts/{id}?version=1Мониторинг и доступ к логам
Заголовок раздела «Мониторинг и доступ к логам»# Здоровье сервераcurl http://localhost:8080/health
# Метрики (Prometheus format)curl http://localhost:8080/metrics
# Slow query logcurl http://localhost:8080/logs/slow-queries
# Query execution plancurl -X POST http://localhost:8080/query/explain \ -H "Content-Type: application/json" \ -d '{"sql": "SELECT * FROM users WHERE age > 25"}'Конфигурация
Заголовок раздела «Конфигурация»Создайте файл nexus.toml в папке конфигурации:
[server]# Адрес прослушиванияhost = "0.0.0.0"
# TCP порт (NOT 5432, как в PostgreSQL!)tcp_port = 5433
# REST API портrest_port = 8080
[database]# Папка для хранения данныхdata_dir = "/var/lib/nexus"
# Размер буфера в MBcache_size_mb = 2048
# Максимальное количество соединенийmax_connections = 1000
[replication]# Включить Raft репликациюenable_raft = true
# Узлы кластераcluster_nodes = [ "node1.example.com:6379", "node2.example.com:6379", "node3.example.com:6379"]
[performance]# Кеширование результатов запросовenable_query_cache = truequery_cache_mb = 512
# Полнотекстовый поискenable_fulltext_index = true
[security]# Аутентификацияauth_enabled = truedefault_user = "nexus"default_password = "change-me"Команды в CLI
Заголовок раздела «Команды в CLI»# Подключение через psqlpsql -h localhost -p 5433 -U nexus
nexus=> \dt # Список таблицnexus=> \di # Список индексовnexus=> \dc # Список коллекцийnexus=> \dg # Список графовnexus=> \dv # Список векторовnexus=> HELP; # СправкаТипичные сценарии использования
Заголовок раздела «Типичные сценарии использования»Сценарий 1: E-commerce платформа
Заголовок раздела «Сценарий 1: E-commerce платформа»-- Таблицы для продуктовCREATE TABLE products (id, name, description, price);
-- JSON для детального описанияcurl -X POST /collections/product_specs -d '{...}'
-- Граф для категорий и связейcurl -X POST /graphs/category_tree -d '{...}'
-- Векторы для поиска по описаниюcurl -X POST /vectors/product_embeddings -d '{...}'Сценарий 2: Социальная сеть
Заголовок раздела «Сценарий 2: Социальная сеть»# Таблицы для пользователей и постовSQL: CREATE TABLE users, posts
# Граф для фолловеров и подписокcurl -X POST /graphs/social_network
# JSON для профилей и подробных данныхcurl -X POST /collections/user_profilesСценарий 3: AI/ML приложение
Заголовок раздела «Сценарий 3: AI/ML приложение»# Метаданные в таблицахSQL: CREATE TABLE models, datasets, experiments
# Векторы для embeddings моделейcurl -X POST /vectors/model_embeddings
# Граф вычислительного графа (DAG)curl -X POST /graphs/computation_graph
# JSON для конфигурацийcurl -X POST /collections/model_configsПроизводительность и тунинг
Заголовок раздела «Производительность и тунинг»# Индексация для SQL таблицCREATE INDEX idx_users_email ON users(email);
# Анализ плана запросаEXPLAIN SELECT * FROM users WHERE email = 'alice@example.com';
# Сбор статистикиANALYZE TABLE users;Лицензия
Заголовок раздела «Лицензия»GNU Affero General Public License v3.0
См. LICENSE
Её участь в экосистеме
Заголовок раздела «Её участь в экосистеме»NexusDB НЕ заменяет:
- PostgreSQL для чисто реляционных задач
- MongoDB для чистых документов
- Neo4j для графов
- Milvus для векторов
NexusDB решает задачу “когда вам нужны ВСЕ типы данных вместе” и вы хотите одну архитектуру, а не stack из 4 СУБД с синхронизацией между ними.
Дальнейшая помощь
Заголовок раздела «Дальнейшая помощь»- Архитектура — Как устроена NexusDB
- GitHub Issues: https://github.com/localzet/nexus/issues
- GitHub Discussions: https://github.com/localzet/nexus/discussions