Posts Tagged ‘производительность’

Bulk update в MySQL

Posted in Мелочи on ноября 1, 2009 by korchasa – Be the first to comment

Ревизия #2

В порыве пятничного отлынивания от работы, совместно с коллегой, родили нечто.

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

Нечто имеет следующие недостатки:

  • требует уникального ключа
  • если строки с подходящим ключом нет, то она добавится
  • для построения требует знаний о типах полей таблицы
  • мускл на него ругается ворнингами
  • NULL таким образом вставить невозможно

read more »

Презентация от старого доклада о кэшировании

Posted in Без рубрики on мая 17, 2009 by korchasa – Be the first to comment

Видео со скончавшегося secon’а видимо не будет никогда, поэтому выкладываю только презентацию.

Денормализация связей многие-ко-многим, через битовые маски

Posted in Без рубрики on мая 4, 2009 by korchasa – 2 Comments

Ситуация довольно банальная: есть статьи и тэги, связанные многие-ко-многим, и необходимо быстро находить статьи с определенным тэгом или несколькими тэгами. Необходимо обойтись без JOIN и одним простым запросом.

В mysql есть тип данных set, который вполне для этого подходит. Но можно и ручками

Посмотрим взлетит оно или нет:

CREATE TABLE  `tests`.`article` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `mask` int(10) unsigned default NULL,
  `cset` set('1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20') default NULL,
  PRIMARY KEY  (`id`),
  KEY `mask` (`mask`),
  KEY `cset` (`cset`)
) ENGINE=InnoDB;

Добавление записей:

INSERT INTO article VALUES(NULL, 3, '1,2');

Выбор по одному тэгу:

select count(*) from article where mask & 1; //помеченные тэгом #1
select count(*) from article where cset & 1;

Выбор по нескольким тэгам – объединение:

select count(*) from article where mask & 3; //помеченные тэгом #1 ИЛИ #2
select count(*) from article where cset & 3;

Выбор по нескольким тэгам – пересечение:

select count(*) from article where mask & 1 AND mask & 2; //помеченные и  тэгом #1 И тэгом #2
select count(*) from article where cset & 1 AND cset & 2;

По скорости варианты равноценны, и на табличке с 500К записей (20 разных тэгов, по 1-20 тэгов на статью) все запросы обрабатывались за, примерно, 0.3 секунды, на средненькой домашней машинке.

Сеанс консольной магии: анализ access логов nginx'а.

Posted in Статьи on ноября 7, 2008 by korchasa – 11 Comments

О том, что где-то рядом живут sed, grep, awk и pipelines, я узнал еще года 4 назад, но использовать (с толком) их не приходилось. Пока не захотелось странного…

read more »

Dog-pile эффект. Как отгонять стаи собак.

Posted in Статьи on апреля 18, 2008 by korchasa – 3 Comments

Dog-pile эффект — ситуация когда кэш протухает, а большое количество запросов генерирует высокую нагрузку на источник данных, из которых строиться кэш. read more »

Организация "кусочкового" кеширование HTML

Posted in Статьи on апреля 8, 2008 by korchasa – 3 Comments

Навеяно парой статей на Хабре, и тем, что вчера сделал cache тег для Macro.
read more »

Тесты производительности различных cache storage

Posted in Статьи on марта 20, 2008 by korchasa – 9 Comments


Version 0.4

Ну вот опять!

Передо мной в данный момент стоит задача сравнить популярные бытрые хранилища данных, основанные на использовании оперативной памяти. Найденные сравнения(например, вот это) не совсем подходят, так как необходима информация не только о скорости get/set операций, но и о add/delete (их предполагается использовать для создания мьютексов).
read more »

PHP 5.3: что пых грядущий нам готовит?

Posted in Статьи on февраля 22, 2008 by korchasa – 4 Comments

То о чем так долго говорили большевики…

Кратенько:

  • пространства имен
  • mysqlnd
  • позднее статическое связывание
  • динамические вызовы статических методов
  • Прочие изменения

А теперь подробно…
read more »

Тесты PHP шаблонизаторов

Posted in Тесты on февраля 8, 2008 by korchasa – Be the first to comment

Два дня убил на эти тесты и небольшие оптимизации macro. А теперь <звуки горна: та-да>:

Limb template engine benchmark

Примечания:

  • В роли опкод-кешера используется APC.
  • Постфикс ‘one_tpl’ указывает, что шаблон один, и нет инклудов и враппов.
  • macro_sl – версия macro – с простым локатором шаблонов.
  • macro_sl_boundled – версия macro – с простым локатором и объединенная в один файл.

SVN:

https://svn.limb-project.com/limb/misc/template_engines_bench/

Текущее положение дел таково:

name rps %
php_one_tpl 2647 100%
php 2183 82%
blitz-ctx-arr 1994 75%
macro_sl_bundled 1736 66%
blitz 1521 57%
quicky_one_tpl 1457 56%
smarty_one_tpl 1389 52%
macro_sl 1247 47%
smarty 942 36%
quicky 839 32%
macro 768 29%

4 в 1 – простой комбайн для оптимизации статики

Posted in Анонсы on января 24, 2008 by korchasa – 5 Comments

Наткнулся на интересную библиотеку. Вот перевод интродакшена:

Как уменьшить время загрузки сайта в 5 раз, тремя строчками кода.

Есть 4 относительно простых способа, с помощью которых вы можете уменьшить время загрузки страницы:

  • делать меньше HTTP запросов
  • выставлять expires на далекое будущее
  • сжимать компоненты вашей страницы gzip’ом
  • обфускачивать ваши JavaScript и CSS файлы, а так же сам HTML-код

После моего поста об объединении CSS и JavaScript файлов, я написал PHP-скрипт, который будет автоматически применять все вышеперечисленные способы. Все, что вам нужно сделать, это поместить следующий код в начало своего PHP-файла:

require_once ( 'class.compressor.php' ) ;
$compressor = new compressor ( 'css,javascript,page' ) ;

А этот код в конец:

$compressor -> finish ( ) ;

read more »