![image](http://habr.habrastorage.org/post_images/a91/33b/09e/a9133b09ea76ec45cec083acc1b238b8.png)
Буквально сегодня наткнулся на совсем новый проект — 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.
Библиотека не может быть не сырой, но, несомненно, заслуживает внимания. Под мои задачи должна вписаться идеально. Посмотрим, что получится.
ссылка на оригинал статьи http://habrahabr.ru/post/185484/
Добавить комментарий