247 lines
17 KiB
Markdown
247 lines
17 KiB
Markdown
|
|
<!-- Improved compatibility of К началу link: See: https://github.com/othneildrew/Best-README-Template/pull/73 -->
|
|||
|
|
<a id="readme-top"></a>
|
|||
|
|
<!--
|
|||
|
|
*** Thanks for checking out the Best-README-Template. If you have a suggestion
|
|||
|
|
*** that would make this better, please fork the repo and create a pull request
|
|||
|
|
*** or simply open an issue with the tag "enhancement".
|
|||
|
|
*** Don't forget to give the project a star!
|
|||
|
|
*** Thanks again! Now go create something AMAZING! :D
|
|||
|
|
-->
|
|||
|
|
|
|||
|
|
<!-- PROJECT LOGO -->
|
|||
|
|
<br />
|
|||
|
|
<div align="center">
|
|||
|
|
<!-- <a href="https://github.com/othneildrew/Best-README-Template"> -->
|
|||
|
|
<img src="Logo.png" height=100 alt="Logo.png"></img>
|
|||
|
|
</a>
|
|||
|
|
|
|||
|
|
<p align="center">
|
|||
|
|
<h3> <b>Futriis-это легковесная, распределённая wait-free и lock-free дружественная in-memory СУБД,
|
|||
|
|
реализованная на Go с поддержкой плагинов на языке lua для операционных систем на базе Solaris (ядра Illumos)</b> <br></h3>
|
|||
|
|
<br />
|
|||
|
|
<br />
|
|||
|
|
<!-- <a href="">Сообщить об ошибке</a>
|
|||
|
|
·
|
|||
|
|
<!-- <a href="">Предложение новой функциональности</a> -->
|
|||
|
|
</p>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
## Краткая документация проекта FutriiS
|
|||
|
|
|
|||
|
|
<!-- TABLE OF CONTENTS -->
|
|||
|
|
<br>
|
|||
|
|
<!-- <details> -->
|
|||
|
|
<summary><b>Содержание</b></summary></br>
|
|||
|
|
<ol>
|
|||
|
|
<li>
|
|||
|
|
<a href="#о-проекте">О проекте</a>
|
|||
|
|
<li><a href="#лицензия">Лицензия</a></li>
|
|||
|
|
<li><a href="#глоссарий">Глоссарий</a></li>
|
|||
|
|
<li><a href="#типы-данных-субд">Типы данных субд</a></li>
|
|||
|
|
<li><a href="#системные-требования">Системные требования</a></li>
|
|||
|
|
<li><a href="#подготовка-и-компиляция">Подготовка и компиляция</a></li>
|
|||
|
|
<li><a href="#тестирование">Тестирование</a></li>
|
|||
|
|
<li><a href="#примеры-команд-субд">Примеры команд субд</a></li>
|
|||
|
|
<li><a href="#индексы">Индексы</a></li>
|
|||
|
|
<li><a href="#транзакции">Транзакции</a></li>
|
|||
|
|
<li><a href="#кластеризация-и-шардинг">Кластеризация и шардинг</a></li>
|
|||
|
|
<li><a href="#сжатие-данных">Сжатие данных</a></li>
|
|||
|
|
<li><a href="#import-export">Import-Export</a></li>
|
|||
|
|
<li><a href="#lua-плагины">Lua-плагины</a></li>
|
|||
|
|
<li><a href="acl">ACL</a></li>
|
|||
|
|
<li><a href="#http-api">HTTP API</a></li>
|
|||
|
|
<li><a href="#сферы-применения">Сферы применения</a></li>
|
|||
|
|
<li><a href="#дорожная-карта">Дорожная карта</a></li>
|
|||
|
|
<li><a href="#контакты">Контакты</a></li>
|
|||
|
|
</ol>
|
|||
|
|
<!-- </details> -->
|
|||
|
|
|
|||
|
|
|
|||
|
|
## О проекте
|
|||
|
|
|
|||
|
|
futriis - это легковесная, распределённая wait-free и lock-free дружественная in-memory СУБД, реализованная на Go с поддержкой плагинов на языке lua использующая алгоритм консенсуса Raft.
|
|||
|
|
Данная субд была разработана, в первую очередь для эксплуатации на операционных системах на базе Solaris: OpenIndiana, Oracle Solaris.
|
|||
|
|
|
|||
|
|
|
|||
|
|
<p align="right">(<a href="#readme-top">К началу</a>)</p>
|
|||
|
|
|
|||
|
|
## Лицензия
|
|||
|
|
|
|||
|
|
Проект распространяется под лицензией **`CDDL 1.0`**. Подробнсти в файлах `LICENSE` и `NOTICE`.
|
|||
|
|
Эта лицензия позволяет вам производить копирование, модификацию, распространение, включение в другие проекты, получение патентных прав, распространение бинарных файлов с доступом к их исходному коду. Она запрещает вам добавление новых ограничений, скрытие изменений, удаление оригинальных уведомлений, несоблюдение условий CDDL 1.0 при перераспределении, неправильное связывание с другими лицензиями.
|
|||
|
|
|
|||
|
|
Все дополнительное программное обеспечение (включая скрипт компиляции проекта `build.sh`) предоставляются "как есть", без гарантий и обязательств со стороны разработчиков. Разработчики не несут ответственности за прямой или косвенный ущерб, вызванный использованием открытого кода Futriix и futriix или технических решений, использующих этот код.
|
|||
|
|
|
|||
|
|
<p align="right">(<a href="#readme-top">К началу</a>)</p>
|
|||
|
|
|
|||
|
|
## Глоссарий
|
|||
|
|
|
|||
|
|
* **База Данных(БД)** - это структурированное, организованное хранилище данных, которое позволяет удобно собирать, хранить, управлять и извлекать информацию.
|
|||
|
|
* **Система Управления Базами Данных(СУБД)** - это программное обеспечение, которое позволяет создавать, управлять и взаимодействовать с базами данных
|
|||
|
|
* **Таппл (Tapple)** - аналог базы данных в РСУБД
|
|||
|
|
* **Слайс (Slice)** - аналог таблицы
|
|||
|
|
* **Кортеж (Tuple)** - аналог записи в таблице
|
|||
|
|
* **Мультимодельная СУБД** - это СУБД, которая объединяет в себе поддержку нескольких моделей данных (реляционной, документной, графовой, ключ-значение и др.) в рамках единого интегрированного ядра.
|
|||
|
|
* **Резидентная СУБД** - это СУБД, которая работает непрерывно в оперативной памяти (RAM).
|
|||
|
|
* **Инстанс** - это запущенный экземляр базы данных.
|
|||
|
|
* **Узел (хост,нода,шард)** - это отдельный сервер (физический или виртуальный), который является частью кластера или распределенной системы и выполняет часть общей работы.
|
|||
|
|
* **Слайс (от англ. "slice"-слой)** - это логический и физически изолированный фрагмент коллекции документов, полученный в результате горизонтального партиционирования (шардирования) и размещенный на определенном узле кластера с целью масштабирования производительности и объема данных.
|
|||
|
|
* **Репликасет** - это группа серверов СУБД, объединенных в отказоустойчивую конфигурацию, где один узел выполняет роль первичного (принимающего операции записи), а один или несколько других - роль вторичных (синхронизирующих свои данные с первичным и обслуживающих чтение), с автоматическим переизбранием первичного узла в случае его сбоя.
|
|||
|
|
* **Временные ряды (time series)** - это это упорядоченная во времени последовательность данных, собранная в регулярные промежутки времени из какого-либо источниика (цены на акции, данные температуры, объёмы продаж и.т.д.).
|
|||
|
|
* **OLTP (Online Transactional Processing-Онлайн обработка транзакций)**- это технология обработки транзакций в режиме реального времени. Её основная задача заключается в обеспечении быстрого и надёжного выполнения операций, которые происходят ежесекундно в бизнесе. Они обеспечивают быстрое выполнение операций вставки, обновления и удаления данных, поддерживая целостность и надежность транзакций.
|
|||
|
|
* **OLAP (Online Analytical Processing - Оперативная аналитическая обработка)** — это технология, которая работает с историческими массивами информации, извлекая из них закономерности и производя анализ больших объемов данных, поддерживает многоразмерные запросы и сложные аналитические операции. Данная технология оптимизирована для выполнения сложных запросов и предоставления сводной информации для принятия управленческих решений.
|
|||
|
|
* **HTAP (Hybrid Transactional and Analytical Processing - Гибридная транзакционно-аналитическая обработка)**- это технология, которая заключаются в эффективном совмещении операционных и аналитических запросов, т.е. классов OLTP и OLAP.
|
|||
|
|
* **Кластер** - это группа компьютеров, объединённых высокоскоростными каналами связи для решения сложных вычислительных задач и представляющая с точки зрения пользователя группу серверов, объединенных для работы как единая система.
|
|||
|
|
* **WUI (от англ. Web-User-Interface "веб интерфейс пользователя")** - это термин проекта futriix, означающий веб-интерфейс (интерфейс работающий в веб-браузере)
|
|||
|
|
* **Сервер-приложений (англ. application-server)** - это программное обеспечение, которое обеспечивает выполнение бизнес-логики и обработку запросов от клиентов (например, веб-браузеров или мобильных приложений). Он служит платформой для развертывания и управления приложениями, имея встроенные интепретаторы и/или компиляторы популярных языков программирования (php,go,python), что обеспечивает взаимодействие между пользователями, базами данных и другими системами.
|
|||
|
|
* **workflow (англ. workflow — «поток работы»)** — это принцип организации рабочих процессов, в соответствии с которым повторяющиеся задачи представлены как последовательность стандартных шагов.
|
|||
|
|
* **wait-free (дословно с англ. wait-free — «свободный от ожидания»)**-класс неблокирующих алгоритмов, в которых каждая операция должна завершаться за конечное число шагов независимо от активности других потоков.
|
|||
|
|
* **CA (англ. Certificate Authority - Центры Сертификации)** - это организации, которые выдают доверенные криптографические сертификаты.
|
|||
|
|
* Команды, выполняемые с привилегиями суперпользователя (root), отмечены символом приглашения **«#»**
|
|||
|
|
* Команды, выполняемые с правами обычного пользователя(user), отмечены символом приглашения **«$»**
|
|||
|
|
|
|||
|
|
<p align="right">(<a href="#readme-top">К началу</a>)</p>
|
|||
|
|
|
|||
|
|
|
|||
|
|
## Системные требования
|
|||
|
|
|
|||
|
|
> [!WARNING]
|
|||
|
|
> - Процессор: Intel или AMD
|
|||
|
|
> - Оперативная память: 4ГБ (Для Linux) 8ГБ (Для Illumos sytems)
|
|||
|
|
> - Только Unix-подобная ОС (Solaris, OpenIndiana, Linux)
|
|||
|
|
> - Go 1.25.6 или выше
|
|||
|
|
|
|||
|
|
> [!CAUTION]
|
|||
|
|
> **Важно: Windows и MacOS X не поддерживаются!**
|
|||
|
|
|
|||
|
|
<p align="right">(<a href="#readme-top">К началу</a>)</p>
|
|||
|
|
|
|||
|
|
|
|||
|
|
## Подготовка и компиляция
|
|||
|
|
|
|||
|
|
1. Клонируйте репозиторий:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
$ git clone https://github.com/futriis/db.git
|
|||
|
|
$ cd futriis
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. Скомпилируйте и запустите:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Стандартная сборка для ОС на базе Linux
|
|||
|
|
$ ./build.sh
|
|||
|
|
|
|||
|
|
# Сборка для операционных систем на базе Illumos
|
|||
|
|
$ cd scripts/
|
|||
|
|
$ ./build_illumos.sh
|
|||
|
|
|
|||
|
|
# Показать справку
|
|||
|
|
$./build.sh --help
|
|||
|
|
|
|||
|
|
$ ./futriis
|
|||
|
|
```
|
|||
|
|
<p align="right">(<a href="#readme-top">К началу</a>)</p>
|
|||
|
|
|
|||
|
|
|
|||
|
|
### Тестирование
|
|||
|
|
|
|||
|
|
На данный момент для субд реализовано пять тестов (регрессионный, smoke-тест, функциональный, интеграционный, нагрузочный) на языке lua, покрывающий функционал acl, индексов, constraint'ов, RestFull HTTP API, ACL
|
|||
|
|
|
|||
|
|
> [!IMPORTANT]
|
|||
|
|
> 1. Перед запуском тестов убедитесь, что СУБД запущена и HTTP API доступен на порту 8080
|
|||
|
|
> 2. Load test может занять несколько минут при больших объёмах данных
|
|||
|
|
> 3. Для параллельного тестирования в нагрузочном тесте рекомендуется использовать lua-lanes или запускать несколько процессов
|
|||
|
|
> 4. Все тесты используют аутентификацию и проверяют как позитивные, так и негативные сценарии
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Установка LuaSocket и JSON библиотек
|
|||
|
|
luarocks install luasocket
|
|||
|
|
luarocks install lua-cjson
|
|||
|
|
|
|||
|
|
# Запуск отдельных тестов
|
|||
|
|
lua regression_test.lua
|
|||
|
|
lua smoke_test.lua
|
|||
|
|
lua functional_test.lua
|
|||
|
|
lua integration_test.lua
|
|||
|
|
lua load_test.lua
|
|||
|
|
|
|||
|
|
# Или все тесты последовательно
|
|||
|
|
for test in regression smoke functional integration load; do
|
|||
|
|
echo "Running ${test}_test.lua..."
|
|||
|
|
lua ${test}_test.lua
|
|||
|
|
echo "---"
|
|||
|
|
done
|
|||
|
|
```
|
|||
|
|
<p align="right">(<a href="#readme-top">К началу</a>)</p>
|
|||
|
|
|
|||
|
|
### Примеры команд субд
|
|||
|
|
|
|||
|
|
|
|||
|
|
<p align="right">(<a href="#readme-top">К началу</a>)</p>
|
|||
|
|
|
|||
|
|
#### Обновление и удаление
|
|||
|
|
|
|||
|
|
|
|||
|
|
<p align="right">(<a href="#readme-top">К началу</a>)</p>
|
|||
|
|
|
|||
|
|
## Индексы
|
|||
|
|
|
|||
|
|
|
|||
|
|
<p align="right">(<a href="#readme-top">К началу</a>)</p>
|
|||
|
|
|
|||
|
|
## Транзакции
|
|||
|
|
|
|||
|
|
|
|||
|
|
<p align="right">(<a href="#readme-top">К началу</a>)</p>
|
|||
|
|
|
|||
|
|
|
|||
|
|
## Кластеризация и шардинг
|
|||
|
|
|
|||
|
|
|
|||
|
|
<p align="right">(<a href="#readme-top">К началу</a>)</p>
|
|||
|
|
|
|||
|
|
## Сжатие данных
|
|||
|
|
|
|||
|
|
|
|||
|
|
<p align="right">(<a href="#readme-top">К началу</a>)</p>
|
|||
|
|
|
|||
|
|
## Import-Export
|
|||
|
|
|
|||
|
|
|
|||
|
|
<p align="right">(<a href="#readme-top">К началу</a>)</p>
|
|||
|
|
|
|||
|
|
## Lua-плагины
|
|||
|
|
|
|||
|
|
|
|||
|
|
<p align="right">(<a href="#readme-top">К началу</a>)</p>
|
|||
|
|
|
|||
|
|
## ACL
|
|||
|
|
|
|||
|
|
|
|||
|
|
## HTTP API
|
|||
|
|
|
|||
|
|
|
|||
|
|
<p align="right">(<a href="#readme-top">К началу</a>)</p>
|
|||
|
|
|
|||
|
|
|
|||
|
|
## Пример рабочей сессии со всем реализованным функционалом
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
## Дорожная карта
|
|||
|
|
|
|||
|
|
- [x] Реализовать
|
|||
|
|
- [ ] Реализовать
|
|||
|
|
|
|||
|
|
<p align="right">(<a href="#readme-top">К началу</a>)</p>
|
|||
|
|
|
|||
|
|
## Контакты
|
|||
|
|
|
|||
|
|
Григорий Сафронов - [E-mail](gvsafronov@yandex.ru)
|
|||
|
|
|
|||
|
|
<p align="right">(<a href="#readme-top">К началу</a>)</p>
|
|||
|
|
|