Delete README.md
This commit is contained in:
parent
e0aca160d1
commit
c7af0a9d50
319
README.md
319
README.md
@ -1,319 +0,0 @@
|
|||||||
<!-- 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-Futriix.png" height=100></img>
|
|
||||||
</a>
|
|
||||||
|
|
||||||
<h3 align="center">Futriix</h3>
|
|
||||||
|
|
||||||
<p align="center">
|
|
||||||
<b>Проект Futriix это NOSQL субд без блокировок</b> <br>
|
|
||||||
<br />
|
|
||||||
<br />
|
|
||||||
<!-- <a href="">Сообщить об ошибке</a>
|
|
||||||
·
|
|
||||||
<!-- <a href="">Предложение новой функциональности</a> -->
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
## Краткая документация проекта Futriix
|
|
||||||
|
|
||||||
<!-- 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>
|
|
||||||
</ol>
|
|
||||||
<!-- </details> -->
|
|
||||||
|
|
||||||
<!-- ABOUT THE PROJECT -->
|
|
||||||
## О проекте
|
|
||||||
|
|
||||||
Futriix это NOSQL документ-ориентированная субд без блокировок написанная на языке программирования Rust.
|
|
||||||
Futriix является резидентной субд, т.е. хранящей свои данные в оперативной памяти, с их периодическим сохранением на внутренний носитель: HDD (жёсткий диск) или SSD-накопитель.
|
|
||||||
|
|
||||||
|
|
||||||
<!-- LICENSE -->
|
|
||||||
## Лицензия
|
|
||||||
|
|
||||||
Проект распространяется под 3-пунктной лицензией BSD. Подробнсти смотрите в файле `LICENSE.txt`.
|
|
||||||
|
|
||||||
## Основные термины
|
|
||||||
|
|
||||||
* **База Данных(БД)** -массив информация, хранящийся, например, на флешке, в файле, на кластере
|
|
||||||
* **Система Управления Базами Данных(СУБД)** - Это программа для внесения изменений в базу данных и поиска по ней
|
|
||||||
* **Резидентная СУБД** - субд, хранящая все свои данные в оперативной памяти, с периодическим сохранением на HDD или SSD
|
|
||||||
* **Инстанс** - запущенный экземляр базы данных
|
|
||||||
* **Узел (хост,нода)** - физический сервер
|
|
||||||
* **Таппл** - аналог документа в любой документно-ориентированной субд
|
|
||||||
* **Кластер** - группа компьютеров, объединённых высокоскоростными каналами связи и представляющая с точки зрения пользователя единый аппаратный ресурс
|
|
||||||
* Команды, выполняемые с привилегиями суперпользователя (root), отмечены символом приглашения **«#»**
|
|
||||||
* Команды, выполняемые с правами обычного пользователя(user), отмечены символом приглашения **«$»**
|
|
||||||
* **FutBot** - интеллектуальный помощник в мессенджере Телеграмм, помогающий осущесвлять быстрый поиск по документации проекта
|
|
||||||
|
|
||||||
|
|
||||||
## Подготовка
|
|
||||||
|
|
||||||
**Для операционных систем семейства Debian** выполните следующие шаги:
|
|
||||||
* Устанавливаем язык программирования Rust
|
|
||||||
|
|
||||||
```sh
|
|
||||||
# apt update
|
|
||||||
# apt upgrade
|
|
||||||
# curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
|
|
||||||
```
|
|
||||||
|
|
||||||
**Для операционных систем семейства Red Hat (Fedora, Aurora)** выполните следующие шаги:
|
|
||||||
* Устанавливаем язык программирования Rust
|
|
||||||
|
|
||||||
```sh
|
|
||||||
# dnf update
|
|
||||||
# curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
|
|
||||||
```
|
|
||||||
|
|
||||||
**Для операционной системы Alpine** выполните следующие шаги:
|
|
||||||
* Устанавливаем язык программирования Rust
|
|
||||||
|
|
||||||
```sh
|
|
||||||
# apk update
|
|
||||||
# curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Компиляция
|
|
||||||
|
|
||||||
1. Копируем репозиторий
|
|
||||||
```sh
|
|
||||||
$ git clone https://source.futriix.ru/gvsafronov/futriixw
|
|
||||||
```
|
|
||||||
2. Переходим в каталог с исходном кодом src
|
|
||||||
```sh
|
|
||||||
$ cd futriixw/
|
|
||||||
```
|
|
||||||
3. Компилируем Futriix с помощью утилиты Make
|
|
||||||
```sh
|
|
||||||
$ cargo build
|
|
||||||
```
|
|
||||||
|
|
||||||
> [!WARNING]
|
|
||||||
> **Futriix также может быть скомпилирован для следующих операционных систем: `Linux`, `OSX`, `Open Indiana`, `FreeBSD`, но сборка для этих операционных систем не проводилась!!!**
|
|
||||||
|
|
||||||
<!-- USAGE EXAMPLES -->
|
|
||||||
## Примеры основных команд
|
|
||||||
|
|
||||||
В данном разделе приведён пример основных команд субд Futriix
|
|
||||||
|
|
||||||
Запускаем клиент Futriix, перейдя в каталог с исходным кодом:
|
|
||||||
```sh
|
|
||||||
$ cd /target/realease && ./futriix-cli
|
|
||||||
```
|
|
||||||
|
|
||||||
Проверяем доступность сервера, выполняяя команду `insert`, если будет получен ответ `successful`-значит вставка данных работает корректно
|
|
||||||
|
|
||||||
```sh
|
|
||||||
futriix:~> insert user1 {"name": "Alice", "age": 25}
|
|
||||||
Insert successful
|
|
||||||
```
|
|
||||||
|
|
||||||
Считываем значение таппла `user1` командой ниже `get`:
|
|
||||||
```sh
|
|
||||||
futriix:~> get user1
|
|
||||||
{
|
|
||||||
"age": 25,
|
|
||||||
"name": "Alice"
|
|
||||||
}
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
Изменим значение переменных `name`, `age`, командой ниже:
|
|
||||||
```sh
|
|
||||||
futriix:~> update user5 '{"name": "Alice Smith", "age": 26}'
|
|
||||||
Update successful
|
|
||||||
|
|
||||||
```
|
|
||||||
Удалим весь таппл
|
|
||||||
```sh
|
|
||||||
futriix:~> delete user1
|
|
||||||
Delete successful
|
|
||||||
```
|
|
||||||
|
|
||||||
Посмотрим как работают транзакции (создание, откат, коммит)
|
|
||||||
```sh
|
|
||||||
futriix:~> begin
|
|
||||||
Transaction started
|
|
||||||
|
|
||||||
futriix:~> insert user3 {"name": "Charlie", "age": 40}
|
|
||||||
Insert successful
|
|
||||||
|
|
||||||
futriix:~> rollback
|
|
||||||
Transaction aborted
|
|
||||||
|
|
||||||
futriix:~> insert user3 {"name": "Peter", "age": 32}
|
|
||||||
|
|
||||||
futriix:~> commit
|
|
||||||
Transaction committed
|
|
||||||
```
|
|
||||||
Создадим индекс для поля `age` в таппле user3, а потом удалим его
|
|
||||||
```sh
|
|
||||||
futriix:~> createindex age
|
|
||||||
Index created on field 'age'
|
|
||||||
|
|
||||||
futriix:~> dropindex age
|
|
||||||
Index dropped
|
|
||||||
```
|
|
||||||
|
|
||||||
<p align="right">(<a href="#readme-top">К началу</a>)</p>
|
|
||||||
|
|
||||||
## Репликация
|
|
||||||
|
|
||||||
1. Откройте директорию с Futriix:
|
|
||||||
```sh
|
|
||||||
$ cd futriix
|
|
||||||
```
|
|
||||||
2. Откройте файл конфигурации futriix.conf в любом текстовом редакторе, например nano, как в примере приведённом ниже:
|
|
||||||
```sh
|
|
||||||
$ nano futriix/futriix.conf
|
|
||||||
```
|
|
||||||
3. Проверьте, установлены ли значения "yes" для параметров "active-replica" и "multi-master" в файле конфигурации `futriix.conf`
|
|
||||||
После чего добавьте в файл конфигурации ip-адреса, узлов вашего кластера.
|
|
||||||
Если вы всё сделали правильно у вас должны отобразится строки в файле конфигурации `futriix.conf` как показано ниже:
|
|
||||||
```sh
|
|
||||||
port 7000
|
|
||||||
cluster-enabled yes
|
|
||||||
cluster-config-file nodes.conf
|
|
||||||
cluster-node-timeout 5000
|
|
||||||
appendonly yes
|
|
||||||
|
|
||||||
```
|
|
||||||
4. Сохраните внесённые вами изменения, выйдите из редактора, воспользовавшись командами ниже:
|
|
||||||
```sh
|
|
||||||
$ ctrl+O
|
|
||||||
$ ctrl+x
|
|
||||||
```
|
|
||||||
5. Перейдите в директорию Futriix и запустите скрипт `cluster.sh` с параметрами `pick` (скрипт запущенный с данным параметром "соберёт кластер"), и `run`,(скрипт запущенный с данным параметром "запустит кластер") как указано ниже:
|
|
||||||
```sh
|
|
||||||
$ ./cluster pick
|
|
||||||
$ ./cluster run
|
|
||||||
```
|
|
||||||
6. Для остановки кластера запустите скрипт `cluster.sh` с параметром `stop`
|
|
||||||
```sh
|
|
||||||
$ ./cluster stop
|
|
||||||
```
|
|
||||||
<p align="right">(<a href="#readme-top">К началу</a>)</p>
|
|
||||||
|
|
||||||
## Резервное копирование
|
|
||||||
|
|
||||||
|
|
||||||
<p align="right">(<a href="#readme-top">К началу</a>)</p>
|
|
||||||
|
|
||||||
## Проблемы
|
|
||||||
|
|
||||||
В данном разделе описаны типовые проблемы, возникающие при эксплуатации субд Futrix.
|
|
||||||
|
|
||||||
1. **Описание проблемы:** При запуске инстанса futriix, появляется следующее сообщение:
|
|
||||||
```sh
|
|
||||||
Warning: no config file specified, using the default config. In order to specify a config file use ./futriix-server /path/to/futriix.conf
|
|
||||||
```
|
|
||||||
|
|
||||||
**Решение:**
|
|
||||||
|
|
||||||
При запуске инстанса сервера futriix, указать корректный путь до файла конфигурации, командой ниже:
|
|
||||||
```sh
|
|
||||||
$ ./futriix-server /path/to/futriix.conf
|
|
||||||
```
|
|
||||||
|
|
||||||
2. **Описание проблемы:** При запуске инстанса Futriix, появляется следующее сообщение:
|
|
||||||
```sh
|
|
||||||
1:12:S 18 Apr 2025 04:47:25.643 # NOTICE: Detuning locks due to high load per core: 97.49%
|
|
||||||
1:12:S 18 Apr 2025 04:47:55.491 # NOTICE: CPU pressure reduced
|
|
||||||
```
|
|
||||||
|
|
||||||
**Решение:**
|
|
||||||
|
|
||||||
Это штатная ситуация, и она не является ошибкой и не вызывает проблем. Суть этого сообщения в том, что futriix пытается корректно обработать ситуацию с превышением нагрузки на ЦП.
|
|
||||||
|
|
||||||
Futriix использует спинлоки для быстрой синхронизации. Когда нагрузка на ЦП превышает 100% на ядро, ядро может неосознанно предоставить время ЦП заблокированному потоку, который находится в состоянии ожидания, вместо активного потока. Это приводит к значительно большей задержке.
|
|
||||||
|
|
||||||
Когда такая ситуация обнаруживается, Futriix будет крутиться в ожидании меньшего времени, прежде чем приостановить поток. Это приводит к лучшей пропускной способности, когда время ЦП ограничено. Однако «правильным» решением является обеспечение того, чтобы время ЦП не было так ограничено.
|
|
||||||
|
|
||||||
<p align="right">(<a href="#readme-top">К началу</a>)</p>
|
|
||||||
|
|
||||||
<!-- ROADMAP -->
|
|
||||||
## Дорожная карта
|
|
||||||
|
|
||||||
- [x] Реализовать поддержку хранимых процедур
|
|
||||||
- [x] Реализовать поддержку многопоточности
|
|
||||||
- [x] Реализовать неблокирующие чтение/запись
|
|
||||||
- [x] Реализовать мульти-мастер репликацию через файл конфигурации
|
|
||||||
- [x] Реализовать логирование
|
|
||||||
- [x] Реализовать команды сервера для управления репликацией
|
|
||||||
- [x] Реализовать поддержку первичных индексов
|
|
||||||
- [x] Реализовать поддержку протокола MessagePack
|
|
||||||
- [x] Реализовать поддержку транзакций
|
|
||||||
- [x] Добавить механизм сторонних модулей на языке lua, расширяющих базовый функционал сервера
|
|
||||||
- [x] Добавить макет интеллектуального помощника FutBot
|
|
||||||
- [x] Реализовать проверку запуска сервера при запуске клиента (если сервер НЕ запущен клиент не запускается)
|
|
||||||
- [ ] Реализовать поддержку HTTP-restfull API
|
|
||||||
- [ ] Реализовать утилиту тестирования сервера на количество запросов на чтение/запись
|
|
||||||
- [ ] Реализовать поддержку алгоритма Raft
|
|
||||||
- [ ] Реализовать поддержку SQL
|
|
||||||
- [ ] Реализовать поддержку вторичных индексов
|
|
||||||
- [ ] Реализовать поддержку ACID-транзакций
|
|
||||||
- [ ] Реализовать полноценного интеллектуального помощника FutBot, задачами которого будут быстрый поиск ответов на вопросы, возникающие при эксплуатации субд Futrix.
|
|
||||||
|
|
||||||
См. [Открытые проблемы](https://source.futriix.ru/gvsafronov/futriixw/issues) полный список предлагаемых функций (и известных проблем).
|
|
||||||
|
|
||||||
<p align="right">(<a href="#readme-top">К началу</a>)</p>
|
|
||||||
|
|
||||||
<!-- CONTRIBUTING -->
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!-- CONTRIBUTING -->
|
|
||||||
## Вклад
|
|
||||||
|
|
||||||
Вклады — это то, что делает сообщество открытого исходного кода таким замечательным местом для обучения, вдохновения и творчества. Любой ваш вклад **очень ценится**.
|
|
||||||
|
|
||||||
Если у вас есть предложение, которое могло бы улучшить ситуацию, создайте форк репозитория и создайте запрос на включение. Также можно просто открыть задачу с тегом «улучшение».
|
|
||||||
|
|
||||||
|
|
||||||
1. Форкните проект
|
|
||||||
2. Создайте свою ветку функций (`git checkout -b Feature/AmazingFeature`)
|
|
||||||
3. Зафиксируйте свои изменения (git commit -m 'Add some AmazingFeature'`)
|
|
||||||
4. Отправьте в ветку (`git push main Feature/AmazingFeature`)
|
|
||||||
5. Откройте запрос на включение
|
|
||||||
|
|
||||||
<!-- CONTACT -->
|
|
||||||
## Контакты
|
|
||||||
|
|
||||||
Григорий Сафронов - [E-mail](gvsafronov@yandex.ru)
|
|
||||||
|
|
||||||
Ссылка на Интеллектуальный помощник - [FutBot](https://t.me/Futriix_bot)
|
|
||||||
|
|
||||||
<p align="right">(<a href="#readme-top">К началу</a>)</p>
|
|
Loading…
x
Reference in New Issue
Block a user