400 lines
14 KiB
Markdown
400 lines
14 KiB
Markdown
<!-- Improved compatibility of К началу link: See: https://github.com/othneildrew/Best-README-Template/pull/73 -->
|
||
<a id="readme-top"></a>
|
||
<!--
|
||
|
||
<!-- 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 fbx</h3>
|
||
|
||
|
||
## Краткая документация модуля Futriix fdx
|
||
|
||
</div>
|
||
<!-- TABLE OF CONTENTS -->
|
||
<br>
|
||
<details>
|
||
<summary><b>Содержание</b></summary>
|
||
<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="#csv">CSV</a></li>
|
||
<li><a href="#лицензия">Лицензия</a></li>
|
||
|
||
</ol>
|
||
</details>
|
||
|
||
|
||
<!-- ABOUT THE PROJECT -->
|
||
## О модуле
|
||
|
||
Модуль "fbx" позволяет предоставить простой DML (Data Manipulation Language, подмножество языка SQL для манипулирования данными - это подъязык, отвечающий за добавление, редактирование или удаление данных из базы данных. В SQL этому языку соответствуют операторы INSERT, UPDATE, и DELETE ) и DQL (Data Query Language )- это подъязык, отвечающий за чтение или запрос данных из базы данных. В SQL этому языку соответствует оператор SELECT) для манипулирования хэшами в Futriix для пользователей SQL. Он преобразует входной оператор на языке SQL в набор чистых команд Futriix'а. Он не нуждается и не генерирует никаких промежуточных данных, которые занимали бы базы данных. Целевыми данными являются только ваши хэши. Он также предоставляет функцию импорта и экспорта данных из других субд в формате "CSV".
|
||
|
||
## Использование
|
||
```sql
|
||
$ futriix-cli
|
||
futriix:~> hmset phonebook:0001 name "Ivan Ivanov" tel "812-692-12-34" birth "1982-10-01" pos 3 gender "M"
|
||
futriix:~> hmset phonebook:0002 name "Anna Kaverina" tel "812-444-99-11" birth "1009-12-01" pos 1 gender "F"
|
||
futriix:~> hmset phonebook:0003 name "Bella Karetnikova" tel "812-682-24-41" birth "2004-01-31" pos 2 gender "F"
|
||
futriix:~> hmset phonebook:0004 name "Maxim Levitsky tel "812-669-09-92" birth "2017-06-30" pos 4 gender "M"
|
||
futriix:~> dbx select name,tel from phonebook where gender = "F" order by pos desc
|
||
1) 1) name
|
||
2) "Ivan Ivanov"
|
||
3) tel
|
||
4) "812-692-12-34"
|
||
2) 1) name
|
||
2) "Anna Kaverina"
|
||
3) tel
|
||
4) "812-444-99-11"
|
||
```
|
||
|
||
## Начало
|
||
|
||
### Скачиваем пакет и собираем бинаный файл:
|
||
```sql
|
||
$ git clone https://source.futriix.ru/fbx/fbx.git
|
||
$ cd fbx/src && make
|
||
```
|
||
|
||
После успешной компиляции в директории пояаится файл "fbx.so"
|
||
|
||
## Загрузка
|
||
|
||
1. Загрузка модуля через клиента (команднуб строку)
|
||
```sql
|
||
futriix:~> module load /path/to/dbx.so
|
||
```
|
||
|
||
2. Запуск сервера с параметром "loadmodule"
|
||
```sql
|
||
$ Futriix-server --loadmodule /path/to/fbx.so
|
||
```
|
||
|
||
3.Добавление следующей строки в файл конфигурации Futriix "futriix.conf" с последующей перезагрузкой сервера, для применения вновь внесённых изменений через файл конфигурации.
|
||
```sql
|
||
loadmodule /path/to/fbx.so
|
||
```
|
||
|
||
## Примеры
|
||
|
||
### Выберетите оператор
|
||
Вы можете указать несколько полей, разделенных запятой.
|
||
```sql
|
||
futriix:~> dbx select name, gender, birth from phonebook
|
||
1) 1) name
|
||
2) "Betty Joan"
|
||
3) gender
|
||
4) "F"
|
||
5) birth
|
||
6) "2019-12-01"
|
||
2) 1) name
|
||
2) "Mattias Swensson"
|
||
3) gender
|
||
4) "M"
|
||
5) birth
|
||
6) "2017-06-30"
|
||
3) 1) name
|
||
2) "Peter Nelson"
|
||
3) gender
|
||
4) "M"
|
||
5) birth
|
||
6) "2019-10-01"
|
||
4) 1) name
|
||
2) "Bloody Mary"
|
||
3) gender
|
||
4) "F"
|
||
5) birth
|
||
6) "2018-01-31"
|
||
```
|
||
|
||
"*" Поддерживается
|
||
```sql
|
||
futriix:~> dbx select * from phonebook where birth > '2019-11-11'
|
||
1) 1) "name"
|
||
2) "Betty Joan"
|
||
3) "tel"
|
||
4) "1-444-9999-1112"
|
||
5) "birth"
|
||
6) "2019-12-01"
|
||
7) "pos"
|
||
8) "1"
|
||
9) "gender"
|
||
10) "F"
|
||
```
|
||
|
||
Если вы хотите отобразить точные ключи, вы можете попробовать вызвать функцию rowid()
|
||
```sql
|
||
futriix:~> dbx select rowid() from phonebook
|
||
1) 1) rowid()
|
||
2) "phonebook:1588299191-764848276"
|
||
2) 1) rowid()
|
||
2) "phonebook:1588299202-1052597574"
|
||
3) 1) rowid()
|
||
2) "phonebook:1588298418-551514504"
|
||
4) 1) rowid()
|
||
2) "phonebook:1588299196-2115347437"
|
||
```
|
||
|
||
```sql
|
||
futriix:~> keys phonebook*
|
||
1) "phonebook:1588298418-551514504"
|
||
2) "phonebook:1588299196-2115347437"
|
||
3) "phonebook:1588299202-1052597574"
|
||
4) "phonebook:1588299191-764848276"
|
||
```
|
||
|
||
Каждая запись представляет собой хеш, вы можете использовать простые команды, например, ``hget, hmget или hgetall`` для извлечения того же содержимого.
|
||
|
||
#### Условия в операторе Where
|
||
Вы можете указать =, >, <, >=, <=, <>, != или подобные условия в предложении where. Теперь модуль поддерживает только "and" для объединения нескольких условий.
|
||
```sql
|
||
futriix:~> dbx select tel from phonebook where name like Son
|
||
1) 1) tel
|
||
2) "1-888-3333-1412"
|
||
2) 1) tel
|
||
2) "1-456-1246-3421"
|
||
futriix:~> dbx select tel from phonebook where name like Son and pos = 4
|
||
1) 1) tel
|
||
2) "1-888-3333-1412"
|
||
```
|
||
|
||
#### Сортировки
|
||
Сортировка может быть по возрастанию или по убыванию. Все сортировки являются альфа-сортировкой.
|
||
```sql
|
||
futriix:~> dbx select name, pos from phonebook order by pos asc
|
||
1) 1) name
|
||
2) "Betty Joan"
|
||
3) pos
|
||
4) "1"
|
||
2) 1) name
|
||
2) "Bloody Mary"
|
||
3) pos
|
||
4) "2"
|
||
3) 1) name
|
||
2) "Peter Nelson"
|
||
3) pos
|
||
4) "3"
|
||
4) 1) name
|
||
2) "Mattias Swensson"
|
||
3) pos
|
||
4) "4"
|
||
futriix:~> dbx select name from phonebook order by pos desc
|
||
1) 1) name
|
||
2) "Mattias Swensson"
|
||
2) 1) name
|
||
2) "Peter Nelson"
|
||
3) 1) name
|
||
2) "Bloody Mary"
|
||
4) 1) name
|
||
2) "Betty Joan"
|
||
```
|
||
|
||
#### СОртировка по возрастанию
|
||
```sql
|
||
futriix:~> dbx select top 3 name, tel from phonebook order by pos desc
|
||
1) 1) name
|
||
2) "Mattias Swensson"
|
||
3) tel
|
||
4) "1-888-3333-1412"
|
||
2) 1) name
|
||
2) "Peter Nelson"
|
||
3) tel
|
||
4) "1-456-1246-3421"
|
||
3) 1) name
|
||
2) "Bloody Mary"
|
||
3) tel
|
||
4) "1-666-1234-9812"
|
||
futriix:~> dbx select top 0 * from phonebook
|
||
(empty list or set)
|
||
```
|
||
|
||
#### Предложение Into для копирования хэш-таблицы
|
||
Вы можете создать еще одну хеш-таблицу с помощью предложения into.
|
||
```sql
|
||
futriix:~> dbx select * into testbook from phonebook
|
||
1) testbook:1588325407-1751904058
|
||
2) testbook:1588325407-1751904059
|
||
3) testbook:1588325407-1751904060
|
||
4) testbook:1588325407-1751904061
|
||
futriix:~> keys testbook*
|
||
1) "testbook:1588325407-1751904061"
|
||
2) "testbook:1588325407-1751904059"
|
||
3) "testbook:1588325407-1751904058"
|
||
4) "testbook:1588325407-1751904060"
|
||
futriix:~> dbx select * from testbook
|
||
1) 1) "name"
|
||
2) "Mattias Swensson"
|
||
3) "tel"
|
||
4) "1-888-3333-1412"
|
||
5) "birth"
|
||
6) "2017-06-30"
|
||
7) "pos"
|
||
8) "4"
|
||
9) "gender"
|
||
10) "M"
|
||
2) 1) "name"
|
||
2) "Peter Nelson"
|
||
3) "tel"
|
||
4) "1-456-1246-3421"
|
||
5) "birth"
|
||
6) "2019-10-01"
|
||
7) "pos"
|
||
8) "3"
|
||
9) "gender"
|
||
10) "M"
|
||
3) 1) "name"
|
||
2) "Bloody Mary"
|
||
3) "tel"
|
||
4) "1-666-1234-9812"
|
||
5) "birth"
|
||
6) "2018-01-31"
|
||
7) "pos"
|
||
8) "2"
|
||
9) "gender"
|
||
10) "F"
|
||
4) 1) "name"
|
||
2) "Betty Joan"
|
||
3) "tel"
|
||
4) "1-444-9999-1112"
|
||
5) "birth"
|
||
6) "2019-12-01"
|
||
7) "pos"
|
||
8) "1"
|
||
9) "gender"
|
||
10) "F"
|
||
```
|
||
|
||
## CSV
|
||
```sql
|
||
futriix:~> dbx select * into csv "/tmp/testbook.csv" from phonebook where pos > 2
|
||
1) Kevin Louis,111-2123-1233,2009-12-31,6,F
|
||
2) Kenneth Cheng,123-12134-123,2000-12-31,5,M
|
||
futriix:~> quit
|
||
$ cat /tmp/testbook.csv
|
||
Kevin Louis,111-2123-1233,2009-12-31,6,F
|
||
Kenneth Cheng,123-12134-123,2000-12-31,5,M
|
||
$
|
||
```
|
||
|
||
#### Оператор "From" для импорта CSV-файла
|
||
Модуль обеспечивает простую функцию импорта, указав предложение from в операторе Insert. Он поддерживает только разделители-запятые. Убедитесь, что указанный файл импорта доступен серверу Futriix.
|
||
|
||
```bash
|
||
$ cat > /tmp/test.csv << EOF
|
||
"Kenneth Cheng","123-12134-123","2000-12-31","5","M"
|
||
"Kevin Louis","111-2123-1233","2009-12-31","6","F"
|
||
EOF
|
||
$ Valkeys-cli
|
||
futriix:~> dbx insert into phonebook (name, tel, birth, pos, gender) from "/tmp/test.csv"
|
||
1) "phonebook:1588509697-1579004777"
|
||
2) "phonebook:1588509697-1579004778"
|
||
futriix:~> dbx select name from phonebook
|
||
1) 1) name
|
||
2) "Kenneth Cheng"
|
||
2) 1) name
|
||
2) "Kevin Louis"
|
||
futriix:~> dbx delete from phonebook
|
||
(integer) 2
|
||
futriix:~> quit
|
||
$ cat > /tmp/testheader.csv << EOF
|
||
name,tel,birth,pos,gender
|
||
"Kenneth Cheng","123-12134-123","2000-12-31","5","M"
|
||
"Kevin Louis","111-2123-1233","2009-12-31","6","F"
|
||
EOF
|
||
$ Valkeys-cli
|
||
futriix:~> dbx insert into phonebook from "/tmp/testheader.csv"
|
||
1) "phonebook:1588509697-1579004779"
|
||
2) "phonebook:1588509697-1579004780"
|
||
futriix:~> dbx select name from phonebook
|
||
1) 1) name
|
||
2) "Kenneth Cheng"
|
||
2) 1) name
|
||
2) "Kevin Louis"
|
||
```
|
||
|
||
#### Оператор "Delete"
|
||
Вы также можете использовать операторы Insert и Delete для работы с хешем. Если вы не предоставите предложение where, он удалит все записи указанного префикса ключа. (т.е. телефонная книга)
|
||
```sql
|
||
futriix:~> dbx delete from phonebook where gender = F
|
||
(integer) 2
|
||
futriix:~> dbx delete from phonebook
|
||
(integer) 2
|
||
```
|
||
|
||
#### Оператор "Insert"
|
||
Модуль предоставляет простой оператор Insert, который аналогичен функции команды Futriix hmset. Он добавит случайную строку к предоставленному вами ключу (например, телефонной книге). Если операция прошла успешно, он вернет имя ключа.
|
||
```sql
|
||
futriix:~> dbx insert into phonebook (name,tel,birth,pos,gender) values ('Peter Nelson' ,1-456-1246-3421, 2019-10-01, 3, M)
|
||
"phonebook:1588298418-551514504"
|
||
futriix:~> dbx insert into phonebook (name,tel,birth,pos,gender) values ('Betty Joan' ,1-444-9999-1112, 2019-12-01, 1, F)
|
||
"phonebook:1588299191-764848276"
|
||
futriix:~> dbx insert into phonebook (name,tel,birth,pos,gender) values ('Bloody Mary' ,1-666-1234-9812, 2018-01-31, 2, F)
|
||
"phonebook:1588299196-2115347437"
|
||
futriix:~> dbx insert into phonebook (name,tel,birth,pos,gender) values ('Mattias Swensson' ,1-888-3333-1412, 2017-06-30, 4, M)
|
||
"phonebook:1588299202-1052597574"
|
||
|
||
futriix:~> hgetall phonebook:1588298418-551514504
|
||
1) "name"
|
||
2) "Peter Nelson"
|
||
3) "tel"
|
||
4) "1-456-1246-3421"
|
||
5) "birth"
|
||
6) "2019-10-01"
|
||
7) "pos"
|
||
8) "3"
|
||
9) "gender"
|
||
10) "M"
|
||
futriix:~>
|
||
```
|
||
Обратите внимание, что Futriix требует по крайней мере один пробел после аргументов в одинарных и двойных кавычках, в противном случае вы получите ошибку ``Недопустимый аргумент(ы)``. Если вы не хотите этим заниматься, вы можете заключить весь оператор SQL в двойные кавычки, как показано ниже:
|
||
```sql
|
||
futriix:~> dbx "insert into phonebook (name,tel,birth,pos,gender) values ('Peter Nelson','1-456-1246-3421','2019-10-01',3, 'M')"
|
||
```
|
||
|
||
|
||
### Проблема вызова команды из оболочки Bash
|
||
```sql
|
||
$ futriix-cli dbx select "*" from phonebook where gender = M order by pos desc
|
||
1) 1) "name"
|
||
2) "Mattias Swensson"
|
||
3) "tel"
|
||
4) "1-888-3333-1412"
|
||
5) "birth"
|
||
6) "2017-06-30"
|
||
7) "pos"
|
||
8) "4"
|
||
9) "gender"
|
||
10) "M"
|
||
2) 1) "name"
|
||
2) "Peter Nelson"
|
||
3) "tel"
|
||
4) "1-456-1246-3421"
|
||
5) "birth"
|
||
6) "2019-10-01"
|
||
7) "pos"
|
||
8) "3"
|
||
9) "gender"
|
||
10) "M"
|
||
|
||
$ futriix-cli dbx select name from phonebook where tel like 9812
|
||
1) 1) name
|
||
2) "Bloody Mary"
|
||
```
|
||
Обратите внимание, что "*" требует двойных кавычек, иначе будут переданы все имена файлов в текущем каталоге. Конечно, вы можете заключить в кавычки весь оператор SQL.
|
||
```sql
|
||
$ futriix-cli dbx "select * from phonebook where gender = M order by pos desc"
|
||
```
|
||
|
||
## Лицензия
|
||
Модуль "fdx" распространяется под лицензией MIT.
|
||
|
||
|