Posts Tagged ‘базы данных’

Bulk update в MySQL

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

Ревизия #2

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

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

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

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

read more »

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

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 секунды, на средненькой домашней машинке.

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

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

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

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

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

read more »

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

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

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

Кратенько:

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

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