Что быстрее mysql или postgresql

SQLite, MySQL и PostgreSQL: сравниваем популярные реляционные СУБД

Реляционные базы данных используются уже очень давно. Они стали популярными благодаря успешным реализациям реляционных моделей в системах управления, оказавшимся весьма удобными для работы с данными. В этой статье мы сравним три самые популярные реляционные системы управления базами данных (РСУБД): SQLite, MySQL и PostgreSQL.

Системы управления базами данных

Базы данных — это логически смоделированные хранилища любых типов данных. Каждая база данных, не являющаяся бессхемной, следует модели, которая задаёт определённую структуру обработки данных. СУБД — это приложения (или библиотеки), управляющие базами данных различных форм, размеров и типов.

Чтобы лучше разобраться в СУБД, ознакомьтесь с этой статьёй.

Реляционные системы управления базами данных

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

СУБД такого типа используют структуры (таблицы) для хранения и работы с данными. Каждый столбец (атрибут) содержит свой тип информации. Каждая запись в базе данных, обладающая уникальным ключом, передаётся в строку таблицы, и её атрибуты отображаются в столбцах таблицы.

Отношения и типы данных

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

Каждый элемент, формирующий запись, должен удовлетворять определённому типу данных (целое число, дата и т.д.). Различные РСУБД используют разные типы данные, которые не всегда взаимозаменяемы.

Такого рода ограничения обычны для реляционных баз данных. Фактически, они и формируют суть отношений.

Популярные РСУБД

В этой статье мы расскажем о 3 наиболее популярных РСУБД:

SQLite

SQLite — это изумительная библиотека, встраиваемая в приложение, которое её использует. Будучи файловой БД, она предоставляет отличный набор инструментов для более простой (в сравнении с серверными БД) обработки любых видов данных.

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

Поддерживаемые типы данных

Note: для получения более подробной информации ознакомьтесь с документацией.

Преимущества

Недостатки

Когда стоит использовать SQLite

Когда не стоит использовать SQLite

MySQL

MySQL — это самая популярная из всех крупных серверных БД. Разобраться в ней очень просто, да и в сети о ней можно найти большое количество информации. Хотя MySQL и не пытается полностью реализовать SQL-стандарты, она предлагает широкий функционал. Приложения общаются с базой данных через процесс-демон.

Поддерживаемые типы данных

Преимущества

Недостатки

Когда стоит использовать MySQL

Когда не стоит использовать MySQL

PostgreSQL

PostgreSQL — это самая продвинутая РСУБД, ориентирующаяся в первую очередь на полное соответствие стандартам и расширяемость. PostgreSQL, или Postgres, пытается полностью соответствовать SQL-стандартам ANSI/ISO.

PostgreSQL отличается от других РСУБД тем, что обладает объектно-ориентированным функционалом, в том числе полной поддержкой концепта ACID (Atomicity, Consistency, Isolation, Durability).

Будучи основанным на мощной технологии Postgres отлично справляется с одновременной обработкой нескольких заданий. Поддержка конкурентности реализована с использованием MVCC (Multiversion Concurrency Control), что также обеспечивает совместимость с ACID.

Хотя эта РСУБД не так популярна, как MySQL, существует много сторонних инструментов и библиотек для облегчения работы с PostgreSQL.

Источник

Национальная библиотека им. Н. Э. Баумана
Bauman National Library

Персональные инструменты

Сравнение производительности MySQL vs PostgreSQL

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

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

Содержание

Основные характеристики баз данных

MySQL — свободная реляционная система управления базами данных. Разработку и поддержку MySQL осуществляет корпорация Oracle, получившая права на торговую марку вместе с поглощённой Sun Microsystems. [1]

PostgreSQL (произносится «Пост-Грэс-Кью-Эл») — свободная объектно-реляционная система управления базами данных (ORDBMS) (по-русски ОРСУБД или просто СУБД) основанная на POSTGRES, версии 4.2, которая была разработана в Научном Компьютерном Департаменте Беркли Калифорнийского Университета. [2]

Сравнение MySQL и PostgreSQL [3]

ПараметрыMySQLPostgreSQL
Краткое описаниеШироко используемая свободная реляционная система управления базами данныхШироко используемая свободная реляционная система управления базами данных
Основная модель хранения данныхРеляционная база данныхРеляционная база данных
Дополнительная модель хранения данныхБаза данных типа Key/Value, документно-ориентированная база данныхБаза данных типа Key/Value, документно-ориентированная база данных
Вебсайтwww.mysql.comwww.postgresql.org
Документацияdev.mysql.com/­docwww.postgresql.org/­docs/­manuals
РазработчикOraclePostgreSQL Global Development Group
Дата релиза19951996
Текущая версия8.0.12, Июль 201810.5, Август 2018
Лицензия Открытое программное обеспечение Открытое программное обеспечение
ОблачноеНетНет
Язык реализации С++, CC
Поддерживаемые операционные системы сервераFreeBSD, Linux, Solaris, OS X, WindowsFreeBSD, Linux, Solaris, OS X, Windows, NetBSD, OpenBSD, HP-UX, Unix
Схема данныхДаДа
ТипизацияДаДа
Поддержка XMLДаДа
Поддержка вторичных индексовДаДа
SQLДаДа
API и другие методы доступаПроприентарное нативное API, ADO.NET, JDBC, ODBCНативная С библиотека, потоковое API для больших объектов, ADO.NET, JDBC, ODBC
Поддерживаемые языки программированияAda, C, C#, С++, D, Delphi, Eiffel, Erlang, Haskell, Java, JavaScript (Node.js), Objective-C, OCaml, Perl, PHP, Python, Ruby, Scheme, Tcl.Net, C, С++, Delphi, Java, Perl, PHP, Python, Tcl
Язык написания скриптов на стороне сервераДаФункции определенные пользователем
ТриггерыДаДа
Методы разбиенияГоризонтальное разбиение, шардинг с MySQL Cluster или MySQL Fabricдекларативное разбиение (по диапазону или списку) начиная с PostgerSQL 10.0
Методы репликацийMaster-Master, Master-SlaveMaster-Slave
MapReduceНетНет
Концепции согласованияНемедленное согласованиеНемедленное согласованиее
ПараллелизмДаДа
Возможность хранения только в памятиДаНет
Контроль доступа пользователейКонцепт пользователей с детальной авторизациейДетальные права доступа в соответствии с SQL стандартом

Критерии сравнения

Мы сравним скорость выборки из одной таблицы, обновления одной таблицы, скорость сортировки (ORDER BY) и группировки (GROUP BY) при выборке данных из одной таблицы, а также скорость вставки в таблицу и внутреннего объединения двух таблиц.

Выбор структуры таблиц и обоснование

Мы создадим две таблицы: first_table(rand_num int, some_data varchar(40)) и second_table(rand_num int, rand_group int, some_data varchar(40)). Атрибут some_data нам нужен просто для того, чтобы увеличить объем записи на диск, так что в него можно записывать любой текст. Атрибуты rand_num обеих таблиц будут содержать в себе случайные значения, так же как и атрибут rand_group второй таблицы. Тесты будут проводиться следующим образом:

1) сначала мы будем просто добавлять строки (до 400000 строк) в первую таблицу и замерять время добавления.

Когда же мы будем заполнять вторую таблицу (до 400000 строк), то каждый раз после добавления фиксированного числа строк (40000) мы будем проводить следующие измерения: 1) скорость внутреннего объединения первой и второй таблицы по атрибуту rand_num

2) скорость выборки всех данных из второй таблицы, сортируя их по атрибуту rand_num

3) скорость подсчета числа строк второй таблицы, принадлежащих одной группе (rand_group)

4) скорость выборки тех строк из первой таблицы, атрибут rand_num которых совпадает с атрибутом rand_num какой-либо строки второй таблицы

5) Скорость обновления атрибута some_data в строках первой таблицы. Но обновлять мы будем не все строки, а только те, которые удовлетворяют условию, описанному в п.4.

Все тесты мы проведем дважды: с индексированием атрибутов rand_num обеих таблиц и без индексирования. Отметим, что в данной серии тестов нас интересует производительность «из коробки», то есть сразу после установки обеих СУБД.

Результаты

С индексацией

Что быстрее mysql или postgresql. Смотреть фото Что быстрее mysql или postgresql. Смотреть картинку Что быстрее mysql или postgresql. Картинка про Что быстрее mysql или postgresql. Фото Что быстрее mysql или postgresql

Добавление. postgresql оказался быстрее с большим отрывом в 3,46 раза.

Что быстрее mysql или postgresql. Смотреть фото Что быстрее mysql или postgresql. Смотреть картинку Что быстрее mysql или postgresql. Картинка про Что быстрее mysql или postgresql. Фото Что быстрее mysql или postgresql

Внутреннее объединение. На небольшом количестве строк postgresql отрывается от mysql незначительно (в районе 25 процентов), но с увеличением размера второй таблицы преимущество postgresql становится более очевидным. При достижении второй таблицей максимального размера скорость объединения в postgresql уже в 2.8 раз выше. В среднем postgresql оказалась быстрее в 1,66 раза.

Что быстрее mysql или postgresql. Смотреть фото Что быстрее mysql или postgresql. Смотреть картинку Что быстрее mysql или postgresql. Картинка про Что быстрее mysql или postgresql. Фото Что быстрее mysql или postgresql

Сортировка. Postgresql быстрее на 60-100 процентов в зависимости от размера второй таблицы. В среднем postgresql быстрее в 2,04 раза.

Что быстрее mysql или postgresql. Смотреть фото Что быстрее mysql или postgresql. Смотреть картинку Что быстрее mysql или postgresql. Картинка про Что быстрее mysql или postgresql. Фото Что быстрее mysql или postgresql

Группировка. Сначала postgresql была быстрее в 4 раза, но с ростом второй таблицы преимущество сократилось до 1.6 раз. В среднем postgresql оказалась быстрее в 2,32 раза

Что быстрее mysql или postgresql. Смотреть фото Что быстрее mysql или postgresql. Смотреть картинку Что быстрее mysql или postgresql. Картинка про Что быстрее mysql или postgresql. Фото Что быстрее mysql или postgresql

Выборка. Postgresql справляется в среднем в 1,97 раза лучше.

Что быстрее mysql или postgresql. Смотреть фото Что быстрее mysql или postgresql. Смотреть картинку Что быстрее mysql или postgresql. Картинка про Что быстрее mysql или postgresql. Фото Что быстрее mysql или postgresql

Обновление. В postgresql время обновления данных растет более-менее линейно, чего совсем не скажешь о mysql, что говорит о разной реализации двух СУБД. При обновлении максимального числа строк postgresql справилась примерно в 2.5 раза лучше, при обновлении меньше числа строк отрыв становится гораздо существеннее. Postgresql справляется в среднем в 5,72 раза лучше.

Без индексации

Что быстрее mysql или postgresql. Смотреть фото Что быстрее mysql или postgresql. Смотреть картинку Что быстрее mysql или postgresql. Картинка про Что быстрее mysql или postgresql. Фото Что быстрее mysql или postgresql

И у postgresql, и у mysql скорость добавления выросла. Оно и понятно, ведь теперь не нужно строить дополнительные индексы. Тем не менее преимущество сохраняется у postgresql (в среднем в 4,44 раза).

Что быстрее mysql или postgresql. Смотреть фото Что быстрее mysql или postgresql. Смотреть картинку Что быстрее mysql или postgresql. Картинка про Что быстрее mysql или postgresql. Фото Что быстрее mysql или postgresql

Сортировка. Postgresql быстрее в среднем в 2 раза.

Что быстрее mysql или postgresql. Смотреть фото Что быстрее mysql или postgresql. Смотреть картинку Что быстрее mysql или postgresql. Картинка про Что быстрее mysql или postgresql. Фото Что быстрее mysql или postgresql

Группировка. Postgresql быстрее в среднем в 2,41 раза. Отмена индексирования практически никак не повлияла на скорость выполнения запросов с группировкой и сортировкой как у postgresql, так и у mysql. Это говорит о том, что алгоритмы сортировки и группировки в обеих СУБД от индексов не зависят.

Что быстрее mysql или postgresql. Смотреть фото Что быстрее mysql или postgresql. Смотреть картинку Что быстрее mysql или postgresql. Картинка про Что быстрее mysql или postgresql. Фото Что быстрее mysql или postgresql

Что быстрее mysql или postgresql. Смотреть фото Что быстрее mysql или postgresql. Смотреть картинку Что быстрее mysql или postgresql. Картинка про Что быстрее mysql или postgresql. Фото Что быстрее mysql или postgresql

Что быстрее mysql или postgresql. Смотреть фото Что быстрее mysql или postgresql. Смотреть картинку Что быстрее mysql или postgresql. Картинка про Что быстрее mysql или postgresql. Фото Что быстрее mysql или postgresql

Самым же неожиданным оказался тот факт, что отмена индексов в postgresql практически не сказалась даже на скорости выполнения объединения таблиц, а также выборки из первой таблицы и ее обновления. Хотя, казалось бы, в этих тестах нам важна скорость поиска по атрибуту rand_num, а индексирование как раз и должно было ускорить этот поиск. Для mysql же результаты тестирования объединения, выборки и обновления мы даже приводить не будем, так как уже при заполнении второй таблицы на 40000 строк на каждый запрос уходило более 400 секунд. Чего, собственно, изначально мы могли ожидать от обеих СУБД, а не только от MySQL.

Демонстрация работы

Установка баз данных

Подробный процесс установки этих баз данных можно увидеть в соответствующих статьях:

Заключение

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

В большинстве случаев для организации работы с базой данных в MySQL используется таблица InnoDB, эта таблица представляет из себя B-дерево с индексами. Индексы позволяют очень быстро получить данные из диска, и для этого будет нужно меньше дисковых операций. Но сканирование дерева требует нахождения двух индексов, а это уже медленно. Все это значит, что MySQL будет быстрее Postgresql только при использовании первичного ключа.

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

В целом PostgreSQL работает быстрее MySQL, как показали тесты, примерно в 2 раза.

Источник

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

Большинство из нас понимают, что задача системы управления базами данных (СУБД) заключается в эффективном и действенном управлении созданием и работой баз данных. Однако, если мы подробно поговорим об этих системах управления базами данных (СУБД), мы поймем, что в зависимости от их возможностей и сильных сторон их можно разделить на разные типы. В наши дни на рынке доступно очень много таких СУБД. Однако двумя наиболее часто используемыми являются MySQL и PostgreSQL. Если мы знаем, что обе они считаются очень эффективными СУБД, как нам определить, какая из них должна быть идеальной для нас? Что ж, чтобы изучить ответ на этот вопрос, мы должны провести сравнение между MySQL и PostgreSQL. Если вас интересует это сравнение, то вы должны выделить время, чтобы прочитать эту статью.

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

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

Краткая история MySQL и PostgreSQL

MySQL был запущен в 1995 году, и эта СУБД была разработана Oracle. С другой стороны, PostgreSQL был запущен в 1996 году, и эта СУБД была разработана PostgreSQL Global Development Group. С момента запуска этих двух СУБД они использовались часто, и даже сегодня обе чрезвычайно популярны в сообществе программистов. Обе эти СУБД написаны на языке программирования C, и обе СУБД поддерживают операционные системы Linux, macOS и Windows.

Основные возможности MySQL и PostgreSQL

Если мы поговорим об основных функциях MySQL и PostgreSQL, то мы узнаем, что между этими двумя СУБД есть очень заметные различия. Самая первая из них заключается в том, что MySQL — это система управления реляционными базами данных (СУБД). Система управления реляционной базой данных — это система, в которой у нас есть такие таблицы, которые связаны или связаны друг с другом. Такая СУБД всегда имеет дело с реляционными базами данных. PostgreSQL — это система управления объектно-реляционными базами данных (ORDBMS). Даже если эти термины кажутся вам довольно необычными и незнакомыми, вам все равно не о чем беспокоиться, поскольку мы просто собираемся объяснить вам, что именно мы подразумеваем под этим.

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

Теперь MySQL — это лицензионный продукт, а PostgreSQL — это СУБД с открытым исходным кодом. Тем не менее, сообщество поддерживает обе эти системы управления базами данных. Если говорить о производительности этих СУБД, то MySQL подходит для веб-проектов, в которых вы должны выполнять простые и понятные транзакции, тогда как PostgreSQL лучше всего подходит для работы с очень сложными и большими наборами данных. Что касается поддержки JSON, MySQL поддерживает JSON, но не поддерживает другие функции NoSQL, тогда как PostgreSQL также поддерживает другие функции NoSQL наряду с поддержкой JSON.

MySQL поддерживает большинство традиционных типов данных, таких как строки, символы, даты и т.д. Тогда как PostgreSQL также поддерживает перечисляемые и неструктурированные типы данных наряду с традиционными типами данных. Если мы дополнительно обсудим графические пользовательские интерфейсы (GUI) этих СУБД, то MySQL имеет MySQL Workbench для этой цели, тогда как PostgreSQL имеет pgAdmin для этой цели. Более того, всякий раз, когда мы пытаемся инициировать новое соединение в MySQL, мы, по сути, создаем новый поток. В то время как инициирование нового соединения в PostgreSQL рассматривается как новый процесс.

Соответствие MySQL и PostgreSQL

Что касается совместимости MySQL и PostgreSQL, то MySQL соответствует некоторым функциям SQL, тогда как PostgreSQL полностью совместим с SQL, т. Е. PostgreSQL поддерживает все функции SQL. Что касается свойств ACID, то есть атомарности, согласованности, изоляции и долговечности, MySQL обеспечивает соответствие только при использовании InnoDB и NDB, тогда как PostgreSQL совместим с ACID.

Некоторые популярные клиенты MySQL и PostgreSQL

Обе эти СУБД, то есть MySQL и PostgreSQL, действительно популярны. Поэтому они используются некоторыми из самых известных компаний. MySQL используется высокопроизводительными веб-платформами, такими как Google, Facebook, Twitter, YouTube, Netflix, GitHub, Spotify и Wikipedia. В то время как известные пользователи PostgreSQL — это фирмы, которые имеют дело с большими объемами сложных данных, такие как Apple, Cisco, Sun Microsystem, Debian и BioPharm. Эти клиенты выбрали любую из этих СУБД, исходя из своих возможностей управления базами данных и конкретных потребностей клиентов.

К настоящему времени мы поняли, что Google, Facebook, Twitter и т. Д. Являются очень известными веб-платформами социальных сетей. Это означает, что для этих платформ требуется такая СУБД, которая может поддерживать быстрые и эффективные веб-транзакции. Поэтому выбор этих платформ — MySQL. С другой стороны, такие организации, как Apple, Cisco и Debian, производят и обрабатывают большие массивы данных. Таким образом, этим фирмам требуется СУБД, способная обрабатывать такие большие объемы данных, поэтому их выбор — PostgreSQL.

Преимущества MySQL и PostgreSQL

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

Недостатки MySQL и PostgreSQL

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

Заключение

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

Источник

Национальная библиотека им. Н. Э. Баумана
Bauman National Library

Персональные инструменты

Сравнение производительности MySQL vs PostgreSQL

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

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

Содержание

Основные характеристики баз данных

MySQL — свободная реляционная система управления базами данных. Разработку и поддержку MySQL осуществляет корпорация Oracle, получившая права на торговую марку вместе с поглощённой Sun Microsystems. [1]

PostgreSQL (произносится «Пост-Грэс-Кью-Эл») — свободная объектно-реляционная система управления базами данных (ORDBMS) (по-русски ОРСУБД или просто СУБД) основанная на POSTGRES, версии 4.2, которая была разработана в Научном Компьютерном Департаменте Беркли Калифорнийского Университета. [2]

Сравнение MySQL и PostgreSQL [3]

ПараметрыMySQLPostgreSQL
Краткое описаниеШироко используемая свободная реляционная система управления базами данныхШироко используемая свободная реляционная система управления базами данных
Основная модель хранения данныхРеляционная база данныхРеляционная база данных
Дополнительная модель хранения данныхБаза данных типа Key/Value, документно-ориентированная база данныхБаза данных типа Key/Value, документно-ориентированная база данных
Вебсайтwww.mysql.comwww.postgresql.org
Документацияdev.mysql.com/­docwww.postgresql.org/­docs/­manuals
РазработчикOraclePostgreSQL Global Development Group
Дата релиза19951996
Текущая версия8.0.12, Июль 201810.5, Август 2018
Лицензия Открытое программное обеспечение Открытое программное обеспечение
ОблачноеНетНет
Язык реализации С++, CC
Поддерживаемые операционные системы сервераFreeBSD, Linux, Solaris, OS X, WindowsFreeBSD, Linux, Solaris, OS X, Windows, NetBSD, OpenBSD, HP-UX, Unix
Схема данныхДаДа
ТипизацияДаДа
Поддержка XMLДаДа
Поддержка вторичных индексовДаДа
SQLДаДа
API и другие методы доступаПроприентарное нативное API, ADO.NET, JDBC, ODBCНативная С библиотека, потоковое API для больших объектов, ADO.NET, JDBC, ODBC
Поддерживаемые языки программированияAda, C, C#, С++, D, Delphi, Eiffel, Erlang, Haskell, Java, JavaScript (Node.js), Objective-C, OCaml, Perl, PHP, Python, Ruby, Scheme, Tcl.Net, C, С++, Delphi, Java, Perl, PHP, Python, Tcl
Язык написания скриптов на стороне сервераДаФункции определенные пользователем
ТриггерыДаДа
Методы разбиенияГоризонтальное разбиение, шардинг с MySQL Cluster или MySQL Fabricдекларативное разбиение (по диапазону или списку) начиная с PostgerSQL 10.0
Методы репликацийMaster-Master, Master-SlaveMaster-Slave
MapReduceНетНет
Концепции согласованияНемедленное согласованиеНемедленное согласованиее
ПараллелизмДаДа
Возможность хранения только в памятиДаНет
Контроль доступа пользователейКонцепт пользователей с детальной авторизациейДетальные права доступа в соответствии с SQL стандартом

Критерии сравнения

Мы сравним скорость выборки из одной таблицы, обновления одной таблицы, скорость сортировки (ORDER BY) и группировки (GROUP BY) при выборке данных из одной таблицы, а также скорость вставки в таблицу и внутреннего объединения двух таблиц.

Выбор структуры таблиц и обоснование

Мы создадим две таблицы: first_table(rand_num int, some_data varchar(40)) и second_table(rand_num int, rand_group int, some_data varchar(40)). Атрибут some_data нам нужен просто для того, чтобы увеличить объем записи на диск, так что в него можно записывать любой текст. Атрибуты rand_num обеих таблиц будут содержать в себе случайные значения, так же как и атрибут rand_group второй таблицы. Тесты будут проводиться следующим образом:

1) сначала мы будем просто добавлять строки (до 400000 строк) в первую таблицу и замерять время добавления.

Когда же мы будем заполнять вторую таблицу (до 400000 строк), то каждый раз после добавления фиксированного числа строк (40000) мы будем проводить следующие измерения: 1) скорость внутреннего объединения первой и второй таблицы по атрибуту rand_num

2) скорость выборки всех данных из второй таблицы, сортируя их по атрибуту rand_num

3) скорость подсчета числа строк второй таблицы, принадлежащих одной группе (rand_group)

4) скорость выборки тех строк из первой таблицы, атрибут rand_num которых совпадает с атрибутом rand_num какой-либо строки второй таблицы

5) Скорость обновления атрибута some_data в строках первой таблицы. Но обновлять мы будем не все строки, а только те, которые удовлетворяют условию, описанному в п.4.

Все тесты мы проведем дважды: с индексированием атрибутов rand_num обеих таблиц и без индексирования. Отметим, что в данной серии тестов нас интересует производительность «из коробки», то есть сразу после установки обеих СУБД.

Результаты

С индексацией

Что быстрее mysql или postgresql. Смотреть фото Что быстрее mysql или postgresql. Смотреть картинку Что быстрее mysql или postgresql. Картинка про Что быстрее mysql или postgresql. Фото Что быстрее mysql или postgresql

Добавление. postgresql оказался быстрее с большим отрывом в 3,46 раза.

Что быстрее mysql или postgresql. Смотреть фото Что быстрее mysql или postgresql. Смотреть картинку Что быстрее mysql или postgresql. Картинка про Что быстрее mysql или postgresql. Фото Что быстрее mysql или postgresql

Внутреннее объединение. На небольшом количестве строк postgresql отрывается от mysql незначительно (в районе 25 процентов), но с увеличением размера второй таблицы преимущество postgresql становится более очевидным. При достижении второй таблицей максимального размера скорость объединения в postgresql уже в 2.8 раз выше. В среднем postgresql оказалась быстрее в 1,66 раза.

Что быстрее mysql или postgresql. Смотреть фото Что быстрее mysql или postgresql. Смотреть картинку Что быстрее mysql или postgresql. Картинка про Что быстрее mysql или postgresql. Фото Что быстрее mysql или postgresql

Сортировка. Postgresql быстрее на 60-100 процентов в зависимости от размера второй таблицы. В среднем postgresql быстрее в 2,04 раза.

Что быстрее mysql или postgresql. Смотреть фото Что быстрее mysql или postgresql. Смотреть картинку Что быстрее mysql или postgresql. Картинка про Что быстрее mysql или postgresql. Фото Что быстрее mysql или postgresql

Группировка. Сначала postgresql была быстрее в 4 раза, но с ростом второй таблицы преимущество сократилось до 1.6 раз. В среднем postgresql оказалась быстрее в 2,32 раза

Что быстрее mysql или postgresql. Смотреть фото Что быстрее mysql или postgresql. Смотреть картинку Что быстрее mysql или postgresql. Картинка про Что быстрее mysql или postgresql. Фото Что быстрее mysql или postgresql

Выборка. Postgresql справляется в среднем в 1,97 раза лучше.

Что быстрее mysql или postgresql. Смотреть фото Что быстрее mysql или postgresql. Смотреть картинку Что быстрее mysql или postgresql. Картинка про Что быстрее mysql или postgresql. Фото Что быстрее mysql или postgresql

Обновление. В postgresql время обновления данных растет более-менее линейно, чего совсем не скажешь о mysql, что говорит о разной реализации двух СУБД. При обновлении максимального числа строк postgresql справилась примерно в 2.5 раза лучше, при обновлении меньше числа строк отрыв становится гораздо существеннее. Postgresql справляется в среднем в 5,72 раза лучше.

Без индексации

Что быстрее mysql или postgresql. Смотреть фото Что быстрее mysql или postgresql. Смотреть картинку Что быстрее mysql или postgresql. Картинка про Что быстрее mysql или postgresql. Фото Что быстрее mysql или postgresql

И у postgresql, и у mysql скорость добавления выросла. Оно и понятно, ведь теперь не нужно строить дополнительные индексы. Тем не менее преимущество сохраняется у postgresql (в среднем в 4,44 раза).

Что быстрее mysql или postgresql. Смотреть фото Что быстрее mysql или postgresql. Смотреть картинку Что быстрее mysql или postgresql. Картинка про Что быстрее mysql или postgresql. Фото Что быстрее mysql или postgresql

Сортировка. Postgresql быстрее в среднем в 2 раза.

Что быстрее mysql или postgresql. Смотреть фото Что быстрее mysql или postgresql. Смотреть картинку Что быстрее mysql или postgresql. Картинка про Что быстрее mysql или postgresql. Фото Что быстрее mysql или postgresql

Группировка. Postgresql быстрее в среднем в 2,41 раза. Отмена индексирования практически никак не повлияла на скорость выполнения запросов с группировкой и сортировкой как у postgresql, так и у mysql. Это говорит о том, что алгоритмы сортировки и группировки в обеих СУБД от индексов не зависят.

Что быстрее mysql или postgresql. Смотреть фото Что быстрее mysql или postgresql. Смотреть картинку Что быстрее mysql или postgresql. Картинка про Что быстрее mysql или postgresql. Фото Что быстрее mysql или postgresql

Что быстрее mysql или postgresql. Смотреть фото Что быстрее mysql или postgresql. Смотреть картинку Что быстрее mysql или postgresql. Картинка про Что быстрее mysql или postgresql. Фото Что быстрее mysql или postgresql

Что быстрее mysql или postgresql. Смотреть фото Что быстрее mysql или postgresql. Смотреть картинку Что быстрее mysql или postgresql. Картинка про Что быстрее mysql или postgresql. Фото Что быстрее mysql или postgresql

Самым же неожиданным оказался тот факт, что отмена индексов в postgresql практически не сказалась даже на скорости выполнения объединения таблиц, а также выборки из первой таблицы и ее обновления. Хотя, казалось бы, в этих тестах нам важна скорость поиска по атрибуту rand_num, а индексирование как раз и должно было ускорить этот поиск. Для mysql же результаты тестирования объединения, выборки и обновления мы даже приводить не будем, так как уже при заполнении второй таблицы на 40000 строк на каждый запрос уходило более 400 секунд. Чего, собственно, изначально мы могли ожидать от обеих СУБД, а не только от MySQL.

Демонстрация работы

Установка баз данных

Подробный процесс установки этих баз данных можно увидеть в соответствующих статьях:

Заключение

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

В большинстве случаев для организации работы с базой данных в MySQL используется таблица InnoDB, эта таблица представляет из себя B-дерево с индексами. Индексы позволяют очень быстро получить данные из диска, и для этого будет нужно меньше дисковых операций. Но сканирование дерева требует нахождения двух индексов, а это уже медленно. Все это значит, что MySQL будет быстрее Postgresql только при использовании первичного ключа.

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

В целом PostgreSQL работает быстрее MySQL, как показали тесты, примерно в 2 раза.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *