FastNetMon

Friday 13 March 2009

Работа с MemcachDB из Perl Cache::Memcached::Fast

В документации сказано, что MemcacheDB поддерживает протокол обмена своего старшего брата -- Memcached`а. Но, как следовало ожидать, функции поддерживаются далеко не все:
* get(also mutiple get)
* set, add, replace
* append/prepend
* incr, decr
* delete
* stats

Далее нам это надо будет учитывать при использовании модуля Cache::Memcached::Fast (который вам предстоит поставить с CPAN).

Вот простейший пример работы с MemcacheDB:

#!/usr/bin/perl

use strict;
use warnings;

use Cache::Memcached::Fast;

my $memd = new Cache::Memcached::Fast( {
servers => [ { address => 'localhost:7777' } ],
} );

$memd->set("some_key", "some data");
print $memd->get("some_key");



А сейчас давайте попробуем внести 2 миллиона записей в базу (2 млн уникальных ключей, значения поставим равными ключам + некий набор символов, суммарный размер ключей -- 33 102 046 байт (ок 32 мегайбайт), данных чуть больше). Платформа для теста: 4 * Intel(R) Xeon(R) CPU E5420 @ 2.50GHz + 8Гб памяти + SATA винты в RAID1 + Centos5. Перед началом теста БД занимала 28 мегабайт.

Итого время добавления 2 млн записей следующее:
time ./work_db.pl
real 2m35.559s
user 0m6.060s
sys 0m13.745s

Т.е. ~14 000 записей в секунду скорость записи.

Протестируем скорость чтения, просто получим ключи, которые возьмем из файла:

time ./work_db.pl
some data
real 1m46.386s
user 0m9.637s
sys 0m23.029s

Т.е. скорость чтения около ~18 000 записей / в секунду

Кстати, а статистику работу MemcacheDB можно посмотреть опять же Телнетом:

telnet localhost 7777
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
stats
STAT pid 7673
STAT uptime 859
STAT time 1236987371
STAT version 1.2.0
STAT pointer_size 64
STAT rusage_user 3.684439
STAT rusage_system 19.183083
STAT ibuffer_size 512
STAT curr_connections 5
STAT total_connections 256615
STAT connection_structures 9
STAT cmd_get 4
STAT cmd_set 14623
STAT get_hits 4
STAT get_misses 0
STAT bytes_read 14110820
STAT bytes_written 6402248
STAT threads 4
END


Итого, мы получили ~18 000 записей / секунду при чтении, а при записи ~14 000 записей / секунду.

Errata: немного переклинило и считал минуты по 30 секунд, исправил, значения стали меньше :)

2 comments :

  1. Довольно интересно...Еще интересней было бы глянуть здесь же на результаты Postgres и MySql...

    ReplyDelete
  2. PostgreSQL будет ЯВНО медленнее MySQL, так что сейчас протестирую MySQL с хранилищем MyISAM.

    ReplyDelete

Note: only a member of this blog may post a comment.