first commit
This commit is contained in:
246
README.md
Normal file
246
README.md
Normal file
@@ -0,0 +1,246 @@
|
||||
<!-- 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>
|
||||
|
||||
Reference in New Issue
Block a user