MySQL - это только select/insert/update/delete, и даже без поддержки внешних ключей (ссылочной целостности, то есть) - за исключением случая, когда он поверх InnoDB работает (кстати - вопрос: а кто-нить его так компилял? я сам всегда на BerkeleyDB его ставил).
А PostgreSQL (лично для меня) - это ссылочная целостность и триггеры/процедуры (на разных языках, причем - кроме его собственного еще Tcl, Python, Perl и Java - если откомпилировать с их поддержкой).
хех ... ну сам подумай есть встроенные функции (т.е. их можно написать на чем умееш *java?, c, c++, perl, python, pgpl/sql*) которые хранятся на самом серваке ... есть триггеры (те же функции тока немного "нетакие", т.е. все вышесказанное насчет функций верно и для триггеров), есть крутая фича назывется rule-engine, если сталкивался с mod_rewrite в апаче то скажу что это примерно то же самое только для SQl. а что из вышесказанного есть в мускле? то-то.
P.S. для красноглазых фанатиков которые спрашивают а нах мне триггеры и функции: на курсах по Oracle говорили, что вся бизнес логика должна быть в базе ... а оно возможно если есть триггеры и встроенные процедуры и триггеры, вот так то ...
пример из жизни: нада было сделать почтовик для конторы. я не хотел заводить юзверей в системе поэтому решил сделать на связке postfix + cyrus sasl + postgresql. Итак что получается если мне нада завести пользователя то я просто делаю инзерт в одну таблицу а там запускается триггер который делает все остальное, удобно? то то оно ... а если бы стояла mysql то считай нужно писать скрипт который в несколько таблиц распихивает инфу ... то то ...
Я с MySQL работал, знаю, что он умеет, и без http://www.mysql.com/doc/ru/. Тем более что расхваливать каждый свое детище все горазды.
Специально для невежд поясняю: внешние ключи в реляционных БД используются для поддержания т.н. ссылочной целостности (referential integrity). MySQL поддерживает только синтаскис создания foreign key, не реализуя их на деле - по крайней мере, при выборе в качестве backend'а не InnoDB. Насколько СЦ работает над InnoDB - не знаю, не проверял.
BerkeleyDB точно также сразу с MySQL идет, а кроме того, уже (как правило) есть в системе. Кроме того - на Slackware 8.0 идущий с MySQL тогдашней версии InnoDB компиляться отказался наотрез.
Детство не трудное, просто проведено с тем самым MySQL 3.x - чего хватило на всю оставшуюся жизнь, чтоб больше его не касаться.
>Специально для невежд поясняю: внешние ключи в реляционных БД >используются для поддержания т.н. ссылочной целостности (referential >integrity). MySQL поддерживает только синтаскис создания foreign >key, не реализуя их на деле - по крайней мере, при выборе в качестве >backend'а не InnoDB. Насколько СЦ работает над InnoDB - не знаю, не >проверял.
Таким образом, вами представлено мнение примерно 2-х годовой давности..
>BerkeleyDB точно также сразу с MySQL идет, а кроме того, уже (как правило) есть в системе.
К сожалению это не совсем так.. BerkleyDB engine в отличии от InnoDB не является родным для мускула.. MySQL AB поставляет InnoDB как в коммерческой так и в гнутой поставке, так как имеется соотв. соглашение с автором.. А вот BerkleyDB поставляется с большими ограничениями, соотв. в большинстве случаев как раз его и нужно компилить с доп. опциями.. Хотя отчасти понятно, откуда могло взяться такое впечатление.. BerkleyDB был первым engine для мускула с транзакциями.. еще до InnoDB.. видимо вы имели дело с сабжем в те достославные времена.
>Кроме того - на Slackware 8.0 идущий с MySQL тогдашней версии InnoDB компиляться отказался наотрез. >Детство не трудное, просто проведено с тем самым MySQL 3.x - чего хватило на всю оставшуюся жизнь, чтоб больше его не касаться.
хмммм... уже больше года как prodaction версией мускула является mysql-4.0 (последняя версия mysql-4.0.18)
BTW. - InnoDB умеет raw data формат.. - уже очень давно на мускуле делают системы с балансировкой нагрузки на основе replication - недавно мускул купил кластерную команду у Siemence - в стратегическом альянсе с мускулом выступают SAP и JBoss
короче, мускул - очень активно развивающаяся система и один из немногих примеров успешного развития ___коммерческого___ подхода к продукту с открытыми исходниками (компания имеет миллионные обороты) отсюда - все остальное.. поддержка, обучение, сертифицирование, издательство и документация, куча ПО от третьих сторон, коммюнити..
Вот чем из этого может постгрес похвастаться? Постгрес - просто академическая разработка и в этом вся разница.. они не ижут за пользователями/рынком.. на первом месте для них академические интересы "чтоыб было красиво".. Чем заканчиваются такие проекты всем наверно известно... Посмотрите на тот же Паскаль/Модула/Оберон (кому интересно - Delphi), который был разработан в университете.. комерческий C их давно укатал, несмотря на то что "по фичам" тот же Delphi вроде как покруче..
(вы вообще когда нибудь задумывались, почему эмблема мускула - дельфин? А объяснение простое - мускул плавает в море opensource как в своей родной среде, но вот чтобы не задохнуться регулярно дышит коммерческим воздухом из вполне традиционной и атмосферы. отсюда он более быстрый и поворотлиый, в отличии от Postgres-а который и старее мускула лет на 5, и по фишкам вроде как тяжелее но вот что то все время находится на грани выживания, как все неповортливые слоны )
> комерческий C их давно укатал, несмотря на то что "по фичам" тот же Delphi вроде как покруче..
Во-первых, не C, а C++. А во-вторых, когда в Delphi появятся шаблоны и автоматическое (хотя бы на уровне C++) распределение памяти, меня позовите, пожалуйста =)
Вообще, очень любопытная закономерность: как только что-то хорошее становится коммерчески успешным, оно постепенно теряет свою техническую привлекательность, становясь совершенной серостью (в техническом плане; зато в плане маркетинга!..). Примеров, я думаю, каждый сам найдет множество.
Вообще-то, в корпоративном секторе что Delphi, что C/C++ давно и равно "укатаны" Java'ой (в свою очередь, уже "укатываемой" C# и вообще .NET). В сфере среднего/малого бизнеса - 1С-подобия вне конкуренции, на втором месте - ... как ни странно, Delphi, потом - ... как ни странно, MS Access.
Ну и где же хваленый C/C++? Да, именно там, где ему и место - в системном программировании.
Да-да, знаю - есть люди, решающие задачу от инструмента, а не выбирающие инструмент по задаче. Вы из каких будете?
ps. Данные о распространении технологий - исключительно собственные наблюдения.
>Если BerkeleyDB уже идет в составе дистрибутивов Linux (хоть один есть, где не идет?) - как он может "поставляться с большими ограничениями"?
ну как какими.. насколько мне известно, у BerkleyDB своя лицензия.. и мускул не может ее продавать в составе своего коммерческого дистрибутива/ под своей собственной лицензией.. Т.е. прежде чем ее использовать, пользователь должен убедится что не будет нарушать ее лицензию.. мускул же можно использовать под лицензией GPL (насколько мне известно у BerkleyDB даже не GPL) либо по полностью коммерческой лицензии (за бабки ессно) в полностью закрытых продуктах.
так что естсественно BerkleyDB не включать в поставку "по умолчанию" вобще, насколько мне известно BerkleyDB сейчас почти мертвое направление в мускуле, так как InnoDB гораздо удобнее, да и ограничений на него меньше
>Насколько я понял, ныне "обучение, сертифицирование, издательство" важней технологических преимуществ. Так?
черт побери, это так же верно, как и то что при встрече слона с дельфином побеждает последний.
да и почему вы умолчали о кластерах/репликации/поддержке производителей Application Server-ов? Это что, не технологичесекое преимущество? Как тут где то верно подметили, Oracle это не только RDBMS.. это сам по себе очень мощный Application Server... и адекватного ответа у Postgres ов / Firebird ов нету.. Потому что сторонние производители Application Server-ов нуждаются во внятной политике.. в надежном (и в коммерческом отношении прежде всего) партнере.. и почему то они такого партнера видят именно в лице мускула.. а не в академических умниках, у которых очень красивый код и скурпулезно выполнены все требования к стандартам, но вот столько мелочей кривых что простому пользователю взыть в пору, где та же native windows версия, где установка простая, гда куча клиентов третьих сторон, где доступная дока на языках мира, где репликация.. где.. где.. где.. ?
короче о технологических преимуществах лучше осторожнее упомянать...
>Вообще-то, в корпоративном секторе что Delphi, что C/C++ давно и равно "укатаны" Java'ой (в свою очередь, уже "укатываемой" C# и вообще .NET).
:)) Вопрос конечно спорный, но опять же не имеющий отношения к описываемой прблеме.. Опять же все перечисленные технологии являются целиком и полностью от начала и до конца коммерческими задумками (Java дык та вообще от безысходности на нынешний рынок вышла, почитайте ка историю возникновения :)) ) И ни какимх университетских разработок за ними нет
если же вам нужны примеры __современных__ академических языков - поинтересуйтесь тем же ML.. (СAML и другие клоны)
Мы, кажется сравнивали бесплатные сервера БД? Так давайте сравнивать с бесплатным PostgreSQL (к которому поддержка и документация тоже имеются - только за деньги) _бесплатную_ версию MySQL.
А оная не обладает ни кластеризацией, ни application server'ом, ни - даже! - репликацией (в отличие от PostgreSQL с его eRServer).
> короче о технологических преимуществах лучше осторожнее упомянать...
Я попытаюсь осторожно. Где WAL, MVCC, GiST, расширяемость в MySQL? Где поддержка юзеровских типов ? Примеры - реализация сферической геометрии, полнотекста, оба с индексной поддержкой, без влезания в ядро. Реализация RD-tree, опять же без влезания в ядро. Где триггеры, хранимые процедуры, union?
ЗЫ если для кого-то это пустой звук, то собственно говоря, этому кому-то действительно подойдет MySQL как SQL-like интерфейс к файлам.
ЗЗЫ Особенно меня радуют следующие комментсы:
# При попытке сохранить в числовом столбце величину, выходящую за допустимые пределы, сервер MySQL вместо нее будет сохранять в этом столбце наименьшую или наибольшую допустимую величину.
# При попытке сохранить в числовом столбце строку, которая начинается не с числа, сервер MySQL будет сохранять в нем 0.
# При попытке сохранить NULL в числовом столбце, который не принимает значения величины NULL, сервер MySQL вместо NULL будет сохранять 0 или '' (пустая строка) (однако это поведение можно изменить с помощью опции компиляции -DDONT_USE_DEFAULT_FIELDS).
# MySQL обеспечивает возможность сохранять некоторые ошибочные величины даты в столбцах DATE и DATETIME (такие как 2000-02-31 или 2000-02-00). Идея заключается в том, что задача проверки валидности даты не входит в круг обязанностей сервера баз данных. Если MySQL может сохранить и корректно воспроизвести какие-либо значение даты, пусть и неправильное - MySQL будет сохранять такое значение. Если дата полностью неправильна, сервер MySQL будет сохранять в этом столбце специальную величину даты 0000-00-00.
Они сильно увеличивают надежность и предсказуемость поведения базы :)))) (это я издеваюсь, если кто не понял)
> Насчет репликации в MySQL - см. pdf'ку по ссылочке в пред. посте.
Ну так и пишите, что в MySQL нет N-way replication!
А вообще, по поводу сравнения - идём на главную страницу (www.dbginc.com) и читаем, что "The Database Group, Inc. specializes in Delphi and InterBase training and consulting and all types of technical writing and documentation."
Как вы думаете, какое ещё могло у них получиться сравнение?
> а какое СРАВнение могло получиться у ООО "мыскль" в документации на их поделие? а чего его тогда тут цитируют, а это нельзя, хе-хе?..
Вижу непонятное ехидство смешанное с незнанием русского языка :)
Я где-то написал, что цитирую сравнение? Человек пишет - "нет репликации". Я дал ссылку на документацию, где описана 1-way репликация, довольно давно имеющаяся в MySQL. Зачем мне что-то с чем-то сравнивать? Кому надо - сами сравнивают и принимают решения. Я лишь указал на фактическую ошибку. И всё. Не более того.
> Вижу непонятное ехидство смешанное с незнанием русского языка :)
Речь шла о посте "anonymous (*) (11.03.2004 18:02:07)", где ссылка на главу документации, которая к чести ООО "мыскль" уже выкинута из английской версии, но пока задержалась в русской. Отдыхаем.
># При попытке сохранить в числовом столбце величину, выходящую за >допустимые пределы, сервер MySQL вместо нее будет сохранять в этом >столбце наименьшую или наибольшую допустимую величину.
># При попытке сохранить в числовом столбце строку, которая начинается >не с числа, сервер MySQL будет сохранять в нем 0.
># При попытке сохранить NULL в числовом столбце, который не принимает >значения величины NULL, сервер MySQL вместо NULL будет сохранять 0 >или '' (пустая строка) (однако это поведение можно изменить с помощью >опции компиляции -DDONT_USE_DEFAULT_FIELDS).
># MySQL обеспечивает возможность сохранять некоторые ошибочные >величины даты в столбцах DATE и DATETIME (такие как 2000-02-31 или >2000-02-00). Идея заключается в том, что задача проверки валидности >даты не входит в круг обязанностей сервера баз данных. Если MySQL >может сохранить и корректно воспроизвести какие-либо значение даты, >пусть и неправильное - MySQL будет сохранять такое значение. Если >дата полностью неправильна, сервер MySQL будет сохранять в этом >столбце специальную величину даты 0000-00-00.
Не, ну это вообще зачет... а как с этим вообще можно работать, если подобные вещи написаны в документации ?
Это, извиняюсь, уровень недоучившихся студентов - в сад такие поделки
># При попытке сохранить в числовом столбце величину, выходящую за >допустимые пределы, сервер MySQL вместо нее будет сохранять в этом >столбце наименьшую или наибольшую допустимую величину.
># При попытке сохранить в числовом столбце строку, которая начинается >не с числа, сервер MySQL будет сохранять в нем 0.
># При попытке сохранить NULL в числовом столбце, который не принимает >значения величины NULL, сервер MySQL вместо NULL будет сохранять 0 >или '' (пустая строка) (однако это поведение можно изменить с помощью >опции компиляции -DDONT_USE_DEFAULT_FIELDS).
># MySQL обеспечивает возможность сохранять некоторые ошибочные >величины даты в столбцах DATE и DATETIME (такие как 2000-02-31 или >2000-02-00). Идея заключается в том, что задача проверки валидности >даты не входит в круг обязанностей сервера баз данных. Если MySQL >может сохранить и корректно воспроизвести какие-либо значение даты, >пусть и неправильное - MySQL будет сохранять такое значение. Если >дата полностью неправильна, сервер MySQL будет сохранять в этом >столбце специальную величину даты 0000-00-00.
Не, ну это вообще зачет... а как с этим вообще можно работать, если подобные вещи написаны в документации ? Это, извиняюсь, уровень недоучившихся студентов - в сад такие поделки
Мы, кажется сравнивали бесплатные сервера БД? Так давайте сравнивать с бесплатным PostgreSQL (к которому поддержка и документация тоже имеются - только за деньги) _бесплатную_ версию MySQL. :))
Именно их я и сравниваю.. Именно в бесплатной версии мускула есть:
- транзакции
- репликации (в постгресе - до недавнего времени только в коммерческой, не знаю как сейчас)
это - вообще родное.. чтобы его отключить, нужно компилить с ключиками.. и работает уже __очень__ давно (гораздо раньше постргреса, годами), и большинтво "кластеров" на нем и работают
Таким образом твоему eRServer полгода от рождения..
далее, лицензия:
NO TRANSFER
Any transfer, assignment or distribution of the source or binary forms without the prior written permission of PostgreSQL, Inc., except as explicitly permitted herein, is prohibited and shall render the LICENSE null and void. Any attempt to transfer, assign or distribute the source or binary forms in violation of this section shall be a violation of these terms and shall immediately terminate this LICENSE and all rights granted under it.
Это ты называешь опенсурс?
далее, идем а "абоут".. они слово кластер даже упомянуть постеснялись.. обычная репликация, которая в мускуле уже несколько лет без лишней помпы в GPL варианте людям радость приносит..
> Не, ну это вообще зачет... а как с этим вообще можно работать, если подобные вещи написаны в документации ? Это, извиняюсь, уровень недоучившихся студентов - в сад такие поделки
Ты думаешь, лучше бы они в документации это не отразили? :))))))
Status Report Last Updated: 8th March, 2004 Many people have been asking about the status of our native Win32 port. This web page explains its current status, and the additional work still required.
короче по состоянию на 8-е марта все еще работают наж проблемой..
ага.. вообще не для конечных пользователей.. сугубо для использования внутри osdl для тестирования OS.. так как очень уж хороij грузит прцессор/аппаратуру на не очень больших данных
Внешнее решение. Такая кластеризация есть и для PostgreSQL.
eRServer я упомянул именно в контексте репликации.
От роду ему не полгода - это он полгода как под лицензию BSD переведен.
BSD-лицензия... если она не open source - то что она тогда такое???
типа ООО "мыскль" его купило? или он типа только с мысклём работает?
> идем http://www.erserver.com/ Таким образом твоему eRServer полгода от рождения.. Это ты называешь опенсурс?
тупое чмо. тебе выше указали ссылку на BSD версию erserver. Эта версия в коммерческой инкарнации уже давно используется, в частности для поддержки доменов .org и .info, а исходники таки да, были открыты полгода назад.
так по поводу кластеров: Где. Я. Могу. Скачать. Бесплатно. Кластерную. Версию. мыскля?
> Status Report Last Updated: 8th March, 2004 Many people have been asking about the status of our native Win32 port. This web page explains its current status, and the additional work still required.
> короче по состоянию на 8-е марта все еще работают наж проблемой..
ну. а ты хотел версию 7.5 альфа, которая не работает, зато под которую кучу прессрелизов "мы поддерживаем ФСЁ!!!" можно написать?
>>>А оная не обладает ни кластеризацией >>http://sourceforge.net/projects/clustlib/ >Внешнее решение. Такая кластеризация есть и для PostgreSQL. >eRServer я упомянул именно в контексте репликации.
Дык именнно в плане репликации его и не стоило упомянать.. Так как мускул поставляется вместе с репликацией по умолчнию и в GPL виде несколько лет..
В отличие от eRServer, который недавно и отдельным пакетом..
WAL - write a head logging - сильно помогает после хардверного фолта и при инсертах/апдейтах
MVCC - Multi version concurence control. Фича управляющая видимостью результатов других транзакций для текущей. Например, можно выставить что при begin'е сотояние базы фиксируется (ТОЛЬКО для текущей транзакции, все остальные нормально все видят) или текущая транзакция видит только закоммиченные рез-таты других и тд
GiST - Generalized Search Tree - обобщеный интерфейс построения индексов. Как раз фича для юзеровских типов
Сферическая геометрия полезна (и даже необходима) для астрономии/картографирования.
RD-tree - Rusian Doll tree ( русская матрешка :) ) - структура для поиска в массивах, например: найти все массивы из данных, в которых встречается элементы со значениеми 5 и 8. http://db.cs.berkeley.edu/papers/UW-CS-TR-1252.pdf Вещь, заметно ускоряющая выборки (в определенных случаях) за счет отстствия join'a и/или subselect'a. Кстати, реализовано через GiST.
А R-tree есть в двух вариантах - встроенном и через GiST.
Индекс по полнотексту тоже через GiST сделан.
С юзеровскими типами дело такое, пока не пробуешь и не думаешь - да на хрен они нужны-то, все и без них сделать можно. Но, оказывается, с ними база проще и управляемее.
>Во всех перечисленных случаях, мускул кидает варнинг. так что не вполне понятно при чем тут "предсказуемость"? вполне вроде логичное поведение.
Тут ситуация очень похожа на типизацию в языках: на нетипизированных или со слабой типизацией языках большие проекты не живут, не получается. Слишком много ошибок этим вноситься...
> идем http://www.erserver.com/ Таким образом твоему eRServer полгода от рождения.. Это ты называешь опенсурс?
>тупое чмо. тебе выше указали ссылку на BSD версию erserver. Эта версия в коммерческой инкарнации уже давно используется, в частности для поддержки доменов .org и .info, а исходники таки да, были открыты полгода назад.
:)) я фигею.. я ему цитирую лицензию с оффициального сайта, а он всякую чушь еще порет.. с лицензией пуст сначала что нить сделают, а потом говорят, что оно у них есть..
>так по поводу кластеров: Где. Я. Могу. Скачать. Бесплатно. Кластерную. Версию. мыскля?
в том контексте что вы тут обзываете кластеры (типа репликация это и есть кластер) оно там..
>WAL - write a head logging - сильно помогает после хардверного фолта и при инсертах/апдейтах MVCC - Multi version concurence control. Фича управляющая видимостью результатов других транзакций для текущей. Например, можно выставить что при begin'е сотояние базы фиксируется (ТОЛЬКО для текущей транзакции, все остальные нормально все видят) или текущая транзакция видит только закоммиченные рез-таты других и тд
я тут не специалист а разбираться самому в лом.. но уровне видимости и версионность точно есть..
>Сферическая геометрия полезна (и даже необходима) для астрономии/картографирования.
>RD-tree - Rusian Doll tree ( русская матрешка :) ) - структура для поиска в массивах, например: найти все массивы из данных, в которых встречается элементы со значениеми 5 и 8. http://db.cs.berkeley.edu/papers/UW-CS-TR-1252.pdf Вещь, заметно ускоряющая выборки (в определенных случаях) за счет отстствия join'a и/или subselect'a. Кстати, реализовано через GiST.
Этого ничего нет, но именно по этому я и говорю, что мускул скорее гонится за рынком, на котором никакой сферической в массе нет..
>А R-tree есть в двух вариантах - встроенном и через GiST. >Индекс по полнотексту тоже через GiST сделан.
ну может их и можно сделать через GiST, но вот мускул их как то без них сделал..
>>Во всех перечисленных случаях, мускул кидает варнинг. так что не вполне понятно при чем тут "предсказуемость"? вполне вроде логичное поведение.
>Тут ситуация очень похожа на типизацию в языках: на нетипизированных или со слабой типизацией языках большие проекты не живут, не получается. Слишком много ошибок этим вноситься...
Вы правильно уловили всю суть.. Именно строготипизированный C/C++ при попытке присвоить например инту например дабл именно и кидает варнинг.. Т.е. имеено в соответствии с этой идеалогией, мускул себя и ведет..