Pull to refresh
0
0
Кирилл @Halfi

User

Send message

EXPLAIN — Самая мощная команда MySQL

Reading time2 min
Views158K
Самая мощная команда в MySQL – это EXPLAIN. EXPLAIN может в точности рассказать вам, что происходит, когда вы выполняете запрос. Эта информация позволит вам обнаружить медленные запросы и сократить время, затрачиваемое на обработку запроса, что впоследствии может значительно ускорить работу вашего приложения.
Читать дальше →
Total votes 26: ↑22 and ↓4+18
Comments33

Как MySQL оптимизирует ORDER BY, LIMIT и DISTINCT

Reading time16 min
Views15K
Есть задачи, которые в рамках реляционных СУБД не имеют универсальных решений и для того чтобы получить хоть какой-то приемлемый результат, приходится придумывать целый набор костылей, который ты потом гордо называешь “Архитектура”. Не так давно мне как раз встретилась именно такая.

Предположим, имеется некоторые сущности А и Б, связанные между собой по принципу One-to-Many. Количество экземпляров данных сущностей достаточно велико. При отображении сущностей для пользователя необходимо применить ряд независимых критериев, как для сущности А так и для сущности Б. Причем результатом применения критериев являются множества достаточно большой мощности — порядка нескольких миллионов записей. Критерии фильтрации и принцип сортировки задается пользователем. Как (я бы ещё спросил: Зачем им миллионы записей на одном экране? — но говорят надо) показать все это пользователю за время 0 секунд?
Решать такие задачи всегда интересно, но их решение сильно зависит от СУБД, под управлением которой крутится твоя база данных. Если у тебя в рукаве козырной туз в виде Oracle, то есть шанс, что эти костыли он подставит сам. Но спустимся на землю — у нас есть только MySQL, так что придется почитать теорию.
Далее ...
Total votes 115: ↑110 and ↓5+105
Comments18

Блокировки в MySQL

Reading time4 min
Views108K
На хабре часто обсуждаются принципы работы MySQL. Данный хабратопик посвящен механизмам блокировок, используемым в MySQL. Топик поможет начинающим изучать MySQL и, в некоторой степени, опытным хабралюдям.

Механизм блокирования в MySQL


Одновременный доступ нескольких клиентов к хранилищу данных может приводить к ошибкам различного типа. Например, одновременное чтение одним клиентом и запись другим клиентом одной и той же строки таблицы с большой вероятностью приведет к сбою или чтению некорректных данных. Механизмы блокировок позволяют избежать ситуаций одновременного доступа к данным, регламентируя механизм взаимодействия пользователей между собой.
Читать дальше →
Total votes 65: ↑62 and ↓3+59
Comments18

Sypex Geo — быстрое определение города по IP

Reading time3 min
Views117K
В начале года я публиковал статью Определение страны по IP: тестируем скорость алгоритмов, в которой упоминался мой «велосипед» отличающийся высокой скоростью работы. Одним из популярных вопросов стала возможность определения города по IP.

И вот несколько месяцев спустя, проект начинавшийся, как «for fun» перерос в самостоятельный проект.
Открыт отдельный сайт посвященный проекту Sypex Geo, на котором можно скачать свежие версии API и баз данных, а также ознакомиться с документацией.

Для желающих скорее протестировать правильность определения города по IP — вот ссылка на демо-страницу. А под хабракатом, я опишу некоторые технические подробности и приведу результаты небольшого тестирования.
Читать дальше →
Total votes 68: ↑67 and ↓1+66
Comments84

Дайджест интересных новостей и материалов из мира айти за последнюю неделю №11 (16 — 22 июня 2012)

Reading time5 min
Views21K
Предлагаем вашему вниманию очередную подборку с ссылками на новости, интересные материалы и полезные ресурсы.


Читать дальше →
Total votes 61: ↑50 and ↓11+39
Comments7

Использование Symfony2 для создания e-commerce портала с нуля

Reading time5 min
Views14K
Всё началось с того, что мы задумали веб портал для продажи мебели. Это веб портал для продажи предметов мебели и интерьера, и что у меня самого есть множество идей, которые мы должны реализовать в рамках будущего портала. Все эти идеи были похожи на интернет-магазин, но при этом они не совсем укладывались в рамки обычного магазина. Например, товары мы должны показывать в красивых интерьерах реальных квартир — это интересно, а главное удобно для покупателя. Значит, у нас на сайте должны быть отдельно карточки и интерьеров и товаров, которые образовывают структуры. Вот еще задачка: сам портал не имеет своего склада и логистики, а только агрегирует информацию: собирает, анализирует, красиво показывает и генерирует продажи у партнеров. Значит нужно ввести различных поставщиков, показывать различные условия доставки и т.д. Поэтому перед нами встал вопрос: что мы можем использовать, чтобы создавать портал не с нуля, но при этом иметь большую гибкость при кастомизации выбранных решений. Итак, что же у нас получилось.

Выбор LAMP
Вначале мы выбрали общий стек технологий. Здесь было просто: ведь наиболее распространённый выбор технологий для веб-порталов — это LAMP (Linux, Apache, MySQL, PHP). Мы не хотели изобретать велосипед, писать все с нуля, так как это и дорого и долго. Нам нужно было максимально быстро создать портал с использованием каких-либо библиотек/фреймворков, возможно CMS/E-commerce систем. Если LAMP технологии наиболее распространены — то значит, мы сможем найти большое количество различных open-source решений, а из них сможем выбрать что-то подходящее для «фундамента» своего портала.

Готовые E-commerce системы
Как только мы выбрали PHP и все, что с ним связано, мы начали смотреть, что уже есть готового по нашей тематике. Конечно же, мы сразу начали думать про готовые E-commerce системы, например, набирающую популярность Magento. Нашли нескольких партнеров Magento, которые занимаются кастомизацией и внедрением этой системы. Попросили сделать примерную оценку того, во сколько нам обойдется «заточить» Magento под все наши требования, включая оптимизацию быстродействия, с которым у Magento, как оказалось, есть сложности, особенно у бесплатной версии. Наши расчеты показали, что по стоимости работ и дальнейшей поддержке в краткосрочном периоде — это будет даже дороже, чем, если бы мы писали все с нуля на чистом PHP. Мы посмотрели другие E-commerce решения: osCommerce, ZenCart, PrestoShop. Здесь ситуация была примерно такая же, а может даже хуже. Таким образом, мы вернулись в исходную точку поиска.

Фреймовики и библиотеки
Тогда мы решили смотреть в сторону более общих решений: фреймворков и библиотек. Мы решили остановиться на выборе 3-ех наиболее популярных фреймворков: Zend 1.11, Symfony 2 и Yii. Здесь у нас был более технологичный подход к выбору: мы хотели полную поддержку PHP 5.3, причем, желательно, чтобы сам код фреймворка предполагал стиль написания PHP 5.3, а именно как можно больше ООП, ведь нам же это все еще поддерживать потом. От Zend отказались сразу. Он очень монструозный, а нам нужно процентов 20 от его функциональности. К тому же ожидаемый 2.0 тогда был еще в форме идей на сайтах основных разработчиков. Yii был еще очень свежий на тот момент (осень 2011 года), а мы знаем, чем бывают чреваты эти «горячие пирожки» (как показало время – версия Yii 2.0 с полной поддержкой PHP 5.3 пишется до сих пор). И мы решили не рисковать и взять наиболее готовый и стабильный продукт – Symfony 2.

ORM решения
Итак, у нас были выбраны и платформа и фреймворк: LAMP + Symfony2. Нам также нужно было решить проблему с уровнем хранения и представления данных в нашем портале. Наверное, хорошо написать что-то специфическое для себя – это и работает быстрее и меньше кода. Однако основная наша проблема была в том, что мы делали свой продукт, и у нас не было четкой и постоянной спецификации. Улучшения же (читай: частые изменения) в сущностях, их взаимосвязях и бизнес-логике, требовали какого-то гибкого решения, которое мы могли бы быстро изменять и не бояться получить массу regression багов. В данном случае мы пошли хорошо проторенной дорогой. Сейчас большую популярность набирают различные ORM решения. Это не зависит от стека технологий или домена приложения. Посему после недолгих рассуждений мы выбрали ORM Doctrine 2. Тем более что она входит как стандартный модуль в Symfony 2. К тому же, мы понимали, что с ростом объемов данных и взаимосвязей между сущностями при работе на портале, мы перейдем к использованию нереляционной СУБД, например, MongoDB, а с выбранной ORM – Doctrine это также просто реализуется.

Итого у нас получился интересный набор технологий:

LAMP + Symfony 2 + Doctrine 2.

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

Читать дальше →
Total votes 23: ↑11 and ↓12-1
Comments23

Основные ошибки при открытии небольшого Интернет-магазина

Reading time4 min
Views84K
Основные ошибки при открытии небольшого Интернет-магазина
В предыдущей статье мы описали на что нужно обращать внимание при открытии небольшого интернет-магазина. Теперь представляем список основных ошибок при открытии такого интернет-магазина.
Читать дальше →
Total votes 26: ↑22 and ↓4+18
Comments33

На что нужно обращать внимание при открытии небольшого Интернет-магазина

Reading time9 min
Views122K
На что нужно обращать внимание при открытии небольшого Интернет-магазина

В России рынок электронной коммерции растет очень быстро. Для тех, кто не имеет опыта открытия интернет-магазина, но задумывается об этом, описываю ключевые особенности построения данного бизнеса и основные моменты, на которые необходимо обращать внимание.
Большинство рекомендаций посвящены тем, у кого нет бюджета на создание крупного интернет-магазина. Примерная сумма затрат на небольшой магазин от 50 000 до 1 млн. руб.
Читать дальше →
Total votes 15: ↑12 and ↓3+9
Comments6

Поддержка SPDY в nginx

Reading time1 min
Views10K
Разработчики nginx анонсировали бета-версию модуля, реализующего поддержку протокола SPDY draft 2. Модуль сейчас распространяется в виде патча для девелоперской версии nginx 1.3.x (патч: http://nginx.org/patches/spdy/patch.spdy.txt).

Пока что у модуля имеется ряд ограничений (отсутствие поддержки push с сервера, директивы post_action, ограничения пропускной способности, отключён SSL-буфер), но в течение ближайших месяцев планируется его доработать, снять все ограничения и полностью интегрировать в основной код nginx.

Протокол SPDY поддерживается браузерами Firefox и Chrome.
Читать дальше →
Total votes 33: ↑28 and ↓5+23
Comments21

Что делать, если надоела смс-реклама?

Reading time5 min
Views63K
Наверное, многим знакома ситуация, когда раздается звук оповещения, что на мобильный телефон пришло смс-сообщение. И вот, открывая смс-сообщение, мы видим, что какая-то организация прислала нам рекламу. Хорошо, если вы действительно подписывались на данную рассылку.

Но что же делать, если вы не подписывались, и вам регулярно присылают рекламу посредством смс-сообщений?



Первое, что надлежит знать, это то, что любая рекламная рассылка посредством смс-сообщений без вашего предварительного согласия является нарушением ч. 1. ст. 18 Федерального закона от 13.03.2006 N 38-ФЗ «О рекламе»:
Читать дальше →
Total votes 41: ↑40 and ↓1+39
Comments66

Oscar — магазин на Django

Reading time2 min
Views42K
image

Всем тем кто делает сайты с использованием фреймворка Django (и тем-более если частенько приходится делать магазины), не понаслышке знакомы такие проекты как satchmo, lfs, satchless, django-shop, cartridge, plata и другие. Относительно недавно эти ряды пополнил Oscar.
Читать дальше →
Total votes 32: ↑25 and ↓7+18
Comments12

Дайджест интересных новостей и материалов из мира айти за последнюю неделю №9 (2 — 8 июня 2012)

Reading time5 min
Views21K
Предлагаем вашему вниманию очередную подборку с ссылками на новости, интересные материалы и полезные ресурсы.


Читать дальше →
Total votes 49: ↑37 and ↓12+25
Comments13

Просим пользователя сообщать о падении сайта

Reading time2 min
Views1.5K
Не так давно на хабре появилась статья Мониторинг сайта с помощью Google Docs. Суть которого была в том, что в Google Docs создавался документ со скриптом, периодически опрашивающим сайт на предмет доступности и высылающим письмо владельцу в случае падения.

Это интересное решение, но есть некоторые проблемы на местах. У меня кеширование в nginx настроено так, что он может днями выдавать страницы из кеша при упавшем php. Так что опрос главной страницы сайта не предоставляет особенного интереса, в отличии от внутренних страниц.

Читать дальше →
Total votes 10: ↑5 and ↓50
Comments12

Загрузка и инициализация JavaScript

Reading time10 min
Views43K

С появлением мобильного веба наш интернет стал снова плохим, а устройства медленными. 3G, 4G, Wi-Fi… — они, конечно, где-то есть, но когда очень надо, то как правило скорость падает до околомодемной и получается, что наши мобильный устройства «каменного века» попадают в условия современного объема информации. Даже в центре города (правда на 15-м этаже) значок мобильного интернета может показывать волшебную букву Е, намекающую о том, что уж лучше не тратить нервы и потерпеть. Лучше уж использовать нативную версию какого-то веб-сервиса, чем каждый раз ждать, загружать по мегабайту, чтобы отправить короткое сообщение. Нативную версию веб-сервиса... Понятное дело маркетинг, гонка приложений. Однако, же пользователи выбирают нативные веб-приложения, которые работают быстрее, не качают кучу ресурсов, хотя им приходится периодически его обновлять.

Эта статья о том какими путями можно оптимизировать загрузку и инициализацию JavaScript.
Читать дальше →
Total votes 136: ↑132 and ↓4+128
Comments40

Простая кастомизация Checkbox и Radio

Reading time5 min
Views260K

Вместо вступления


Всем доброго времени суток!

Кастомизация элементов форм наверное одно из самых увлекательных занятий в Веб-дизайне. Оправданное ли это занятие решает каждый для себя сам, хотя очевидно, что в наше время дизайнеры и верстальщики все же уделяют этому свои силы и время.

К сожалению, одного только CSS частенько не достаточно, чтобы с легкостью оформить тот или иной элемент формы. Наверное поэтому многие используют штуки вроде Uniform для своих форм. Лично я всегда стараюсь сократить количество Javascript, используемого в подобных целях, поэтому хочу рассказать о совершенно нативном HTML+CSS методе кастомизации радио-кнопок и чекбоксов.

Уверен, что на большая часть специалистов на Хабре, применяют схожие методы, для тех же, кто использует js-библиотеки, вроде Uniform, надеюсь будет полезной эта статья.

Поехали!


Итак, сразу поставим цель: оформить чекбоксы и радио-кнопки, чтобы внешне они были похожи на js-магию Uniform, но сделать это максимально простым, нативным по отношению в HTML и CSS способом, а также избежать применения лишних тегов, сохраняя семантику. Как-то так.
Читать дальше →
Total votes 53: ↑44 and ↓9+35
Comments77

DoS-атака на сайты с собственными капчами

Reading time3 min
Views17K
Можно найти достаточно много сайтов, которые защищены от разного рода внешней нежелательной автоматической активности (ботов) при помощи капч. Причем во многих случаях генерированием этих самых капч занимается тот же сервер, на котором и расположен сайт. Прикрутить такую капчу на сайт очень просто, да и есть бесплатные капча-генерирующие библиотеки (KCAPTCHA, например).

В чем опасность?
Читать дальше →
Total votes 62: ↑53 and ↓9+44
Comments59

Самые простые техники адаптивной верстки

Reading time2 min
Views461K
Сайтов с адаптивной разметкой с каждым месяцем становится все больше, заказчики кроме кроссбраузерности все чаще требуют адаптивность, но многие разработчики не спешат обучаться новым техникам. Но адаптивный дизайн — это просто! В этой статье представлено 5 примеров адаптивной разметки различных элементов веб-страниц.


Читать дальше →
Total votes 168: ↑152 and ↓16+136
Comments51

Адаптивная верстка: CSS&JS фреймворк Skeleton

Reading time4 min
Views68K

В продолжение недавней статьи про адаптивную верстку, хочется более полно раскрыть тему. В реалиях, чаще всего, для адаптивной верстки используют CSS-фреймворки. Об одном из них я хотел бы рассказать, а если точнее – перевести мануал по ее использованию. Называется он Skeleton.
Читать дальше →
Total votes 90: ↑84 and ↓6+78
Comments36

Трогательный дизайн: введение

Reading time5 min
Views32K
Мы любим смартфоны и приложения для них, поэтому любовь эта иногда выливается в текст. Этот текст написан креативный директором REDMADROBOT Максом Десятых и призван помочь начинающим и продолжающим дизайнерам интерфейсов мобильных приложений задуматься над важными вещами. Далее — прямая речь.

image
Readability for iPhone


Дизайн приложений — это куда больше, чем красиво расставленные пиксели. Дизайн — про то, что делает приложение, как делает и какое ощущение от него остается у пользователя.
Читать дальше →
Total votes 70: ↑65 and ↓5+60
Comments14

Дайджест интересных новостей и материалов из мира айти за последнюю неделю

Reading time6 min
Views22K
Уже не первый год в блоге нашей компании мы делаем подборки с ссылками на интересные и полезные, по нашему мнению, материалы. Если в течении недели кто-то что-то пропустил, то в пятницу или на выходных может с лихвой это восполнить. Мы подумали, что такой дайджест может быть интересен и аудитории Хабра, поэтому предлагаем вашему вниманию подборку этой недели.


Читать дальше →
Total votes 42: ↑37 and ↓5+32
Comments16

Information

Rating
Does not participate
Location
Люберцы, Москва и Московская обл., Россия
Works in
Date of birth
Registered
Activity