• 10Apr

    patient-monitoring-connectivityПосмотрел его доклад, впечатлился, решил вынести некоторые сноски.

    Сравнение большого числа баз данных

    Системы мониторинга и анализа:

    Contrib/pgbanch
    – простая программа для запуска benchmark тестов PostgreSQL
    Cacti(www.cacti.net)/Nagious (www.nagios.org) – системы мониторинга различных параметров системы
    Bonnie++(sourceforge.net/projects/bonnie) тестирование винта и файловой системы
    pgFouine(pgfouine.projects.postgresql.org) – анализатор логов. Написан на пхп

    Статьи

    PostgreSQL Hardware Performance Tuning
    Performance Tuning
    Настройка производительности
    Инструкция по оптимизации
    GUCs: A Three Hour Tour

    Также упоминался connection pooler from Skype pgBouncer

    Если у кого то есть еще интересные ссылки по теме, то кидайте, буду только рад. Спасибо.

    Rating 3.00 out of 5
    [?]

    Tags: , , , ,

  • 22Oct

    Исходный материал – это Fedora Core 6 ( но и на 8ой я тестил – работает) и MSSQL 2000

    Сразу скажу, что в перле нет DBD::MSSQL, лично у меня – это сразу паника. Ну ничего. Есть такая умная штука как ODBC (Open DataBase Connectivity) она была создана именно для того, чтоб универсализировать доступ к различным типам баз данных, и по сути из себя представляет интерфейс. Я когда в буйной молодости кодил под винду, то сталкивался с этим, но тогда особо не заморачивался на тему «что оно такое?», и «как работает?». Так вот в линуксе есть подобная штука. Называется она unixODBC. ЕЕ и ставим.

    Устанавливаем unixODBC.

    1. yum install unixODBC.i386

    Единственная проблема, что стандартные сошники есть только для MySQL и PostgreSQL. А на официальном сайте я нашел драйвер для Microsoft SQL Server – он прям там красуется на первом месте, но не могет не смущать надпись «Download free trial from…»

    В этом случае спасает FreeTDS – это и есть те самые библиотеки для общения с Microsoft SQL Server и Sybase. И с ним тоже при установке не должно быть никаких проблем.

    1. yum install freetds.i386

    Не забываем поставить модуль для DBI.

    1. cpan DBD::ODBC

    дальше добавляем конфиг

    в файл /etc/odbcinst.ini

    1. [MyServer2k]
    2. Driver = /usr/lib/libtdsodbc.so

    На этом конфигурация закончена. В перле это происходит так:

    1. my $dbh2 = DBI->connect("DBI:ODBC:DRIVER={MyServer2k};Server=10.1.1.1;Database=MSSQL_DB_NAME;Uid=DB_USER_NAME;Pwd=DB_PASSWORD", ' DB_USER_NAME', 'DB_PASSWORD',{AutoCommit => 1, RaiseError=> 1, PrintError =>0});

    Rating 3.00 out of 5
    [?]

    Tags: , , , , , ,

  • 19Jul

    что мне надо от логов:
    1) конешно выводить точку запуска + время в каждом запускаемом логе + дополнительная инфа, как правило у разных проектов она разная.
    2) выводить не только сроку, но и более сложную структуру.
    3) разные функции для логов ( info, error, debug,trace) чтоб на внешнем серваке отказываться от определенных из них, причем делать этот без потери скорости.

    sub _log{
    my ($self,$type,$text,$cl) = @_;
    my @tt = localtime;
    my ($pack,$filename,$line) = caller(1);
    my ($topack,$tofile,$toline) = caller($cl) if($cl);
    $line = "($type)".POSIX::strftime("%d,%h %H:%M:%S",localtime)." $filename($line) ";
    if($cl){
    my ($topack,$tofile,$toline) = caller($cl) ;
    $line.= "{$tofile($toline)}";
    }
    # тут линию можно дополнить своими
    open my $fh,'>>'.MyProject::Conf::LOGFILE;
    print $fh $line.$text."\n";
    close $fh;
    }
    
    my $alog = MyProject::Conf::LOGS;
    my $clog = MyProject::Conf::CLOGS;
    
    no strict 'refs';
    
    foreach my $ll (@$alog){
    my $method = lc $ll;
    if(grep {$_ eq $ll} @$clog){
    *{$method} = sub{my $self = shift; $self->_log($ll,@_)};
    *{$method.'_dump'} = sub{my $self = shift; my $text = shift; my $data = shift; $self->_log($ll,$text.':'.Dumper($data),@_)}
    }else{
    *{$method} = sub{};
    *{$method.'_dump'} = sub{};
    }
    }
    

    немного по коду… MyProject::Conf::LOGFILE – тут просто лежит абсолютный путь к файлу логов.
    MyProject::Conf::LOGS – тут лежит массив имен всех доступных логов, я использую ['INFO','DEBUG','DERROR','TRACE']
    MyProject::Conf::CLOGS – массив логов которые необходимо выводить. Так я сделал потому, что не в се используемые логи необходимо выводить в данном запуске проекта.

    цикл идущий после no strict ‘refs’;

    просто заполняет функции. имен всех функций переводятся в нижний регистр. + добавляется еще и функция dump, для info она будет info_dump, которая кроме передой строки, в лог еще запишет передаваемую структуру, выводимую с помощью Data::Dumper

    Rating 3.00 out of 5
    [?]

    Tags: , ,

  • 13Jul

    по мне, так в утфе все хорошо, еслиб не утфный флаг.  по ходу вообще не понятно, зачем его лепят туда, ведь он то нужен только для утф16, ну даладно.

    Бока в перле вылазят во время конкатенации. Тут умные дятьки пишут, что

    Конкатенация строки, имеющей флаг UTF-8, со строкой, у которой этот флаг снят, приводит к автоматическому преобразованию строки без флага. При этом Perl исходит из того, что строка в кодировке “latin-1″ или той кодировке, которая установлена с помощью прагмы “encoding”.

    другие умные дятьки ( гдето в пермонксах) , что
    use encoding ':utf8';
    зло. Ну как зло… вобщем я точно не помню, надо порыться в монксах, но помоему глюк с аплоадом картинок начинается.. при определении размера…

    Еще есть use utf8 , все скаляры в исходниках считать утфными. Сначало пользовался этой фишкой, а потом необходимость отпала.
    Вобщем закончелось все тем, что я написал “типокостыль”, для снятия со структуры утфного флага, потомучто XML::Simple вообще его везде растовляет, а для меня это критично.

    Вобщем собственно типс:

    sub _utf8_off_all{
    my $self = shift;
    my $ref = shift;
    my $rr = ref($ref);
    if($rr){
    if($rr eq 'ARRAY'){
    for(my $i=0;$i<@$ref;$i++){
    $ref->[$i] = $self->_utf8_off_all($ref->[$i])
    }
    }elsif($rr eq 'HASH'){
    foreach my $k (keys %$ref){
    if(Encode::is_utf8($k)){
    Encode::_utf8_off($k);
    }
    $ref->{$k} = $self->_utf8_off_all($ref->{$k});
    }
    }else{
    die 'UNKNOWN REF in encodeall';
    }
    }else{
    if(Encode::is_utf8($ref)){
    Encode::_utf8_off($ref);
    }
    }
    return $ref;
    }

    Rating 3.00 out of 5
    [?]

    Tags: , ,

  • 01Jul

    я даже и не вспомню, почему я решил назвать “tips” этот раздел, наверно гдето слыхал.

    О… только что прогулил, оказалось, что это “советы”. Хм.. советы конечно это круто, слишком круто для этого раздела. Просто прикольные вещички, до которых я сразу бы не догодался.

    может просто маленькие примерчики кода.

    Возможно, в последствии я их буду потихоньку отсортировывать, сведу в какието правила. Но пока просто типсы.

    Rating 3.00 out of 5
    [?]

    Tags:

   

Recent Comments

  • Every body remembers that modern life seems to be not very c...
  • Alexander, спасибо, интересная трактовка. Но целью статьи бы...
  • "И всегда выходит так, что супер силы, супер сразу — это суп...
  • Так, на вскидку - Лукъяненко пишет в жанре фантастика....
  • Не выдержала моя душа, вот по поводу идиотизма которого тебе...