From c7af0a9d5069a94e00497b93ce1b81b132fef8ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=93=D1=80=D0=B8=D0=B3=D0=BE=D1=80=D0=B8=D0=B9=20=D0=A1?= =?UTF-8?q?=D0=B0=D1=84=D1=80=D0=BE=D0=BD=D0=BE=D0=B2?= Date: Mon, 21 Jul 2025 17:53:08 +0000 Subject: [PATCH] Delete README.md --- README.md | 319 ------------------------------------------------------ 1 file changed, 319 deletions(-) delete mode 100644 README.md diff --git a/README.md b/README.md deleted file mode 100644 index 601e7f9..0000000 --- a/README.md +++ /dev/null @@ -1,319 +0,0 @@ - - - - - - -
-
- - - - -

Futriix

- -

- Проект Futriix это NOSQL субд без блокировок
-
-
- -

-
- - ## Краткая документация проекта Futriix - - -
- - Содержание
-
    -
  1. - О проекте -
  2. Лицензия
  3. -
  4. Основные термины
  5. -
  6. Подготовка
  7. -
  8. Компиляция
  9. -
  10. Примеры основных команд
  11. -
  12. Репликация
  13. -
  14. Резервное копирование
  15. -
  16. Проблемы
  17. -
  18. Дорожная карта
  19. -
  20. Вклад
  21. -
  22. Контакты
  23. -
- - - -## О проекте - -Futriix это NOSQL документ-ориентированная субд без блокировок написанная на языке программирования Rust. -Futriix является резидентной субд, т.е. хранящей свои данные в оперативной памяти, с их периодическим сохранением на внутренний носитель: HDD (жёсткий диск) или SSD-накопитель. - - - -## Лицензия - -Проект распространяется под 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`, но сборка для этих операционных систем не проводилась!!!** - - -## Примеры основных команд - -В данном разделе приведён пример основных команд субд 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 - ``` - -

(К началу)

- -## Репликация - -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 - ``` -

(К началу)

- -## Резервное копирование - - -

(К началу)

- -## Проблемы - -В данном разделе описаны типовые проблемы, возникающие при эксплуатации субд 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 будет крутиться в ожидании меньшего времени, прежде чем приостановить поток. Это приводит к лучшей пропускной способности, когда время ЦП ограничено. Однако «правильным» решением является обеспечение того, чтобы время ЦП не было так ограничено. - -

(К началу)

- - -## Дорожная карта - -- [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) полный список предлагаемых функций (и известных проблем). - -

(К началу)

- - - - - - -## Вклад - -Вклады — это то, что делает сообщество открытого исходного кода таким замечательным местом для обучения, вдохновения и творчества. Любой ваш вклад **очень ценится**. - -Если у вас есть предложение, которое могло бы улучшить ситуацию, создайте форк репозитория и создайте запрос на включение. Также можно просто открыть задачу с тегом «улучшение». - - -1. Форкните проект -2. Создайте свою ветку функций (`git checkout -b Feature/AmazingFeature`) -3. Зафиксируйте свои изменения (git commit -m 'Add some AmazingFeature'`) -4. Отправьте в ветку (`git push main Feature/AmazingFeature`) -5. Откройте запрос на включение - - -## Контакты - -Григорий Сафронов - [E-mail](gvsafronov@yandex.ru) - -Ссылка на Интеллектуальный помощник - [FutBot](https://t.me/Futriix_bot) - -

(К началу)