Posts Tagged ‘MySQL’

Ответы на вопросы в интервью по веб разработке

Posted in Development, Self Development, Tips And Tricks on August 25th, 2009 by Yaroslav Vorozhko – 3 Comments

Антон Шевчук написал хороший список вопросов для интервью по приему на работу веб разработчиков. Я хочу предложить вам краткие комментарии и советы по каждому из вопросов, надеюсь это поможет вам лучше ориентироваться в мире веб разработки и поможет пройти интервью.

- С какими PHP библиотеками, фреймворками знакомы?
Соискатель должен знать о существовании таких фреймворков как Zend Framework, CakePHP, CodeIgniter или Symfony, и желательно иметь опыт работы с одним из них (список можно расширить – это не так принципиально).

За 4 с лишним лет работы PHP разработчиком я познакомился с тремя из перечисленных фреймворков, и активно использую Zend Framework.
Знание различных фреймворков дает вам понимание и идеи как писать код. Этим путем обязан пройти каждый разработчик. Изучайте и участвуйте в развитии Open Source проектов - это даст вам большой опыт, по сравнении с тем, который вы способны сами получить в аналитическом мышлении. Отвечая на этот вопрос будет уместно рассказать о своих способностях к проектированию и архитектурному мышлению.

- С какими API приходилось работать?
Интересуют Google API, AMF PHP, различные payment gateway, Facebook API, Twitter API и т.д.

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

- Есть ли опыт работы с различными CMS?
Опыт работы не как web-мастера, а как программиста…

Думаю компания использует некоторые CMS в своих проектах. Расскажите подробно про ту CMS с которой вы знакомы или пусть даже про свою само-писанную с которой довелось работать.

- Работал с PHP 4? Назови различия с 5-ой версией.
- Что нового в PHP 5.3?
- Типы данных в PHP?
Этот вопрос на добивание, он часто ставит в тупик, если человек отвечает что их восемь, а потом начинает их перечислять, значит он готовился к собеседованию :)

Все ответы есть в PHP мануале, просто RTFM.

- Что такое сериализация?
- Что самое сложное разрабатывали на PHP?
Этот вопрос может расставить все точки над “i”, но не стоит его задавать в самом начале – это пугает…

Второй вопрос очень хорош, и может быть даже решающим. Я бы рассказал здесь про проектирование, архитектуру и применение OOP в своем последнем проекте или в своем самом интересном проекте. Также, добавил бы про высокую оптимизацию приложения и работу с большими массивами данных. А, если вы работали с какими то «экзотическими», но мега-полезными библиотеками, такими как Sphinx Search, Lucene или может с чем то уникальным в вашей компании, то об этом также стоит рассказать.

- Какие шаблоны проектирования знаешь? Расскажи в чем соль каждого?
- Что есть MVC? Какую роль выполняет каждый из составляющих элементов?

Шаблоны проектирования или design patterns являються не чем иным, как распространенными методами решения типичных задач. Кто внимательно читал книгу «Банды четырех» или «Архитектура корпоративных программных приложений» Фаулера, тот ответит на этот вопрос даже с неким удовольствием.

- С какими web-серверами работал? Apache? Nginx? IIS?
- Можешь описать как можно подробнее, что происходит между тем, как пользователь ввёл в адресной строке http://google.com и тем, как браузер показал страницу?
– Системы контроля версий? SVN? CVS? Git? Что есть branch/trunk/tags?
– Багтрекинг системы?

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

Немного мучаю по БД:
- С какими БД работал? Что такое транзакции, хранимые процедуры, тригеры?
- Коль работал с MySQL то сможешь назвать различия между версиями 4.1, 5.0, 5.1?
- Каковы различия между MyISAM и InnoDB?

Все это есть в мануале MySQL, и как минимум теоретически знания по дополнительным возможностям MySQL у разработчика должны быть.
Типов storage engine не так уже и много и знать про характеристики основных двух надо обязательно.
Если вы имеете более 3 лет опыта работы в веб разработке на php, python, perl, то скорее всего вы начинали с mysql 3.23 и по мере эволюции MySQL представляете различия и возможности новых версий. Поэтому этот вопрос не должен вас сбить с ног.

И для полноты знаний web-разработчика естественно не хватает вопросов о HTML, CSS, Javascript:
- Ваша субъективная оценка своих знаний по CSS по пятибальной шкале?
- Приходилось ли верстать сайт?
- Почему CSS это каскадные таблицы стилей?
- Что здесь написано? Напишите HTML код к которому будет применен данный стиль.

PHP:
  1. #my p.sel:first-line, .main li li a:hover + span
  2. {
  3. color:#f00; /* Что это за цвет? */
  4. }

Уметь читать, понимать и писать CSS это разные вещи. Если вы обладаете первыми двумя навыками, этого достаточно, умеет верстать отлично.

- Ваша субъективная оценка своих знаний по Javascript’у?
- Что самое сложное разрабатывали с использованием Javascript’a?
- С какими Javascript фреймворками работали? Какие плагины использовали? Писали ли плагины, виджеты?
Интересуют jQuery/UI, Prototype/Aculo, MooTools/MochaUI, Dojo Toolkit, ExtJs.
- Каким образом можно реализовать наследование в Javascripte?
- Что такое AJAX и как он работает?
- Что такое JSON? С JSONP сталкивались?

Знания по Javascript важнее знаний CSS, но они взаимосвязаны и поэтому зная одно и не зная другого, вы не сможете делать полноценные скрипты. Javascript фреймворки просто облегчают вашу жизнь, попробуйте выучить основы хотя бы одного и вам будет уже намного проще с Javscript.

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

Список книг обязательных к прочтению, которые помогут вам в веб разработке:

Проверка существования таблицы в базе данных с ZendFramework

Posted in MySQL, Tips And Tricks, ZendFramework on April 19th, 2009 by Yaroslav Vorozhko – Be the first to comment

Существует несколько способов проверить наличие таблицы в базе данных с помощью zendframework.

Первый и самый простой это использовать функцию listTables из Zend_db, но у этой функции есть ограничение, она получает список таблиц только текущей базы данных.

Например вам надо узнать существует ли таблица my_table в подключении к текущей базе данных:

$db = $this->getAdapter();

$tables = $db->listTables();

if (in_array('my_table', $table)){

//todo something with table

}

listTables() возвращает массив имен всех таблиц в текущей базе данных.

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

Пример:

$db = $this->getAdapter();

$sql = "show tables from any_db like 'my_table' ";

if ( $db->fetchOne($sql) ){

//todo something with table

}

fetchOne() вернет строку с именем таблицы, если таблица будет найдена, если ничего не будет найдено, то будет возвращена пустая строка.

С помощью приема с show tables можно проверять на существование одной и более таблиц, что делает этот прием более универсальным.

XtraDB новый Storage Engine от Percona

Posted in Development, MySQL, Performance on December 23rd, 2008 by Yaroslav Vorozhko – 1 Comment

Новый движок XtraDB был выпущен Percona как замена стандартного InnoDB.

XtraDB на 100% совместим с InnoDB, поэтому вы можете использовать его как полную замену InnoDB. XtraDB разрабатывался для улучшения масштабируемости на современном железе, а также включает в себя множество других возможностей и патчей оптимизированных для высоко нагруженных систем.

Percona XtraDB включает всю InnoDB ACID-совместимую архитектуру и расширенную MVCC архитектуру, добавлены новые возможности, более тюнингована, более информативна, более масштабируема на мульти-процессорных системах, и с улучшенной системой использования оперативной памяти.

Что нового в этом движке? Вот список улучшений:

  • INFORMATION_SCHEMA.XTRADB_ENHANCEMENTS. Эта таблица содержит информацию про различия XtraDb и той же версии InnoDb.
  • Улучшения в SHOW INNODB STATUS.
  • Улучшения в InnoDB IO.
  • InnoDB RW-lock fixes. Улучшена масштабируемость для систем с 8+ ядер.
  • Buffer pool fixes
  • innodb_buffer_pool_pages

В общем это сейчас тунингованый InnoDB, только OpenSource. Для комьюнити публичный OpenSource считаю большим плюсом.

Percona сделала и продолжает делать отличную работу по развитию и поддержке MySQL.

Думаю Percona это новая MySQL и уже в скором будущем мы не раз в этом убедимся. :)

Оффициальный анонс XtraDB

Тесты производительность ввода вывода XtraDB

Тесты производительности и нагрузки CPU XtraDb

Документация по XtraDB http://www.percona.com/docs/wiki/percona-xtradb:start

Исходные коды на XtraDB https://launchpad.net/percona-xtradb

Обсуждения XtraDB и остальных разработок Perocona http://groups.google.com/group/percona-dev

Revision Engine – контроль версий данных для MySQL

Posted in MySQL on October 1st, 2008 by Yaroslav Vorozhko – Be the first to comment

Автор: Giuseppe Maxia
Оригинал статьи: A cool idea - Revision engine
Перевод: Ярослав Ворожко

Недавно в списке MySQL internals@list появился анонс, про выпуск нового storage engine. Компания DDengine создала новый движок revision engine, набор встроенных прокси внутри MySQL, которые следят за изменениями данных в вашей базе.

Идея отличная. Вы пишите в свою таблицу, обновляете и удаляете данные, не беспокоясь ни о чем, в то время как revision engine будет сохранять все ваши изменения работая за сценой.

На данный момент revision engine хорошо работает под Linux. Под другие системы пока, что есть проблемы, но это и понятно, так как версия пока еще 0.1.

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

Например:

create table t1 (
 id int not null primary key,
 c char(10)
) engine=revision comment="InnoDB:DOUBLE";
show tables;
+----------------+
| Tables_in_test |
+----------------+
| t1             |
| t1_revision    |
+----------------+
desc t1;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id    | int(11)  | NO   | PRI | NULL    |       |
| c     | char(10) | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+

desc t1_revision;
+--------------------+---------------------+------+-----+
| Field              | Type                | Null | Key |
+--------------------+---------------------+------+-----+
| id                 | int(11)             | NO   | PRI | 
| c                  | char(10)            | YES  |     |
| revision_id        | int(10) unsigned    | NO   | PRI |
| revision_timestamp | timestamp           | NO   |     | 
| revision_deleted   | tinyint(3) unsigned | NO   |     |
+--------------------+---------------------+------+-----+

Ключевое слово "InnoDB:DOUBLE" говорит engine, что надо использовать метод двух таблиц для хранения revision info, в данном случае t1_revision создается автоматически.

Операции над таблицами прозрачны.

insert into t1 (id,c) values (1, 'aaa'), (2, 'bbb');
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

insert into t1 (id, c) values (3, 'ccc'), (4, 'ddd');
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

select * from t1;
+----+------+
| id | c    |
+----+------+
|  1 | aaa  |
|  2 | bbb  |
|  3 | ccc  |
|  4 | ddd  |
+----+------+
4 rows in set (0.00 sec)

select * from t1_revision;
Empty set (0.00 sec)

Ничего необычного. Давайте попробуем, что нибудь поменять.

update t1 set c ='changed' where id = 3;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

select * from t1;
+----+---------+
| id | c       |
+----+---------+
|  1 | aaa     |
|  2 | bbb     |
|  3 | changed |
|  4 | ddd     |
+----+---------+
4 rows in set (0.00 sec)

show variables like '%revision%';
+----------------------+---------+
| Variable_name        | Value   |
+----------------------+---------+
| revision_select_mode | current |
+----------------------+---------+
1 row in set (0.00 sec)

select * from t1_revision;
+----+------+-------------+---------------------+------------------+
| id | c    | revision_id | revision_timestamp  | revision_deleted |
+----+------+-------------+---------------------+------------------+
|  3 | ccc  |           1 | 2008-09-30 05:45:49 |                0 |
+----+------+-------------+---------------------+------------------+
1 row in set (0.00 sec)

delete from t1 where id = 2;
Query OK, 1 row affected (0.01 sec)

select * from t1_revision;
+----+------+-------------+---------------------+------------------+
| id | c    | revision_id | revision_timestamp  | revision_deleted |
+----+------+-------------+---------------------+------------------+
|  3 | ccc  |           1 | 2008-09-30 05:45:49 |                0 |
+----+------+-------------+---------------------+------------------+
1 row in set (0.00 sec)

set revision_select_mode = 'deleted';
Query OK, 0 rows affected (0.01 sec)

select * from t1_revision;
+----+------+-------------+---------------------+------------------+
| id | c    | revision_id | revision_timestamp  | revision_deleted |
+----+------+-------------+---------------------+------------------+
|  2 | bbb  |           1 | 2008-09-30 05:47:14 |                1 |
+----+------+-------------+---------------------+------------------+
1 row in set (0.00 sec)

select * from t1;
+----+---------+
| id | c       |
+----+---------+
|  1 | aaa     |
|  3 | changed |
|  4 | ddd     |
+----+---------+
3 rows in set (0.00 sec)

Переменная сессии revision_select_mode , переключает режим отображения данных в revision engine.

На данный момент, механизма отката изменений нет (или есть, но не документирован), но идея отличная, и я думаю этот engine будет очень полезен в будущем.

Перевод не оригинальный, текст немного видоизменен, без потери смысла статьи передаваемого Автором текста.

MySQL Row Format Tuning

Posted in MySQL, Performance on March 18th, 2008 by Yaroslav Vorozhko – 1 Comment

При создании или модифицировании таблиц используя MyISAM, вы можете запросить MySQL хранить строки в фиксированном или динамическом формате. Если таблица не содержит BLOB и TEXT полей, то фиксированный формат выбирается по умолчанию, который автоматически конвертирует VARCHAR в CHAR. Иначе, если выбрать динамический формат, то MySQL конвертирует все колонки из типа CHAR в VARCHAR.

Для MySQL, фиксированный формат легче в доступе, кешировании и обновлении информации. Также этот формат менее подвержен порче данных. Если дисковое пространство не является критическим, то фиксированный формат будет хорошим выбором.

Динамический формат использует меньше дискового пространства, но более подвержен риску фрагментации и/или порче данных.

Но давайте сначала посмотрим, на тесты и потом сделаем окончательное заключение.

read more »