Bulk update в MySQL

Опубликовано в рубрике Мелочи 2009.11.01 korchasa – Комментариев пока нет

Ревизия #2

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

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

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

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

Читать далее »

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

Опубликовано в рубрике Без рубрики 2009.05.17 korchasa – Комментариев пока нет

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

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

Опубликовано в рубрике Без рубрики 2009.05.04 korchasa – 2 комментов

Ситуация довольно банальная: есть статьи и тэги, связанные многие-ко-многим, и необходимо быстро находить статьи с определенным тэгом или несколькими тэгами. Необходимо обойтись без 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 секунды, на средненькой домашней машинке.

Как сократить количество правил в ACL (Access Control List)?

Опубликовано в рубрике Статьи 2009.02.19 korchasa – 4 комментов

Главная проблема ACL – ее размер

Из этой проблемы формируются две гадости: во-первых правила долго писать, во-вторых по ним искать сложно. Попробуем пойти нестандартным путем и решить проблему, сделав роли более селективными.
Читать далее »

Лебедь, рак и щука: огранизация работы нескольких программистов на малых и средних проектах

Опубликовано в рубрике Статьи 2008.11.21 korchasa – 2 комментов

Для начала определимся с тем, что мы делаем. Обычно наш продукт состоит из:

  • сервера или нескольких серверов
  • настроек сторонних приложений (http-сервера, СУБД, прочие хранилища данных и утилиты)
  • нашей схемы размещения файлов (фото, видео, и прочий хлам контент)
  • наших кэшей
  • нашей структуры БД
  • нашего кода
  • бессоных ночей

Начнем с конца, пропустив бессоные ночи.

Читать далее »

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

Опубликовано в рубрике Статьи 2008.11.07 korchasa – 11 комментов

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

Читать далее »

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

Опубликовано в рубрике Статьи 2008.04.18 korchasa – 3 комментов

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

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

Опубликовано в рубрике Статьи 2008.04.08 korchasa – 3 комментов

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

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

Опубликовано в рубрике Статьи 2008.03.20 korchasa – 9 комментов


Version 0.4

Ну вот опять!

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

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

Опубликовано в рубрике Статьи 2008.02.22 korchasa – 4 комментов

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

Кратенько:

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

А теперь подробно…
Читать далее »