Компания Oracle представила (http://www.oracle.com/us/corporate/press/439460) на конференции OSCON (О’Reilly Open Source Convention) предварительную версию новой ветки MySQL 5.6, в которой продолжена работа по улучшению масштабируемости, производительности и гибкости. Наиболее значительные улучшения затронули движок InnoDB, в котором появилась долгожданная поддержка средств полнотекстового поиска, увеличена производительность работы при интенсивной записи данных, а также увеличена масштабируемость при обработке большого числа одновременных запросов. Тестовую версию MySQL 5.6 можно загрузить с сайта labs.mysql.com (http://labs.mysql.com/).
Ключевые улучшения:- Возможность создания в InnoDB полнотекстовых индексов для организации быстрого поиска по словоформам среди текстового контента, хранимого в таблицах InnoDB. Ранее полнотекстовый поиск был доступен только для таблиц MyISAM;
- Поддержка опций для ручной или автоматической предварительной загрузки содержимого пу...
URL: http://www.oracle.com/us/corporate/press/439460
Новость: http://www.opennet.me/opennews/art.shtml?num=31291
ROW_NUMBER когданить прикрутят ?
Не прикрутят, и правильно, потому что это уродский костыль.
Альтернатива?
альтернатива чему? юз-кейс какой.
Таблица:
cat | val
1 5
1 6
1 3
2 5
2 2
2 1
3 3
3 7
Выбрать по N значений для каждой категории. В Oracle, MSSQL и Postgres сие решается стандартно where ROW_NUMBER < N, возможность пронумеровать строки вообще частенько востребована. Как сие решается в MySQL и насколько это стандартно ? Вопрос вообще следовало задавать - когда прикрутят оконные функции?
Поставим вопрос иначе - как часто приходится средствами SQL решать задачи TopN? Мне лично за 17 лет не приходилось _НИКОГДА_ (я профессиональный специалист по Oracle).
выбрать по 3 товара из каждой группы. ниразу ?
> выбрать по 3 товара из каждой группы. ниразу ?Контекст задачи. ГДЕ нужна такая постановка?
Формирование групп с равномерным распределением представителей (представить от каждого отдела по 3 чел например), превью каталогов (витрины)
> Поставим вопрос иначеНе вы его ставили и не вам его извращать. Вопрос был не про TopN а про нумерацию записей, которая используется еще чаще. Ах да, извините, вы же профессиОнал, а мы тот лохи, челом бъем светлейший, не карайте...
>> Поставим вопрос иначе
> Не вы его ставили и не вам его извращать. Вопрос был не
> про TopN а про нумерацию записей, которая используется еще чаще. Ах
> да, извините, вы же профессиОнал, а мы тот лохи, челом бъем
> светлейший, не карайте...Нумерация записей банально делается сиквенсом.
В пределах группы не делается
> Поставим вопрос иначе - как часто приходится средствами SQL решать задачи TopN? Мне лично за 17 лет не приходилось _НИКОГДА_ (я профессиональный специалист по Oracle).Хреновый, скажем так, батенька из Вас специалист. И не только по oracle, а вообще по базам данных. На практике, ROW_NUMBER одна из самых часто востребованных аналитических функций. Одно из обычных применений: Есть таблица, один столбец - глобальная сортировка. Другой столбец - номер группы к которой принадлежит строка. Нужно расчитать локальную сортировку в пределах группы. Если Вы с такой задачей за 17 лет ни разу не сталкивались, то я не понимаю, что вы вообще делали с СУБД. Ставили и сносили?
>> Поставим вопрос иначе - как часто приходится средствами SQL решать задачи TopN? Мне лично за 17 лет не приходилось _НИКОГДА_ (я профессиональный специалист по Oracle).
> Хреновый, скажем так, батенька из Вас специалист. И не только по oracle,
> а вообще по базам данных. На практике, ROW_NUMBER одна из самых
> часто востребованных аналитических функций. Одно из обычных применений: Есть таблица,
> один столбец - глобальная сортировка. Другой столбец - номер группы к
> которой принадлежит строка. Нужно расчитать локальную сортировку в пределах группы. Если
> Вы с такой задачей за 17 лет ни разу не сталкивались,
> то я не понимаю, что вы вообще делали с СУБД. Ставили
> и сносили?Я 12 лет разрабатываю приложения для БД (Firebird). Аналитики хватало. У самого не появлялось потребности в подобной фичи ни в кодах других проектов не видел подобного. Видимо все вокруг лохи, раз не используют "ОДНУ ИЗ САМЫХ ВОСТРЕБОВАННЫХ" аналитических функций.
> Я 12 лет разрабатываю приложения для БД (Firebird). Аналитики хватало. У самого не появлялось потребности в подобной фичи ни в кодах других проектов не видел подобного. Видимо все вокруг лохи, раз не используют "ОДНУ ИЗ САМЫХ ВОСТРЕБОВАННЫХ" аналитических функций.Это вполне нормально для разработчика Firebird, т.к. там их еще нет (появятся в 3-м). Да и в постгресе только появились (8.4) и в oracle с mssql-ем им чуть более 5-ти лет. Во многих случаях analytical functions могут быть замены/сэмулированы аггрегирующими запросами с выносом некоторой части логики в приложение. Что большинство людей и делает. Но в случаях, когда приложение невозможно поправить или это по каким-либо причинам накладно, они незаменимы. Кроме того, часто удобнее разрабатывать зная, что аналитические функции существуют и где можно упростить свое существование их применением. И уж "OCP с 17-летним стажем" обязан знать про их существование и то, когда они используются.
В oracle analytical functions есть с 8i т.е. с 1999 года
забыл добавить, в чужих проектах с использованием MySQL, Postgres
>> Поставим вопрос иначе - как часто приходится средствами SQL решать задачи TopN? Мне лично за 17 лет не приходилось _НИКОГДА_ (я профессиональный специалист по Oracle).
> Хреновый, скажем так, батенька из Вас специалист. И не только по oracle,
> а вообще по базам данных. На практике, ROW_NUMBER одна из самых
> часто востребованных аналитических функций. Одно из обычных применений: Есть таблица,
> один столбец - глобальная сортировка. Другой столбец - номер группы к
> которой принадлежит строка. Нужно расчитать локальную сортировку в пределах группы. Если
> Вы с такой задачей за 17 лет ни разу не сталкивались,
> то я не понимаю, что вы вообще делали с СУБД. Ставили
> и сносили?Есть такая дисциплина - "Реляционный моделинг". При правильном моделировании такой задачи не возникает в принципе. Слова "нормализация" и "денормализация" о чем-нибудь говорят вообще?
Вы говорите не про правильное а про идеальное, то что сферическое в вакууме. В реальности же спроектировать большую базу абсолютно правильно невозможно, во первых задача не до конца ясна, со временем изменяется, во вторых требования зачастую противоречат друг другу, в третьих нет времени, в четвертых возможности модификации структуры и т.д.
добавлю свои 5 копеек
виртуальный грид, как пример
запросы - один экран данных, потом другой и т.д.
> В Oracle, MSSQL и Postgres сие решается стандартно where ROW_NUMBER < N,оконные ф-ии, тогда, это нужно.
>> В Oracle, MSSQL и Postgres сие решается стандартно where ROW_NUMBER < N,
> оконные ф-ии, тогда, это нужно.Можно развить пример? А КОГДА это нужно?
есть такое заболевание, человеку ставят вопрос а он не понимает что это вопрос
> есть такое заболевание, человеку ставят вопрос а он не понимает что это
> вопросЕсть неспособность правильно формулировать вопрос. Это дефект интеллекта, а не заболевание.
остальные поняли
Вообще-то хак с ROW_NUMBER в mysql, postgresql и тд не нужен - в отличии от оракла, делающего все по своему (чего стоит хотя бы свой синтаксис для джоинов и "sql'ные джоины", глючащие до 10-ки), они поддерживают полноценные LIMIT/OFFSET.
Учил бы матчасть (равнодушно). Оракл вообще то соответствует стандартам ANSI-92 и (сюрприз!) его якобы новые джойны - всего лишь имплементация ANSI-99!В оракле глючат не джойны, а геи^Wкодеры-рукосуи, пишущие ТАКОЕ, что у меня волосы дыбом становятся. И - да, я сертифицированный Oracle SQL Expert. Знаю, о чем говорю. А с кем я имею честь из специалистов по SQL разговаривать?
Вы вообще в курсе, что MySQL не является реляционной БД для начала? Да-да, у него нет FOREIGN KEYS. Соответственно, талицы связать нельзя, ergo он не является реляционной базой, quad erad demonstrandum. А еще - так, до кучи - раз нет связей, говорить о джойнах - оксюморон.
> Вы вообще в курсе, что MySQL не является реляционной БД для начала? Да-да, у него нет FOREIGN KEYS. Соответственно, талицы связать нельзя, ergo он не является реляционной базой, quad erad demonstrandum. А еще - так, до кучи - раз нет связей, говорить о джойнах - оксюморон.На этом я думаю можно и закончить наше интервью с профессиональным сертифицированным оракл-специалистом :)
Хосспади. Я что, спорю про реляционность mysql?
FOREIGN KEYS поддерживаются в InnoDB, кстати. Всегда умиляла эта особенность многих ораклистов настолько свысока смотреть на все другие базы, чтобы быть не в курсе, что там вообще есть..Под глючащими джоинами я имею ввиду совершенно реальную ситуацию несколько лет назад, когда код, замечательно выполняющийся на девелопмент-версии оракла, даже на двух разных при этом падал на продакшене, в смысле валил оракловый процесс по сегфолту. После анализа выяснилось, что в последнем 9.2 был какой-то занятный баг, из-за которого на LEFT JOIN (или RIGHT - забыл) по ANSI синтаксису, использованным разработчиком, обрабатывающий процесс падал в 64-х битной версии. При этом на девелопмент-сервере была 32-х битная версия, в которой бага не было; не было его и на втором девелопменте с десяткой. Простая замена JOIN'а на гадкий оракловый изврат с (+), который по документации весь из себя deprecated с просьбами использовать нормальный ANSI синтаксис решила проблему - запрос остался совершенно таким же, но перестал падать на 64-х битном оракле. Хотя потом нашли информацию о баге и патч, осадочек остался. Лично я вот совершенно не понимаю, как можно падать на одном синтаксисе и нормально отрабатывать другой.
> Хотя потом нашли информацию о баге и патч, осадочек остался. Лично я вот совершенно не понимаю, как можно падать на одном синтаксисе и нормально отрабатывать другой.Я совершенно не понимаю, как вообще промышленный сервер RDBMS может *падать в сегфолт на синтаксисе*. Любом. У меня сам этот факт не укладывается в голове :-/
welcome to oracle :)
Там есть такое, и немало. Плата, гибкость, фичастость и монстрообразность. Я видел и другие примеры; например, несколько случаев ORA-0600, вызванных не глюками железа, а внутренними; решалось обычно каким-нибудь патчем или настройкой - решения в оракле, в принципе, есть у всех проблем, но самое сложное это продиагностировать, в чем именно проблема. Что очень нетривиально при ORA-0600 или SIGSEGV'ом процесса.От суровых дядек-админов я слышал всякие байки про еще более злобные ситуации на Oracle RAC, к примеру, но пока, к счастью, не видел.
(Падает, конечно, не "вся база" а только процесс, обрабатывающий данное соединение).
*Плата за
У вас слишком зашкалило ЧСВ и при этом познания какие-то никакие.
Ваши "знания" в mysql устарели лет так на 6-7.
Вообще, row_number - это относится к аналитическим функциям. Это именно то, чего в mysql нет, но есть у postgres, oracle и mssql и чего в mysql приходится заменять костылями. А в oracle заместо limit/offset используется rownum - псевдостолбец с порядковым номером строки в выдаче. Так вот, row_number это совсем не rownum
Звучит разумно. В своем посте я ошибочно писал про него, имея ввиду rownum; row_number же в вашем описании действительно имеет смысл.Вы объясняте куда лучше, чем "сертифицированный Oracle SQL Expert" :)
>Oracle представила MySQLвсе никак не могу привыкнуть к такому..
>все никак не могу привыкнуть к такому..Ну ещё бы. На опеннете излили мегабайты ненависти, бреда и откровенной клеветы в адрес оракла, а он потихоньку работает. На себя. и немного для открытого софта.
Заметим в сторону - _НИКТО_ из критиков профессионалом Oracle (OCP, OCM) кагбе не является. "Я Ростроповича не читал, но осуждаю!" :ROFL:
>Binlog APIа вот это очень и очень хорошо.
Что теперь со Sphinx Search?
> Что теперь со Sphinx Search?Эээ.. А что теперь с ним и почему собственно говоря с ним должно что-то случиться :-?
> Эээ.. А что теперь с ним и почему собственно говоря с ним должно что-то случиться :-?Или Вы про то, что появился Full Text Search на InnoDВ? Так это ещё бабка надвое сказала как это все будет работать. Теоретически конечно приятно, что появился, молодцы. Практически же если зарядить его на табличку в пату сотен миллионов записей - меня терзают смутные сомнения (c).. Тогда как сфинкс вполне себе ворочается.
конечно, работать лучше специально оптимизированного решения не будет. Уже много раз пройденная тема в разных СУБД.
А как у него с обновлением на лету? Прикрутили?
InnoDB всё такой же неповоротливый тормоз?
> InnoDB всё такой же неповоротливый тормоз?Огласите задачи, на которых у Вас данных движок был якобы "тормозом" ....
INSERT'ы. Много INSERT'ов.
HandlerSocket вам в помощЪ...
оригинал: http://yoshinorimatsunobu.blogspot.com/search/label/handlers...
ваш случай: http://habrahabr.ru/blogs/nosql/113039/
> оригинал: http://yoshinorimatsunobu.blogspot.com/search/label/handlers...Очень любопытно, нужно будет как-нить попробовать. Спасибо за ссылку.
>> оригинал: http://yoshinorimatsunobu.blogspot.com/search/label/handlers...
> Очень любопытно, нужно будет как-нить попробовать. Спасибо за ссылку.нечего там пробывать, возьмите последний Percona сервер и юзайте...
HandlerSocket там уже давно, да и много чего вкусного найдете ;-)http://www.percona.com/software/percona-server/
Прямая и обратная совместимость с мусклем, не понравится вернетесь назад...
> Увеличение максимального размера файлов с логами отката изменений (InnoDB Redo Log)Redo Log это логи НАката
>> Увеличение максимального размера файлов с логами отката изменений (InnoDB Redo Log)
> Redo Log это логи НАкатаСовершенно верно. В Оракле логи отката - это флэшбэк-логи.
В оракле логов отката нет, есть сегменты отката, как и в Innodb. И да, к флешбеку это имеет достаточно второстепенное отношение.
> В оракле логов отката нет, есть сегменты отката, как и в Innodb.
> И да, к флешбеку это имеет достаточно второстепенное отношение.Прямое отношение. Флэшбэк-логи формируются прямо из UNDO-записей (бывш.rollback). Сегменты отката (rollback) в первоначальном виде начиная с 9.0 не поддерживаются по умолчанию.
Курить Server Cоncepts до просветления в архитектуре сервера. Потом вылазить с авторитетным мнением. Компрене?
Ты ещё не лопнул от свой значимости? Тогда уже скоро.
> Сегменты отката (rollback) в первоначальном виде начиная с 9.0 не поддерживаются по умолчанию.тебе сертификат дали, а научить всему забыли
А тебе его не дали за отсутствием не то, что даже знаний - а хотя бы по причине того, что мануалов ты просто не читал ораклиных.
Суть в том, что сегменты отката в оракле это механизм mvcc. FB к этому всего навсего небольшой довесок. Называть их FB логами немного тупо.
> В оракле логов отката нет, есть сегменты отката, как и в Innodb. И да, к флешбеку это имеет достаточно второстепенное отношение.к флешбеку это имеет самое прямое отношение. начиная с 9-го oracle можно выставлять задержку очистки undo-сегмента (UNDO_RETENTION) и делать ретроспективные запросы по еще не удаленным данным, именно те самые flashback queries
>> В оракле логов отката нет, есть сегменты отката, как и в Innodb. И да, к флешбеку это имеет достаточно второстепенное отношение.
> к флешбеку это имеет самое прямое отношение. начиная с 9-го oracle можно
> выставлять задержку очистки undo-сегмента (UNDO_RETENTION) и делать ретроспективные
> запросы по еще не удаленным данным, именно те самые flashback queriesОб чем и спич. Экспертов тут по ораклу немерено, как я погляжу.