В своей работе мне часто приходится использовать key-value хранилище для организации связи между процессами, хранения настроек системы, временных данных и т. д. Для данных целей я использую Redis. Меня он вполне устраивает, еще и hiredis всем библиотекам библиотека.
Буквально сегодня наткнулся на совсем новый проект — Gibson Cache Server. Первый коммит датирован 17 маем 2013 года. О чем и речь!
Gibson Cache Server — in-memory key-value база данных, в основе которой лежит структура данных — дерево, в то время как redis и memcached используют хеш-таблицу. Это позволяет использовать операции сразу над несколькими ключами.
Особенности, заявленные разработчиком:
Здесь ничего сложного нет. Исходники сервера можно взять здесь.
Конфигурационный файл находится в /etc/gibson/gibson.conf
К слову, сервер можно запускать с ключем -c, указывая путь к файлу конфигурации, и не устанавливать всё в системные директории.
Исходники находятся тут.
Здесь всё аналогично. Единственное, что нужно отметить, в ./src/linenoise должны лежать исходники библиотеки linenoise.
После
У нас появляется «джентельменский набор»: заголовчный файл, сама библиотека и gibson-cli.
Запуск клиента и список команд, которые доступны на данный момент.
Стандартные set/get
И с использованием TTL.
Ну и множественные get/set
На сайте разработчика присутствуют данные тестов, которые он провел над операциями get/set на машине
Intel Core(TM) i3-2130 CPU @ 3.40GHz with 8GB of RAM, с Debian Squeeze.
Сравнивал он свою базу данных с Redis. Результаты следующие:
Redis
Gibson
Если не лукавит, то производительность на этих операциях выше у Gibson на 60 процентов.
В настоящее время уже есть библиотека для php. Также, обещают в скором времени добавить поддержку Nodejs.
Библиотека не может быть не сырой, но, несомненно, заслуживает внимания. Под мои задачи должна вписаться идеально. Посмотрим, что получится.
Буквально сегодня наткнулся на совсем новый проект — Gibson Cache Server. Первый коммит датирован 17 маем 2013 года. О чем и речь!
Gibson Cache Server — in-memory key-value база данных, в основе которой лежит структура данных — дерево, в то время как redis и memcached используют хеш-таблицу. Это позволяет использовать операции сразу над несколькими ключами.
Особенности, заявленные разработчиком:
- Чрезвычайно быстрая
- Используется настолько мало памяти, насколько это возможно
- Поддерживает LZF сжатие
- Поддерживает Time-To-Live (время жизни ключа)
- Поддерживает функциональность для блокировки и разблокировки ключей
- Ну и собственно самое главное — множественные операции
Установка
Сервер
Здесь ничего сложного нет. Исходники сервера можно взять здесь.
git clone https://github.com/evilsocket/gibson.git
cd gibson
сmake -G «Unix Makefiles» .
make
sudo make install
Конфигурационный файл находится в /etc/gibson/gibson.conf
К слову, сервер можно запускать с ключем -c, указывая путь к файлу конфигурации, и не устанавливать всё в системные директории.
Клиент
Исходники находятся тут.
Здесь всё аналогично. Единственное, что нужно отметить, в ./src/linenoise должны лежать исходники библиотеки linenoise.
После
git clone https://github.com/evilsocket/libgibsonclient
cd libgibsonclient
сmake -G «Unix Makefiles» .
make
У нас появляется «джентельменский набор»: заголовчный файл, сама библиотека и gibson-cli.
Демонстрация
Запуск клиента и список команд, которые доступны на данный момент.
Скрытый текст
deck@crunch ~/work/libgibsonclient $ ./gibson-cli -u /tmp/gibson.sock
type :help or :h for a list of commands, :quit or :q to quit.
local> :h
SET <ttl> <key> <value>
TLL <key> <ttl>
GET <key>
DEL <key>
INC <key>
DEC <key>
LOCK <key> <seconds>
UNLOCK <key>
MSET <prefix> <value>
MTTL <prefix> <ttl>
MGET <prefix>
MDEL <prefix>
MINC <prefix>
MDEC <prefix>
MLOCK <prefix> <seconds>
MUNLOCK <prefix>
COUNT <prefix>
STATS
PING
SIZEOF <key>
MSIZEOF <prefix>
ENCOF <key>
Стандартные set/get
Скрытый текст
local> set 0 foo 5
<STRING> 5
local> get foo
<STRING> 5
И с использованием TTL.
Скрытый текст
local> set 3 bar hi!
<STRING> hi!
local> get bar
<STRING> hi!
local> get bar
<REPL_ERR_NOT_FOUND>
Ну и множественные get/set
Скрытый текст
local> set 0 score:user1 400
<STRING> 400
local> set 0 score:user2 100
<STRING> 100
local> set 0 score:user3 900
<STRING> 900
local> mget score
score:user1 => <STRING> 400
score:user2 => <STRING> 100
score:user3 => <STRING> 900
local> mset score 0
<NUMBER> 3
local> mget score
score:user1 => <STRING> 0
score:user2 => <STRING> 0
score:user3 => <STRING> 0
Производительность
На сайте разработчика присутствуют данные тестов, которые он провел над операциями get/set на машине
Intel Core(TM) i3-2130 CPU @ 3.40GHz with 8GB of RAM, с Debian Squeeze.
Сравнивал он свою базу данных с Redis. Результаты следующие:
Redis
Скрытый текст
$ redis-benchmark -c 1 -n 100000 -q -t SET
SET: 51519.84 requests per second
$ redis-benchmark -c 1 -n 100000 -q -t GET
GET: 49212.60 requests per second
Gibson
Скрытый текст
@ Created 100000 / 100000 in 1216ms
-- 82236.842105 Req/s
@ Verified : 100000 / 100000 in 1145ms
-- 87336.244541 Req/s
Если не лукавит, то производительность на этих операциях выше у Gibson на 60 процентов.
Заключение
В настоящее время уже есть библиотека для php. Также, обещают в скором времени добавить поддержку Nodejs.
Библиотека не может быть не сырой, но, несомненно, заслуживает внимания. Под мои задачи должна вписаться идеально. Посмотрим, что получится.