Удаление данных из коллекции в Mongodb без блокировки

Задача: удалять устаревшие данные из большой коллекции монги. Можно пойти в лоб и удалять так:

var time = new Date().getTime() - 2*24*60*60;
db.data.remove({updating_time: {$lte: time}})

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

Read More

Яндекс.танк — инструмент нагрузочного тестирования

28 июля на я.субботнике был представлен новый инструмент для нагрузочного тестирования Яндекс.танк. Это внутреняя разработка яндекса, которая наконец-то вышла в свет. Видел я этот танк ещё на YaC 2011, когда были соревнования по конфигурированию nginx.

Это консольный инструмент, пока не имеющий графического интерфейса, но дающий довольно полную картину в этой самой консоли.

Read More

Yii: рецепты №2

Продолжаю делится интересным о Yii

Шифрование данных

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

В yii есть отличная обёртка для такого рода операций: CSecurityManager::encrypt() и CSecurityManager::decrypt()

Настраиваем алгоритм, режим и ключ шифрования.

Read More

Yii: рецепты №1

Пакетирование js и css-файлов и использование зависимостей между этими пакетами.

Есть замечательный инструмент для рисования графиков на js — highcharts, но он использует фреймворк jQuery и сам jQuery не подключает. Соответственно, мы создаём наш пакет, где указываем js и css файлы из highcharts и прописываем зависимость от jQuery.

Read More

Редирект при вставки сайта через iframe

Довольно долго бился c запрещением вставки сайта в iframe с указанием белого списка сайтов, которые могу это сделать if (top != self) { var white_list = ['yandex.ru', 'google.com']; var isFriend = false; var hostname = document.referrer.split("/")[2].split(":")[0]; for (var i=0; i < white_list.length; i++) { if (hostname == white_list[i] || hostname == "www." + white_list[i]) { isFriend = true; break; } } if ( ! isFriend ) { window.top.location = window.location.href; } }

Read More

Эмуляция хоткея с участием Alt в midnight commander

После перехода на Mac OS X, не как не мог отвыкнуть от использования хоткеев с участием клавиши Alt. Нашёл наконец-то способ, как съэмулировать хоткеи в сочении с Alt. Например, чтобы сделать действие по Alt+c нужно последовательно нажать Esc и c. «А ларчик просто открывался» ©. Тех, кто не знаком с хоткеями в mc, предлагаю ознакомиться с листингом горячих сочетаний mc.

Read More

Bacula - резервное копирование: быстро, бесплатно, без смс

Не секрет, что админы делятся на 2 типа: кто ещё не делает бэкапы и кто их уже делает. Я совсем недавно перешёл на сторону светлых админов, хочу поделиться реально работающими конфигами. Теперь седина пропала и мои волосы вновь мягкие и шелковистые =) Использовать буду систему под названием bacula. Соответственно всё проверялось и работает под ОС GNU/Debian 6. В интернете видел много довольно полных мануалов, где описывается конфигурация. Я описывать почти ничего не буду, просто приведу рабочие конфиги и скажу что копировать, чтобы начать бэкапить с ещё одного сервера.

Read More

Nginx: общие принципы конфигурации

На днях посмотрел видео с участием Игоря Сысоева - отца русского nginx =) В выступлении Игорь говорит не о мастабировании в привычном для всех понимании (высокая нагрузка), а в плане рекомендаций к написанию конфигурации для nginx, чтобы при росте конфигурации не было проблем с его редактированием. Виды location: Описанные простыми строками (статические) location /dir/ {} - обычный префиксный location location = /dir/ {} - точное совпадение по запросу location ^~ /dir/ {} - префиксный location, но после него не идёт проверка по location на регулярных выражениях Описанные регулярными выражениями location ~ /dir/ {} - с учётом регистра location ~* /dir/ {} - без учёта регистра Именнованные location location @php {} Расположение статических location не играет роли.

Read More

Yii: автодополнение в консоли

Очень не хватало автодополнения комманд при вызове консольных комманд yii, чувствовал какую-то неполноценность yii в bash. На просторах интернета была найдена статья, позволяющая реализовать автодополнение с помощью родной unix-утилиты bash_completion. Если у вас проект находиться под управлением git, то просто добавляем сабмодуль: git submodule add git://github.com/Stamm/yii-console-completion protected/extensions/complete/ Или создайте файл LCompleteCommand.php в protected/extensions/complete/ Теперь подключаем класс в конфигурационном файле для консольного приложения (обычно это console.php): 'commandMap' => array( 'complete' => array( 'class' => 'ext.

Read More

Организация рабочего потока: Phpstorm, Redmine, Changelists

Сегодня я покажу как у меня получается сделать работу удобной с использованием Phpstorm, Redmine, Teamcity. Есть задача в redmine. Я начинаю её выполнять. Всё проверяю локально и коммичу в репозиторий. Выливаю изменения на тестовый сервер. Есть несколько ньюансов. Бывают задачи очень объёмные и/или не очень срочные, которые я делаю в перерывах между задачами с более высокими приоритетами. Или спокойно делаю задачу, но прибегает менеджер с огромными глазами и криками, что сайт выдаёт ошибку, и нужно сделать быстрый hotfix.

Read More