Сравнение MySQL c PostgreSQL


Приведенное ниже сравнение проводилось в MySQL AB. Я старался быть как можно более точными и объективными, однако, зная MySQL, я не мог похвастаться таким же знанием возможностей PostgreSQL, поэтому в чем-то мог и ошибиться.

Прежде всего хотелось бы отметить, что PostgreSQL и MySQL являются широко используемыми программными продуктами, которые разрабатывались с разными целями (хотя создатели обоих и стремятся довести их до полной совместимости со стандартом ANSI SQL). Это значит, что для решения одних задач больше подходит MySQL, для других же - PostgreSQL. Выбирая СУБД, проверьте, соответствуют ли ее возможности требованиям, предъявляемым решаемой задачей. Если требуется максимальная скорость работы, лучше всего, вероятно, будет остановить свой выбор на MySQL Server. Если же вам необходимы дополнительные возможности, имеющиеся только у PostgreSQL, этой СУБД и стоит пользоваться.

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

Большая же часть кода PostgreSQL написана множеством разработчиков, никак друг с другом не связанных. Не так давно разработчики PostgreSQL объявили о том, что у их команды наконец-то хватило времени на просмотр всего кода, вошедшего в состав очередной версии PostgreSQL.

Сравнение возможностей MySQL и PostgreSQL

MySQL обладает следующими преимуществами перед PostgreSQL:

· MySQL обычно намного превосходит PostgreSQL по скорости работы. Кроме того, в MySQL 4.0 реализован кэш запросов. Он позволяет во много раз увеличить скорость обработки запросов для сайтов, на которых преобладают неоднократно повторяющиеся запросы на чтение.

· По количеству пользователей MySQL также намного превосходит PostgreSQL. Поэтому код тестируется значительно более придирчиво и опытным путем доказана большая его надежность, нежели у PostgreSQL. MySQL чаще, чем PostgreSQL, используется на производстве, в основном потому, что компания MySQL AB (ранее - TCX DataKonsult AB) предоставляет высококачественную коммерческую техническую поддержку MySQL с момента появления этой системы на рынке, а у PostgreSQL до самого последнего времени никакой поддержки не было.

· MySQL работает в среде Windows лучше, чем PostgreSQL. MySQL Server запускается как настоящее (родное) Windows-приложение (в NT/2000/XP - сервис), в то время как PostgreSQL запускается в среде эмуляции, Cygwin. Доводилось слышать о недостаточной стабильности работы PostgreSQL в среде Windows, но самостоятельно эти сведения до сих пор проверить не мог.

· MySQL оснащен большим количеством API для других языков и поддерживается большим количеством существующих программ, нежели PostgreSQL.

· MySQL работает на высоконадежных промышленных системах 24/7 (включенных 24 часа в сутки 7 дней в неделю). В большинстве случаев никаких "чисток" в MySQL производить не требуется. PostgreSQL же пока что не может работать в таких системах, так как иногда приходится запускать VACUUM для освобождения занятого последствиями работы команд UPDATE и DELETE пространства и проводить статистический анализ, необходимый для достижения максимальной производительности PostgreSQL. Запускать VACUUM необходимо и после каждого добавления к таблице нескольких столбцов. На напряженно работающих системах VACUUM нужно запускать более часто, в худших случаях - по несколько раз в день. А ведь во время работы VACUUM (а ее работа может продолжаться часы, если база данных достаточно велика) база практически "мертва". Впрочем, в PostgreSQL версии 7.2 выполнение основных функций этой программы больше не приводит к блокировке базы, и пользователи могут продолжать нормально работать с ней. Новая команда VACUUM FULL берется за дело более серьезно: она, как и в старых версиях, блокирует таблицу и сжимает копию таблицы на диске.

· Книг о MySQL вышло значительно больше, нежели о PostgreSQL. Книги о MySQL выпустили издательства O"Reilly, SAMS, Que и New Riders. Все возможности MySQL детально описаны в документации, так как это является обязательным условием включения новых возможностей в код.

· MySQL обладает значительно более мощной реализацией ALTER TABLE.

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

· MySQL может работать с двумя поддерживающими транзакции обработчиками таблиц, а именно - InnoDB и BerkeleyDB. Так как все системы поддержки транзакций в разных условиях работают по-разному, это дает разработчику возможность найти наилучшее решение для условий, в которых будет работать его система. See section 7 Типы таблиц MySQL.

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

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

· В MySQL реализован полнотекстовый поиск.

· Имеется возможность работы с несколькими базами через одно соединение(разумеется, в зависимости от привилегий пользователя).

· Система MySQL с самого начала разрабатывалась в расчете на многопоточность, а PostgreSQL использует процессы. Переключение контекстов и доступ к общим данным несколькими потоками осуществляется значительно быстрее, нежели отдельными процессами. Таким образом MySQL Server в многопользовательских приложениях получает неплохое преимущество в производительности, а кроме того, таким образом MySQL Server удается значительно эффективней пользоваться преимуществами, предоставляемыми симметричными мультипроцессорными системами (SMP).

· В MySQL реализована значительно более мощная система привилегий, нежели в PostgreSQL. В то время как PostgreSQL обеспечивает лишь привилегии INSERT, SELECT и UPDATE/DELETE над базой или таблицей, MySQL предоставляет возможность определения полного набора разнообразных привилегий на уровне базы, таблицы и столбца. Кроме того, MySQL позволяет задавать привилегии для комбинаций хост/пользователь.

· В MySQL используется протокол связи между клиентом и сервером со сжатием данных, что увеличивает производительность системы в условиях низкоскоростных каналов связи.

· Все типы таблиц в MySQL (кроме InnoDB) реализованы в виде файлов (по одной таблице в файле), что значительно облегчает создание резервных копий, перенос, удаление и даже создание символьных ссылок между базами данных и таблицами, даже если сервер находится в нерабочем состоянии.

· Обновление (апгрейд) MySQL проходит совершенно "безболезненно". При модернизации MySQL нет нужды в копировании/восстановлении данных, что приходится делать при установке большинства обновлений PostgreSQL.


Ниже перечислены преимущества PostgreSQL по сравнению с MySQL на сегодняшний день.

Возможность Версия MySQL
Подзапросы 4.1
Внешние ключи 5.0 (3.23 с InnoDB)
Представления 5.0
Хранимые процедуры 5.0
Триггеры 5.0
Объединения 4.0
Полные связи 4.1
Ограничения 4.1 или 5.0
Курсоры 4.1 или 5.0
R-деревья 4.1 (для таблиц MyISAM)
Наследование таблиц Не планируется
Расширяемая система типов Не планируется


Другие причины, по которым можно предпочесть PostgreSQL:

· В некоторых случаях PostgreSQL оказывается ближе к ANSI SQL.

· Работу PostgreSQL можно ускорить, выполняя код в виде хранимых процедур.

· При хранении географических данных R-деревья дают PostgreSQL преимущество перед MySQL (примечание: в MySQL версии 4.1 для таблиц MyISAM реализована поддержка R-деревьев).

· Команда разработчиков PostgreSQL, пишущих код для сервера, больше.

Недостатки PostgreSQL по сравнению с MySQL:

· VACUUM затрудняет использование PostgreSQL в постоянно работающих системах.

· Наличие только транзакционных таблиц.

· Значительно более медленная работа команд INSERT, DELETE и UPDATE.

2.3. Заключение:

Единственные существующие на сегодня тесты, позволяющие сравнить MySQL Server и PostgreSQL, которые любой может загрузить и запустить, - это тесты из комплекта MySQL. И поэтому свой выбор я останавливаю на MySQL

Глава 3.

Разработка инфологической и даталогической моделей базы данных. Разработка архитектуры портала, обеспечивающего доступ к базе данных.

Сайт состоит из десяти главных php файлов, девяти php блоков и одного файла стилей СSS.

На первой странице «index.php» находится о назначении самого сайта, и немного информации о авторе. С главной страницы сайта можно попасть на странички с дополнительной информацией. Так же с главной странички можно попасть на страницу с поиском нужного нам учебного предмета .

3.1 Состав страниц:

1). Файл «index.php» – эта страница является главной и стартовой, она размечена с помощью таблицы созданной с помощью тега «table», состоящая из двух строк. Первая представляет собой «Шапку КИС», этот блок всегда подключен ко всем другим страницам, в которой иметься фон, который добавлен с помощью «<td><img scr=”img/header.jpg”>». Вторая ячейка объединяет в себе три столбца, которые выведены в блоки: «lefttd #.php», «righttd #.php», где # номер блока, подключаемого при определенном действии и центральный блок, в котором выводиться информация. Также существует еще одна таблица, из трех столбцов, которая выведена в блок «nav.php», т.е. верхняя панель навигации.

2). Файл «view_idHobby.php» – страница содержит описание, выводимая из БД об увлечениях моей группы, при помощи оператора mysql_query(“SELECT * From Hobbys WHERE id = ‘$idHobby’”,$db). В левом блоке «lefttd.php», есть возможность выбора одного из 4-х наших увлечений, аналогично, как и в предыдущем случае. В правом же блоке «righttd2.php», выводиться информация из БД, с перечислением тех студентов, которые увлекаются этим хобби mysql_query(“SELECT Foto_mini, St_id, St_FIO, Work, Tel, ExamBook From Student WHERE idHobby = ‘$idHobby’”,$db). Причем при нажатии на фото любого из студентов, пользователь попадает на страницу «view_ррl.php», которая содержит характеристику каждого из студентов, это достигнуто, способом прикрепления ссылки в картинку <a href=’view_ppl.php?id=%s’>, где %s – переменная, которая меняется в зависимости от id студента.

3). Файл «view_ррl.php» – страница содержит характеристику каждого из студентов, это достигнуто, способом запроса из БД из определенной таблицы mysql_query (“SELECT *FROM Student WHERE St_id=’$id’”)

4). Файл «view_cem.php» – страница содержит список пройденных учебных предметов, по которым есть информация в электронном виде. В левом блоке «lefttd.php», есть возможность выбора одного из пройденных семестров. Информация выводиться с помощью mysql_query (“SELECT id, title, description, date, author FROM Lessons WHERE cem=’$cem’”). Причем при выводе на сайт, поле «title», выступает не только в качестве, названия предмета, а так же является ссылкой на страницу «view_post.php», что достигнуто при помощи добавления якоря ссылки <a href = ‘view_post.php?id=%s’>, при выводе информации из БД.

5). Файл «view_post.php» – страница содержит название самого предмета, фотографию преподавателя, небольшую информацию о преподавателе (взятую с сайта mpei.ru), автора этой информации и дату публикации. Информация выводиться с помощью mysql_query (“SELECT title, text, author, date FROM Lessons WHERE id=’$id’”). Одновременно с этим в правом блоке «righttd4.php», выводиться информация из БД, с перечислением тех видов занятий (лабы, семинары, лекции), по которым можно скачать учебную информацию mysql_query(“SELECT description, fotoLec, fotoLab, fotoCem, From Lessons WHERE id = ‘$id’”,$db). При нажатии на фото лекций\лабораторных\семенаров, пользователь попадает на файловый обменник, где будет предложено скачать нужную информацию. Это достигнуто способом, прикрепления ссылки в картинку, в самой базе данных <a href=”http://file.qip.ru/file/sdtegDF/Лабы.html”><img scr=”files/03042011/lab.jpg”></a>

6). Файл «view_search.php» – страница, которая генерируется в том случае, когда было задействовано поле поиска и нажата кнопка «search!» . Это было достигнуто, при помощи mysql_query (“SELECT * FROM Lessons WHERE MATCH(text) AGAINST (‘$search’)”, $db) , из этого можно заметить, что поиск осуществляется, только по одному полю определенной таблицы. Так же в систему поиска включено ограничение на минимальную длину ввода и проверку пустое поле или нет: if (empty($search) or strlen ($search)<4){exit (“Поисковый запрос не введен, либо короче 4-х символов”)}

7). Файл «news.php» – страница на которую выводятся все новости, начиная с самых ранних и заканчивая последними. Достигнуто при помощи: mysql_query (“SELECT * FROM News ”, $db). Справа же подключается блок «righttd5». В котором все эти новости сгруппированы по годам и месяцам, при нажатии на дату, будет сгенерирована страница «view_date.php», в которой будут присутствовать новости по нажатой дате. Что достигнуто при помощи: mysql_query (“SELECT DISTINCT left(date, 7) AS month FROM News ORDER BY month DESC “, $db). Вывод в файл «view_date.php» printf (<href=’view_date.php?date=%s’>)

8). Файл «view_date.php» – страница, которая генерируется при выборке новостей по месяцу из правого блока «righttd5». На ней пользователь может увидеть, выведенные новости по месяцу, которому он выбрал. Достигнуто с помощью:

$date_title = $date;

$date_begin = $date;

$date++; //+ Месяц

$date_end = $date;

$date_begin = $date_begin. "-01";

$date_end = $date_end. "-01";

9). Файл «secret.php» – при переходе на эту страницу, посетитель видит предупреждение, что если он хочет попасть на закрытую страницу «view_events.php», он должны ввести код доступа в поле ввода, и так же нажать на кнопку: Для стимулирования интереса, попасть на эту страницу, под кнопкой, находятся краткое описание новостей, что достигнуто с помощью: mysql_query (“SELECT mini_foto, name, description, foto\autor FROM Events WHERE secret = 1”, $db), Ввод информации на средний блок :

printf (…. <a href=’#’>%s(Доступ закрыт)</a>

<p>Краткое описание: %s</p>

<p>Автор\фотограф: %s </p> ...).

Полные же отчеты с фотографиями о мероприятиях можно прочесть и увидеть, только после перехода на «view_events.php», введя код. Осуществлено с помощью:

if (!isset($code) or $code !=$prcode)

If (mysql_num_rows ($result) > 0)

($myrow = mysql_fetch_array ($result);

Do {printf (… a href=’viev_events.php?id=%s’ …)});

После прохождения цикла, и при правильном вводе кода, попадаем на «view_events.php»

10). Файл «view_events.php» – страница открывается, только после ввода кода, на странице «secret.php». Сама же работает и выкачивает информацию из БД, аналогично файлу «view_post.php».

Защита в php файлах.

В Файлах : «view_idHobby.php», «view_post.php» , «view_ррl.php», «view_events.php», «view_cem.php», «view_date.php» , «view_search.php», осуществляется защита и проверка глобальных переменных с помощью:

if (isset($_GET['id'])) {$id = $_GET ['id']; } //защита глобальных переменных

if (!isset($id)) {$id = 1;} //защита от загрузки без котегории

/*Проверяем, являеться ли переменная числом*/

if (!preg_match("|^[\d]+$|", $id)) {

exit("<p>Неверный формат запроса! Проверьте правльность ссылки!</p>");}

$result = mysql_query("SELECT поле FROM таблица WHERE id='$id'",$db);

if (!result)

{echo "<p>Запрос на выборку данных из БД не прошел. Напишите об этом админу [email protected]<br><strong>Код ошибки:</strong></p>";

exit (mysql_error());}

if (mysql_num_rows($result) > 0)

{$myrow = mysql_fetch_array($result);}

else

{echo "<p>Информация по запросу не может быть извелечена в таблице нет записей.</p>";

exit ();}

Также в файле «view_search.php» существует защита от взлома БД. Осуществлено с помощью :

if (isset($submit_s)) //Проверка, прошли по кнопке, или вбив в ручную. Если в ручную, то выводиться "Вы перешли на страницу без нужных параметров"

{if (empty($search) or strlen($search) < 4) //Проверка пустое или меньше 4-х символов поле для поиска в момент нажатия на кнопку.

{exit ("<p>Поисковый запрос не введен, либо он короче 4-х символов</p>");}

$search = trim ($search); //Обрезка от крайних "случачйных" пробелов

$search = stripslashes ($search); //Удаляет символ "/" в поле ввода

$search = htmlspecialchars ($search); //защита от использования, исполняемых кодов, для того чтоб не влезли в БД.(замена на Мьмоники)}

else

{exit ("<p>Вы перешли на страницу без нужных параметров.</p>");}

Состав базы данных.

В данном документе содержатся ЕR-модель, UML-модель и так же описана структура всех таблиц, входящих в базу КИС.

Графическая ЕR-модель

Сравнение MySQL c PostgreSQL - student2.ru

Функциональные зависимости

ПоставщикиСклад

idПоставщика ->Телефон idТовара->Кол-во

idПоставщика ->Факс idТовара->Стоимость

idПоставщика ->Почта idТовара->Фото

idПоставщика ->Адрес idТовара->Описание

idПоставщика ->ФИО

ИнформаияМесто_службы

idИнформации ->ТелРабочий idМеста->Дата приема

idИнформации ->ТелЛичный idМеста-> Дислокация

idИнформации ->ДеньРождения idМеста-> Должность

idИнформации ->Факс idМеста-> Выслуга

idИнформации -> Образо idМеста->Отдел

idИнформации -> Адрес idМеста->Фото

НакладнаяСотрудники

idНакладной -> Дата idСотрудника-> Фамилия

idНакладной -> idПоставщика idСотрудника-> Имя

idНакладной -> idТовара idСотрудника-> Отчество

idНакладной -> idСотрудника idСотрудника-> Фото

idСотрудника->idМеста

idСотрудника->idИнформации

Рем.Техники

id Техники -> Название

id Техники -> ДатаПривоза

id Техники -> №Инвентаризационный

id Техники ->Фото

id Техники ->ПричинаПоломки

id Техники ->ДатаКонца

id Техники ->idСотрудника

UML-модель

Сравнение MySQL c PostgreSQL - student2.ru

Сравнение MySQL c PostgreSQL - student2.ru

ТАБЛИЦЫ

Главные таблицы:

Таблица Поставщики.

Данные о поставщиках.

Сравнение MySQL c PostgreSQL - student2.ru

idПоставщика -порядковыйномер (выставляется автоматически)

Телефон –телефон поставщика

Факс –факс поставщика

Почта –электронная почта поставщика

Адрес –юридический адрес поставщика

ФИО –Фио юр.\физ. поставщика

Таблица Склад

Данные о складе.

Сравнение MySQL c PostgreSQL - student2.ru

idТовара -порядковыйномер (выставляется автоматически)

Кол-во –кол-во товара на складе

Стоимость –закупочная стоимость товара

Фото –фото товара

Описание –описание товара

Таблица Информация

Данные информации.

Сравнение MySQL c PostgreSQL - student2.ru

idИнформации –порядковыйномер (выставляется автоматически)

ТелРабочий –рабочий телефонный номер сотрудника

ТелЛичный –личный телефонный номер сотрудника

ДеньРождения – День Рождения сотрудника

Факс – рабочий номер факса сотрудника

Образование –какое образование имеет сотрудник

Адрес –адрес прописки сотрудника

4. Таблица Место_Службы

Данные о месте службы.

Сравнение MySQL c PostgreSQL - student2.ru

idМеста - порядковый номер (выставляется автоматически)

Дата приема– дата приема на службу

Дислокация – адрес прохождения службы

Должность - занимаемая должность на месте службы

Выслуга- срок службы

Отдел - название отдела

Фото - Фото сотрудника

Таблица Накладная

Данные о накладных

Сравнение MySQL c PostgreSQL - student2.ru

idНакладной –порядковыйномер (выставляется автоматически)

Дата –дата оформления накладной

idПоставщика -порядковый номер поставщика (связь с таблицей Поставщики)

idТовара - порядковый номер товара (связь с таблицей Слад)

idСотрудника - порядковый номер сотрудника (связь с таблицей сотрудники)

Таблица Сотрудники

Содержит данные о сотрудниках

Сравнение MySQL c PostgreSQL - student2.ru

idСотрудника –порядковыйномер (выставляется автоматически)

Фамилия –Фамилия сотрудника

Имя –Имя сотрудника

Отчество - Отчество сотрудника

Фото - фото сотрудника

idМеста - порядковый номер (связь с таблицей Место_службы)

idИнформации –порядковыйномер (связь с таблицей Информация)

Таблица Рем.Техники

Содержит данные о ремонте техники.

Сравнение MySQL c PostgreSQL - student2.ru

id Техники –порядковыйномер (выставляется автоматически)

Название –полное название ремонтируемой техники

ДатаПривоза –дата привоза техники на ремонт

№Инвентаризационный - Инвентаризационный номер ремонтируемой техники

Фото -фото ремонтируемой техники

ПричинаПоломки -Причина поломки ремонтируемой техники(со слов)

ДатаКонца -приблизительное время окончания ремонта

idСотрудника - порядковый номер сотрудника (связь с таблицей сотрудники)

Связующие таблицы:

Содержит пароль для входа в закрытый раздел

Сравнение MySQL c PostgreSQL - student2.ru

Id –порядковыйномер (выставляется автоматически)

Str –длина кода доступа

Prcode –код доступа

Заключение

В ходе дипломной работы, были решены поставленные задачи.

1. Была собранна и анализирована информация обо всех доступных и существующих СУБД, а также языков разработки Web-приложений.

2. Были проанализированы Web-серверы, и возможность доступа к БД через эти сервера.

3. На основе этих анализов, был выбран наиболее оптимальный способ решения поставленной задачи, что привело к разработке и реализации баз данных с доступом к БД через Web-приложение.

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

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

6. Так же благодаря КИС, есть возможность связаться с любым служащим для уточнения интересующей информации.

Наши рекомендации