Tokyo Tyrant

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 16:20, 17 января 2019.
Tokyo Tyrant
Разработчики: FAL Labs
Выпущена: 25 December 2009 года; 10 years ago (2009-12-25)
Постоянный выпуск: 1.2.76 / 24 May 2012 года; 7 years ago (2012-05-24)
Написана на: C
Операционная система: Linux, FreeBSD, Mac OS X, Solaris
Локализация: Английский язык, Японский язык
Тип ПО: Сервер БД
Лицензия: GNU Lesser General Public License
Веб-сайт fallabs.com/tokyotyrant/

Tokyo Tyrant — это пакет программ, предоставляющий интерфейс сетевого взаимодействия для управления DBM под названием Tokyo Cabinet. Хотя данная DBM имеет высокую производительность, существует вероятность того, что несколько процессов будут использовать одну и ту же базу данных или же удаленные процессы будут обращаються к базе данных, что может привести к снижению производительности. [Источник 1]

Tokyo Tyrant предоставляет возможность для эффективного одновременного и удаленного подключения к Tokyo Cabinet; пакет включает в себя серверный процесс, управляющий базой данных и ее библиотеки доступа для клиентских приложений.

Следует отметить, что один сервер Tokyo Tyrant может обслуживать только одну базу данных.

Tokyo Tyrant написан на языке C и представлен как API для C, Perl и Ruby. Tokyo Tyrant доступен на платформах с API, совместимыми с C99 и POSIX. [Источник 2] Tokyo Tyrant - бесплатное программное обеспечение, лицензированное по лицензии GNU Lesser General Public License.

Обзор

Ключевые особенности Tokyo Tyrant:[Источник 3]

Сервер управления Tokyo Cabinet

Рисунок 1 – Механизм асинхронной репликации

Совместимость

  • Поддерживает memcached и HTTP
  • Совместим с несколькими популярными языками: C, Perl и Ruby

Высокая производительность

  • Около 1 000 000 запросов выполняется за 17,2 с (58,000 запросов/сек)
  • Способность решать проблему 10 000 соединений с помощью epoll/kqueue/eventports

Рисунок 2 – Принцип работы

Высокая надежность

  • "горячее резервное копирование" и журнал обновлений
  • асинхронная репликация между серверами (принцип ее работы представлен на рисунке 1)

Разнообразие схем БД

Эффективные операции

Принцип организации операций при их выполнении представлен на рисунке 2.

Особенности:

  • многозадачность
  • атомарный инкремент

Расширение Lua

Рисунок 3 – Расширение Lua

Роль и место расширения Lua как компоненты Tokyo Tyrant проиллюстрированы структурной схемой на рисунке 3.

Особенности:

  • определяет операции БД как функции Lua
  1. клиенты отправляют запрос, содержащий имя функции и записываемые данные
  2. сервер возвращает клиенту результаты работы функции (то есть ее возвращаемое значение)
  • доступна атомарная операция с помощью блокировки записи

Установка

Необходимо установить последнюю версию Tokyo Cabinet, а также скачать архив с Tokyo Tyrant - на официальном сайте в разделе "Packages" доступны все необходимые файлы. При распаковке архива следует изменить текущий рабочий каталог, назначенный по умолчанию, на необходимый. Далее нужно запустить сценарий (скрипт) конфигурации. Чтобы включить расширение Lua, нужно добавить параметр --enable-lua.

./configure

Далее следует запустить Makefile-скрипт

make

И, наконец, завершение установки программы (для выполнения команды пользователь должен обладать root-правами):

make install

В итоге будут установлены следующие файлы:

/usr/local/include/ttutil.h
/usr/local/include/tculog.h
/usr/local/include/tcrdb.h
/usr/local/lib/libtokyotyrant.a
/usr/local/lib/libtokyotyrant.so.x.y.z
/usr/local/lib/libtokyotyrant.so.x
/usr/local/lib/libtokyotyrant.so
/usr/local/lib/ttskelmock.so
/usr/local/lib/ttskeldir.so
/usr/local/lib/ttskelproxy.so
/usr/local/lib/ttskelnull.so
/usr/local/lib/pkgconfig/tokyotyrant.pc
/usr/local/bin/ttserver
/usr/local/bin/ttultest
/usr/local/bin/ttulmgr
/usr/local/bin/tcrtest
/usr/local/bin/tcrmttest
/usr/local/bin/tcrmgr
/usr/local/sbin/ttservctl
/usr/local/share/tokyotyrant/...
/usr/local/man/man1/...
/usr/local/man/man3/...

Для тестирования работоспособности сервера следует использовать следующую команду (чтобы прервать выполнение операции, можно использовать сочетание

"Ctrl-C"):

ttserver

Чтобы протестировать клиент, подключившийся к вышеуказанному запущенному серверу, необходимо выполнить следующую команду на другом терминале:

make check

Обзор команд сервера

ttserver

Команда "ttserver" запускает сервер, управляющий экземпляром базы данных. Поскольку база данных обрабатывается абстрактным API Tokyo Cabinet, существует возможность выбрать схему при запуске сервера. Поддерживаемые схемы: база данных на основе хэш-таблицы, база данных на основе B+-дерева, база данных фиксированной длины и табличная база данных. По умолчанию используется база данных на основе хэш-таблицы. Команда используется в следующем формате:

ttserver [-host name] [-port num] [-thnum num] [-tout num] [-dmn] [-pid path] [-kl] [-log path] [-ld|-le] [-ulog path] [-ulim num] [-uas] [-sid num] 

[-mhost name] [-mport num] [-rts path] [-rcc] [-skel name] [-mul num] [-ext path] [-extpc name period] [-mask expr] [-unmask expr] [dbname]

[-dbname] — имя базы данных

[-host name] — имя хоста или адрес сервера

[-port num] — указать номер используемого порта. По умолчанию используется 1978 порт

[-thnum num] — указать количество рабочих потоков. По умолчанию — 8

[-tout num] — указать тайм-аут каждой сессии в секундах. По умолчанию тайм-аут не указан

[-dmn] — режим работы в качестве процесса-демона

[-pid path] — вывести идентификатор процесса в файл (path — путь к файлу)

[-kl] — "убить" существующий процесс

[-log path] — выводить сообщения журнала в файл (path — путь к файлу)

[-ld] — регистрировать отладочные сообщения

[-le] — регистрировать только сообщения об ошибках

[-ulog path] — указать каталог журнала обновлений (path — путь к файлу)

[-ulim num] — указать максимальный размер каждого файла журнала обновлений (num — размер)

[-uas] — использовать асинхронный ввод-вывод для журнала обновлений

[-sid num] — указать идентификатор сервера

[-mhost name] — указать имя хоста главного сервера репликации

[-mport num] — указать номер порта главного сервера репликации

[-rts path] — указать файл для записи отметок о времени репликации (path — путь к файлу)

[-rcc] — проверить согласованность репликации

[-skel name] — указать имя используемой библиотеки базы данных

[-ext path] — указать файл расширения языка сценария (path — путь к файлу)

[-extpc name period] — указать имя функции и период вызова специальной периодической команды

[-mask expr] — указать имена запрещенных команд

[-unmask expr] — указать имена разрешенных команд

Для завершения работы сервера необходимо отправить команду SIGINT или SIGTERM процессу; также можно использовать комбинацию "Ctrl-C". Для перезапуска сервера используется команда SIGHUP.

Следует отметить, что если вместо имени файла указана "*", будет использована база данных на основе хеш-таблицы (вариант по умолчанию). Иначе, тип базы определяется расширением файла:

  • .tch — хеш-таблица;
  • .tcb — B+ дерево;
  • .tcf — база данных фиксированной длины;
  • .tct — табличная база данных.

Команда ttserver возвращает 0 при успешном завершении, любое другое значение - при сбое.

ttservctl

Команда ttservctl — это сценарий запуска сервера. Его можно вызвать с помощью сценария RC процесса начальной загрузки операционной системы. Способы использования данной команды:

Запустить сервер:

ttservctl start

Остановить сервер:

ttservctl stop

Перезагрузить сервер:

ttservctl restart

Отправить HUP-сигнал на сервер:

ttservctl hup

Путь к базе данных: "/var/ttserver/casket.tch". Журнал и прочие файлы размещены в "/var/ttserver".

Команда ttservctl возвращает 0 при успешном завершении, при сбое — любое другое значение.

ttulmgr

Команда ttulmgr используется для экспорта и импорта журнала обновлений. Журнал обновлений можно фильтровать такими текстовыми утилитами, как grep и sed. Команда может быть использована несколькими способами.

Экспорт журнала обновлений в виде текстовых данных TSV на стандартный вывод:

ttulmgr export [-ts num] [-sid num] upath

Импорт текстовых данных TSV со стандартного ввода в журнал обновлений:

ttulmgr import upath

Значения используемых флагов и параметров, используемых в командах:

upath — путь к каталогу журнала обновлений

[-ts num] — указать начальную отметку времени

[-sid num] — указать идентификатор собственного сервера

Команда ttulmgr возвращает 0 при успешном завершении, при сбое — любое другое.

Обзор команд клиента

tcrtest

Команда tcrtest может быть использована для тестирования производительности. Эта команда возвращает 0 при успешном завершении, любое другое значение - при сбое.

Примеры использования команды:

Тест на запись с ключами длины по 8 байт ("00000001", "00000002" ...):

tcrtest write [-port num] [-cnum num] [-tout num] [-nr] [-rnd] host rnum

Тест на чтение всех записей из базы данных:

tcrtest read [-port num] [-cnum num] [-tout num] [-mul num] [-rnd] host

Тест на удаление всех записей из базы данных:

tcrtest remove [-port num] [-cnum num] [-tout num] [-rnd] host

Выполнить тесты различных операций:

tcrtest misc [-port num] [-cnum num] [-tout num] host rnum

Выполнить операции обновления, выбранные случайным образом:

tcrtest wicked [-port num] [-cnum num] [-tout num] host rnum

Значения опций:

[-port num] — номер порта

[-cnum num] — количество подключений

[-tout num] — тайм-аут каждой сессии в секундах

[-nr] — использовать функцию API "tcrdbputnr" вместо "tcrdbput"

[-shl num] — использовать функцию API с указанным параметром (num)

[-mul num] — количество записей для команды "mget"

[-dai] — использовать функцию API "tcrdbaddint" вместо "tcrdbputcat"

[-dad] — использовать функцию API "tcrdbadddouble" вместо "tcrdbputcat"

[-xlr] — выполнить блокировку записи.

[-exp num] — время действия для теста

tcrmttest

Команда tcrmttest используется для тестирования производительности в многопоточном режиме; возвращает 0 при успешном завершении, любое другое значение - при сбое.

Примеры использования:

Тест на запись с ключами длины по 8 байт ("00000001", "00000002" ...):

tcrmttest write [-port num] [-tnum num] [-nr] [-rnd] [-ext name] host rnum

Тест на чтение всех записей из базы данных:

tcrmttest read [-port num] [-tnum num] [-mul num] host

Тест на удаление всех записей из базы данных:

tcrmttest remove [-port num] [-tnum num] host

Значения опций:

[-port num] — номер порта

[-tnum num] — количество запущенных потоков

[-nr] — использовать функцию API "tcrdbputnr" вместо "tcrdbput"

[-mul num] — количество записей для команды "mget"

tcrmgr

Команда tcrmgr используется для тестирования и отладки API для удаленного использования базы данных и ее приложений; возвращает 0 при успешном завершении, любое другое значение - при сбое.

Примеры использования:

Вывести данные в стандартный поток вывода:

tcrmgr inform [-port num] [-st] host

Сохранить запись:

tcrmgr put [-port num] [-sx] [-sep chr] [-dk | -dc | -dai | -dad] значение ключа хоста

Удалить запись:

tcrmgr out [-port num] [-sx] [-sep chr] ключ хоста

Распечатать значение записи:

tcrmgr get [-port num] [-sx] [-sep chr] [-px] [-pz] ключ хоста

Печать в стандартный поток вывода ключей и значений нескольких записей:

tcrmgr mget [-port num] [-sx] [-sep chr] [-px] host [ключ ...]

Печать ключей всех записей базы данных:

Список tcrmgr [-port num] [-sep chr] [-m num] [-pv] [-px] [-fm str] host

Синхронизировать обновленное содержимое с файлом базы данных:

tcrmgr sync [-port num] хост

Удалить все записи из базы данных:

tcrmgr vanish [-port num] host

Скопировать файл базы данных:

tcrmgr copy [-port num] host dpath

Восстановить базу данных с помощью журнала обновлений: <sconsole> tcrmgr restore [-port num] [-ts num] [-rcc] host upath </console>

Задать мастер-хост для репликации:

tcrmgr setmst [-port num] [-mport num] [-ts num] [-rcc] host [mhost]

Репликация журнала обновлений:

tcrmgr repl [-port num] [-ts num] [-sid num] [-ph] host

Загрузить данные с указанного адреса:

tcrmgr http [-ah name value] [-ih] url

Вывести информацию о текущей версии Tokyo Tyrant:

tcrmgr version


Подробное описание всех опций, используемых в командах представлено в документации.

API для удаленного использования

API предоставляет набор функций для удаленного управления базой данных.

Чтобы использовать API, необходимо включить в проект файл "tcrdb.h" и соответствующие стандартные заголовочные файлы.

Пример:

#include <tcrdb.h>
#include <stdlib.h>
#include <stdbool.h>
#include <stdint.h>

Источники

  1. Tokyo Tyrant: network interface of Tokyo Cabinet // FAL Labs. [2007-2010]. Дата обновления: 05.09.2010. URL: http://fallabs.com/tokyotyrant/ (дата обращения: 08.10.2018).
  2. Install Tokyo Tyrant in Linux // Truelogic Blog [2006-2018]. Дата обновления: 17.02.2015. URL: http://truelogic.org/wordpress/2015/02/17/install-tokyo-tyrant-in-linux/ (дата обращения: 08.10.2018).
  3. Introduction to Tokyo Products // FAL Labs. [2007-2010]. Дата обновления: 05.09.2010. URL: http://fallabs.com/tokyocabinet/tokyoproducts.pdf (дата обращения: 08.10.2018).