четверг, 16 апреля 2009 г.

Существительные

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

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

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

Сбор данных по существительным в единственном числе
Для сбора данных по существительным в единсственном числе применяется следующая методика.
1. Вручную составляется эталонная база словоформ для 40-50 существительных.
2. Производится анализ словоформ каждого слова и выявляются окончания для соответствующих падежей.
3. Составляется список зарегистрированных случаев склонения слов. Ожидается, что этот список не будет содержать более нескольких десятков вариантов склонения. Если это не так, то следует пересмотреть методику сбора данных.
4. Из текста выбирается произвольное слово, оно проверяется на отсутствие в эталонном списке существительных и на отсутствиее в списке слов, не подлежащих анализу.
5. К нему применяются возможные варианты склонения.
6. Список возможных вариантов склонения обрабатывается фильтром триграмм и выводится пользователю.
7. Пользователь должен выбрать один из предложенных вариантов, предложить свой или указать, что выбранное слово не является существительным. В первом и втором случае эталонные словоформы заносятся в базу существительных, в третьем случае слово заносится в список слов не подлежащих анализу.
8. Переход к шагу 2.

Подитог
Когда будет набрана база эталонных словоформ (1000 слов), следует остановиться и проанализировать все случаи склонения представленные в ней. Следует попытаться провести аналогии между получившейся классификацией и общепринятыми классификациями существительных. Вероятно, некоторые частные случаи склонения можно будет объединить между собой. Также возможно удастся найти зависимость между случаями склонения и буквенной записью слова.

[Для себя: Прикрутить фильтр триграмм и дособрать базу. Следующие два поста посвятить анализу эталонной базы]

среда, 15 апреля 2009 г.

Части речи и части слова и части предложения

Необходимо чётко понимать разницу между этими понятиями.

Части слова

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

Части речи
Все слова русского языка можно классифицировать на несколько категорий: существительное, сказуемое, числительное, прилагательное, причастие, деепричастие, наречие, местоимение, союз, предлог и, возможно ещё какие-то. Пожалуй, основным критерием этой типизации является вопрос, на который это слово отвечает вкупе со смысловой нагрузкой этого слова. Да, это довольно размытое понятие, но если вдуматься, то можно обнаружить некоторые закономерноости между частями слова и частями речи. Так, например, если слово оканчивается на -ться, то с большой вероятностью это слово является глаголом, если слово оканчивается на -ный, то скорее всего это слово является прилагательным. Иногда встечаются случаи превращения слова из одной части речи в другую, как пример можно привести слово учащийся. Изначальнно это, как я понимаю, было деепричастие, но оно в русском языке может встречаться как в однном так и в другом виде.

Части предложения
Предложение состоит из связанных друг другом слов. Как правило, эти связи можно обозначить простейшими вопросами (когда? какой? что делает?)
Части предложения по этим простым воппросаам и смыслоовой нагрузке разделяются на следующие части предложения: подлежащее, сказуемое, определение, дополение, обращение, междометие, причастный оборот, дее причастный оборот, подчинённое предложение и т.д. Вообще, предложение выступает связующим звеном для частей речи. Структура предложения в русском языке не ограничена, но есть простейшая классификация предложений. Структура предложения и смысловая нагрузка определяет знаки препиная в предложении.

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

[Для себя: сбор данных по существительным.]

вторник, 14 апреля 2009 г.

Триграммы. Итог.

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

Вот как выглядит последняя часть данных:

слов триграмм
1730000 9770
1740000 9777
1750000 9810
1760000 9821
1770000 9826
1780000 9830
1790000 9842
1800000 9843
1810000 9848
1814350 9848

То есть речь идёт о единицах триграмм на 10000 слов. Думаю, что на этот раз библиотеку можно считать достаточно большой.

Вот перечень последних добавленных триграмм

[утх] - сутхеп
[хеп] - сутхеп
[ тх] - тхани
[тха] - тхани
[фум] - фумико
[цуо] - тацуо
[онэ] - хонэн
[дзю] - дзюнъитиро
[зюн] - дзюнъитиро
[юнъ] - дзюнъитиро
[нъи] - дзюнъитиро
[ъит] - дзюнъитиро
[идз] - танидзаки
[гаи] - онегаи
[йсэ] - кайсэки
[кюс] - кюсю
[саи] - насаи
[джм] - риджмором
[жоа] - жоао
[оао] - жоао
[йру] - перейру
[йра] - перейра
[лао] - лаоса
[ымл] - подымлю
[ууу] - уууя
[ууя] - уууя
[пьй] - пьйоотр
[ьйо] - пьйоотр
[йоо] - пьйоотр
[ иэ] - иэна
[нпо] - аванпосты
[уии] - уиии
[иии] - уиии
[ьяш] - итальяшка
[пуэ] - пуэбло
[уэб] - пуэбло
[пиб] - пибоди
[шце] - мышце
[окэ] - электрокэба
[язю] - князю
[зю ] - князю
[обю] - обюссонскими
[шез] - шезлонгов
[ьо ] - мурильо
[ лт] - лтые
[цул] - танцулек
[лшу] - уолшу
[ сй] - сйо
[сйо] - сйо
[огю] - огюста
[шцу] - мышцу
[йпф] - грейпфруты
[пфр] - грейпфруты
[эвт] - эвтаназию
[рнш] - бернштейн
[зиф] - сизифу
[фуд] - фудзиямы
[удз] - фудзиямы
[куг] - токугава
[иэя] - иэясу
[эяс] - иэясу
[эси] - дэсита
[чме] - импичменте
[кия] - макияжем
[ияж] - макияжем
[ьфь] - монгольфьере
[луф] - полуфинальных
[уфи] - полуфинальных
[ эя] - эякуляции
[эяк] - эякуляции
[ефы] - рельефы

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

Вот перечень книг, которые были использованы:

Артур Кларк, Джентри Ли. Рама явленный
Артур Кларк. Строптивая орхидея
Артур Кларк. И если я, земля, тебя забуду...
Айзек Азимов. Буква закона
Айзек Азимов. Конец Вечности
Айзек Азимов. Мнимые величины
Сергей Снегов. Кольцо обратного времени
Сергей Снегов. Вторжение в Персей
Артур Кларк. Да будет свет!
Айзек Азимов. Немезида
Айзек Азимов. Выбор катастроф
Айзек Азимов. Затерянные у Весты
Айзек Азимов. Световирши
Артур Кларк. Абсолютная мелодия
Артур Кларк. Город и звезды
Артур Кларк. Одиссея Один
Артур Кларк. Мимолетность
Артур Кларк. Остров дельфинов
Вадим Шефнер. Девушка у обрыва
Вадим Шефнер. Сестра печали
Айзек Азимов. Нашли!
Сергей Снегов. Галактическая разведка
Айзек Азимов. Сами боги
Вадим Шефнер. Небесный подкидыш, Исповедь трусоватого храбреца
Артур Кларк. Пески Марса
Артур Кларк. Что взлетает вверх...
Артур Конан Дойл. Долина ужаса
Артур Кларк. Соседи
Артур Кларк. последняя одиссея
Артур Конан Дойл. Этюд в багровых тонах
Артур Кларк. Одиссея Два
Айзек Азимов. Выборы
Айзек Азимов. Фантастическое путешествие
Артур Конан Дойл. Знак четырех
Артур Кларк, Джентри Ли. Рама II
Артур Кларк. заключительная одиссея. Пролог
Артур Кларк. Преходящее
Артур Кларк. Свидание с Рамой
Артур Конан Дойл. Смерть русского помещика
Артур Кларк. Одиссея Три
Артур Конан Дойл. Собака Баскервилей
Артур Кларк, Джентри Ли. Сад Рамы


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

[ то] => 29813
[ом ] => 29988
[ла ] => 30140
[ за] => 30655
[ бы] => 30753
[про] => 31750
[ чт] => 33122
[сь ] => 33921
[что] => 34356
[ост] => 34670
[ он] => 36056
[ ко] => 36357
[ой ] => 36758
[ся ] => 43002
[ли ] => 44881
[го ] => 45122
[ в ] => 45806
[на ] => 50036
[не ] => 51049
[ть ] => 53798
[ и ] => 54454
[но ] => 55321
[то ] => 58822
[ пр] => 61182
[ на] => 69637
[ не] => 74908
[ по] => 87655

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

Выводы:
Число действительных триграмм русского языка находится в районе 10000, а число всех триграмм равно 39304. Получается, что методика триграмм позволит отфильтровывать 3 триграммы из 4. Да, результаты не слишком обнадёживают. Но это всё же лучше чем ничего. По крайней мере, это поможет отфильтровать совсем бестолковые варианты. С другой стороны, полученная гистограмма "популярности" может помочь упорядочивать слова по вероятностным характеристикам. Да, у меня уже есть небольшие наработки по автоматическому склонению существительных и будет очень интересно применить фильтрацию и упорядочивание триграммами. Но всему своё время.

[Для себя: следующий пост надо посвятить общим мыслям о частях речи, частях предложения, а также вариантам склонения и спряжения.]

воскресенье, 12 апреля 2009 г.

Зависимость роста количества триграмм от размера словаря.

Произвёл более детальный анализ количества слов и триграмм.
Общее число слов в выбранных книгах: 554928 слов.
Число уникальных слов в книгах: 57703 слова.
Число триграмм: 8340.

Зависимость количества триграмм от количества слов.
Красным цветом на графике отображено масштабированное значение производной. Синим цветом - количество триграмм.


Частотность встречаемости триграмм

Представлена гистограмма распределения "популярности" триграмм. Полезных данных на этой гистограмме разглядеть не удаётся, потому вот некоторые её характеристики:
Триграмма встречается от 1 до 10 раз - 2622 штук
Триграмма встречается от 1 до 100 раз - 5298 штук.
Наиболее популярные триграммы имеют частоты: 25736, 23366, 22604, 19849, 18060, 16947, 16267 и 16259.
Приведу пример триграмм встречающихся 1 раз.
[хуя] => [хуянь]
[уян] => [хуянь]
[чжо] => [чжо]
[чжэ] => [чжэня]
[жэн] => [чжэня]
[эня] => [чжэня]
[бао] => [бао]
[усю] => [дусю]
[биа] => [лабиальности]
[фюз] => [фюзеляжа]
[юзе] => [фюзеляжа]
[ияд] => [внутриядерную]
[ыяв] => [выявивших]
[уиц] => [интуиция]
[зущ] => [ползущим]
[ехз] => [четырехзначную]
[хзн] => [четырехзначную]
[фмо] => [логарифмов]
[нкм] => [инкм]
[адг] => [адгезивы]
[дге] => [адгезивы]
[гез] => [адгезивы]
[кюв] => [кюветах]
[ымр] => [вымрут]
[мтя] => [ломтя]
[брь] => [сентябрьская]
[рхм] => [сверхмощной]
[йга] => [тайга]
[ухк] => [двухкилометровое]
[йсм] => [сейсмостанции]
[нза] => [вонзаются]
[оео] => [своеобразная]
[улл] => [буллиальд]

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

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

[Для себя. Следующий шаг работы - расширить библиотеку текстов, автоматизировать текущий анализ и добавить возможность кеширования результатов, ибо текущая скорость анализа (около 2 минут) не устраивает.]

суббота, 11 апреля 2009 г.

Триграммы русского языка

Что такое триграмма?
Триграммой я называю любую комбинацию из трёх букв или пробела. Идею триграмм я почерпнул у Джо Армстронга (книга Programming Erlang).

В чём состоит идея?
Задача: предсказать может ли произвольная комбинация букв являться английским словом. Для решения Джо предлагает взять полный список английских слов. Добавить в начало и в конец каждого слова символ пробела и собрать все реально существующие триграммы. Например, для слова love будут следующие триграммы " lo", "lov", "ove" и "ve ". В принципе, идея довольно очевидна, триграмма qqq не может существовать ни в одном английском слове. Для русского языка можно аналогично сказать, что триграмма ттт не может встретиться ни в одном русском слове.

Исходный материал
Для исследования выбраны тексты из электронной библиотеки Мошкова.
Л.Н.Толстой Анна Каренина
А. и Б. Стругацкие Страна багровых туч
А. и Б. Стругацкие Страна багровых туч (другая редакция)
А. и Б. Стругацкие Путь на Амальтею
А. и Б. Стругацкие Стажеры
А. и Б. Стругацкие Хищные вещи века
А. и Б. Стругацкие Шесть спичек
А. и Б. Стругацкие Забытый эксперимент

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

Стоит также отметить особенность электронных текстов. В них огромное количество ошибок. Большая часть этих ошибок - ошибки распознавания текста. В некоторых случаях на эти ошибки можно не обращать внимания. Однако стоит иметь их в виду.

Статистические данные по текстам
Зависимость количества триграмм от числа слов
книгавсего словуникальных словколичество триграмм
books/0270110328306835
books/177341189606452
books/270566180456378
books/31933758524752
books/458204133256052
books/548237127585969
books/6518023293286
books/7596725123478


Зависимость количества триграмм от количества слов

Выводы
Хоть и не очень убедительно, но видна зависимость числа триграмм от общего числа уникальных слов. Кроме того, видно, что число триграмм, если и не стремится к конкретному числу, то по крайней мере сильно замедляет свой рост с ростом общего количества слов. Потому, следует провести более точное построение кривой. Вероятно, будет также интересна гистограмма "популярности" триграмм в словах.

четверг, 9 апреля 2009 г.

Програмный анализ русского текста

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

Исследование разбивается на несколько этапов.
1) Анализ текста в целом.
2) Анализ отдельных слов.
3) Анализ словосочетаний.
4) Анализ предложений.

Посты постараюсь организовать небольшими и исключительно с результатами исследований.

понедельник, 27 октября 2008 г.

Сравнение MySQL и PostgreSQL с точки зрения разработчика

Аннотация

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

Типы данных

Первое с чем приходится сталкиваться разработчику - это доступные типы данных. Проведём сравнение доступных типов данных.

Целые числа и числа с плавающей точкой


Я не буду указывать диапазоны возможных значений, однако укажу информационную ёмкость в байтах.
.                       |MySQL                | PostgreSQL        
TINYINT |1 байт |
SMALLINT |2 байта | 2 байта
MEDIUMINT |3 байта |
INTEGER, INT |4 байта | 4 байта
BIGINT |8 байт | 8 байт
FLOAT, DOUBLE, REAL |4 или 8 байт | 4 или 8 байт
DECIMAL, NUMERIC |65 десятичных знаков | без ограничений
SERIAL, BIGSERIAL |8 байт | 4 или 8 байт
BIT |он есть | он есть


Примечание:
1) В MySQL есть поддержка UNSIGNED типов, однако это не входит в стандарт SQL.
2) Для типов с плавающей точкой PostgreSQL использует формат стандарта IEEE 754, поэтому можно хранить значения +Inf, -Inf и NaN, однако использовать эти значения в математических операциях не выйдет.


Как видно из таблицы, типы данных практически идентичны для двух СУБД. Различия состоят в том, что MySQL позволяет более детально использовать доступную память, но при этом работа с числами в символьном представлении ограничена 65 цифрами. Я не вижу ни одного практического применения числам с таким количеством знаков, потому можно считать что возможности MySQL и PostgreSQL в данном разделе идентичны.

Строки и данные


Размеры указываются в байтах. Не забывайте, что для одного символа UTF-8 может использоваться от 1 до 4 байт.
.                       | MySQL           | PostgreSQL
BINARY, CHAR | 255 | 10485760
VARCHAR, VARBINARY | 65535* | 10485760
TINYBLOB,TINYTEXT | 2^8 |
BLOB, TEXT, bytea | 2^16 | не ограничен
MEDIUMBLOB | 2^24 |
LONGBLOB | 2^32 |


* ограничение вызвано максимальной длиной строки, равной 65535 байтам, но в реальности максимальная длинна гораздо меньше.


Из таблицы видно, что по ёмкости строковые типы данных в двух СУБД практически не различаются, и снова MySQL позволяет более детально контролировать формат хранения данных на жёстком диске. Однако эта гибкость MySQL вводит две небольшие проблемы на этапе проектирования: сумятицу в типах и размерах данных.

Чтобы не быть голословным приведу пример — хранение данных пользователя. Предположим, что нам потребовалось хранить о пользователе не только его имя, фамилию и отчество, но адрес и телефоны, да мало ли что мы можем предложить хранить пользователю в своём профиле. С точки зрения SQL для этого должны использоваться типы CHAR и VARCHAR. И вот тут в MySQL приходится решать какая максимальная длинна у фамилии, какая максимальная длинна у имени, какая максимальная длинна у адреса, ибо на всё про всё дано 65535 байт. В то же время в PostgreSQL мы просто указываем в качестве типа для всех столбцов таблицы VARCHAR, куда мы в случае необходимости можем уложить гораздо больше данных, чем нам позволяет MySQL. (Попрошу не предлагать использовать TEXT в MySQL для этих целей.)

Дата и время


Типы даты и времени для двух баз практически идентичны и проблем как правило не вызывают.

Нестандартные типы


Для желающих PostgreSQL предлагает целую группу типов данных для работы, которые напрочь отстутствуют в MySQL: массивы, структуры, типы для хранения IP и MAC адресов, и даже типы для хранения параметров геометрических фигур. Желающие могут самостоятельно ознакомиться с типами данных PostgreSQL.

Выводы по типам данных


1) Типы данных, предлагаемые двумя СУБД, с функциональной точки зрения идентичны.
2) При помощи этих типов можно хранить данные в любой из СУБД, однако в MySQL разработчик вынужден на самом начальном этапе проектирования искуственно ограничивать длинну строковых данных, что не сказывается положительно на удобстве пользования системой.
3) Использование нестандартных типов в PostgreSQL позволяет довольно сильно упростить разработку, однако усложнит переход на другую СУБД.
4) MySQL позволяет точно контролировать структуру хранимых данных, однако при этом жертвуется удобством разработчика.

Возможности управления данными


Здесь я хочу сравнить две СУБД с точки зрения дополнительного функционала предлагаемого разработчику. Часть этого функционала включена в стандарт SQL.

Хранимые процедуры


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

Индексы и ключи


На этом фронте MySQL тоже не блещет своими возможностями. Ограничение в 1000 байт на размер ключа — куда это годится? Допустим, я разрешаю своим пользователям создавать учётные записи на любом языке (UTF-8). В качестве максимальной длинны логина я выбираю 512 символов. Так как логины должны быть уникальными, прихожу к выводу, что нужно наложить уникальный ключ на столбец, и, как выясняется, не могу, ибо ключ не вписывается в 1000 байт. Приходится идти на уступки и делать уникальность только по первым 333 символам. Кто не верит, может самостоятельно посмотреть на результат create table t( t varchar(512), key(t)) character set = utf8.
PostgreSQL такими комплексами не страдает, а просто делает уникальный ключ необходимого размера.

Проверка данных на этапе добавления


В стандарте SQL была предусмотрена инструкция CHECK, которая задаёт выражение, которому должны удовлетворять данные добавляемые в таблицу. В руководстве MySQL об этой инструкции сказано предельно просто «The CHECK clause is parsed but ignored by all storage engines.» Больше добавить мне к этому нечего, в постгре, как и ожидалось, всё в порядке.

Транзакции и внешние ключи


По умолчанию в MySQL для таблиц используется движок MyISAM, который не поддерживает ни транзакций ни внешних ключей. Это сложилось исторически и у такого подхода есть оправдание, если рассматривать работу с БД с точки производительности. Можно просто заметить, что, если вам нужны транзакции и внешние ключи, то использование storage engine InnoDB обязательно. Естественно в PostgreSQL транзакции и вешние ключи полностью функциональны.

Выводы


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

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


_________
Текст подготовлен в ХабраРедакторе